[개발일지7일차] 데이터베이스 Python 연동
1. 학습내용
1) flask- Create 기능: form 태그
- form 태그: server로 데이터를 전송할때 사용한다.~~
예시)
<form action="/create/" method="POST">
<p><input type="text" name="title" placeholder="title"></p>
<p><textarea name="body" placeholder="body"></textarea></p>
<p><input type="submit" value="create"></p>
</form>
이처럼
은 사용자의 입력을 받는 여러형태의 태그가 존재한다.상기의 예시에서는
input의 경우 text를 받고
textarea name 는 여러줄의 입력을 받으며
input type= "submit"는 사용자의 결심을 받는다. 즉, 전부 입력하였으니 제출을 받는다.라고 해석 할 수 있다.
2) flask- Create 기능: Method Get
먼저, 브라우저 입장에서는
읽기= Get= 어떤 정보를 가져오는 것
쓰는 것= POST (Get x)= 서버에서 어떤 정보를 추가하거나 저장하거나 삭제하거나, 로그인 하는 것.
<참고>
만약 Method 창이 뜨지 않으면 오른쪽 클릭한 후, Method에 체크
3) flask- Create 기능: Method Post
개발자 도구에서 create/ 에서 Metod의 창이 Get이 아닌 Post로 할 경우 url에 더이상 title에 body가 생성되지 않음
from flask import Flask
app = Flask(__name__)
topics = [
{"id":1, "title":"html", "body":"html is ...."},
{"id":2, "title":"css", "body":"css is ...."},
{"id":3, "title":"js", "body":"js is ...."}
]
def template(content):
liTags = ''
for topic in topics:
liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'
return f'''
<html>
<body>
<h1><a href="/">WEB</a></h1>
<ol>
{liTags}
</ol>
{content}
<ul>
<li><a href="/create/">create</a></li>
</ul>
</body>
</html>
'''
@app.route("/")
def index():
return template('<h2>Welcome</h2>Hello, WEB!')
@app.route("/read/<int:id>/")
def read(id):
title = ''
body = ''
for topic in topics :
if topic['id'] == id:
title = topic['title']
body = topic['body']
break;
return template(f'<h2>{title}</h2>{body}')
@app.route('/create/')
def create():
content = '''
<form action="/create_process/" method="POST">
<p><input type="text" name="title" placeholder="title"></p>
<p><textarea name="body" placeholder="body"></textarea></p>
<p><input type="submit" value="create"></p>
</form>
'''
return template(content)
@app.route('/create_process/', methods=['POST'])
def create_process():
return 'Success!'
# @app.route('/update/')
# def update():
# return 'Update'
app.run()
결과1-1) Method에 post 표시
즉, Get방식을 거부하고 post를 수용하게 된다.
결과1-2) url에 body가 나타나지 않게됨.
4) flask- Delete 기능
delete 즉, 삭제의 기능은 Get 방식이 아닌 form 방식이다.
만약 a 태그 (a href )를 사용 시 홈페이지에 들어가서 다시 삭제를 해야함.
from flask import Flask, request, redirect
app = Flask(__name__)
topics = [
{"id":1, "title":"html", "body":"html is ...."},
{"id":2, "title":"css", "body":"css is ...."},
{"id":3, "title":"js", "body":"js is ...."}
]
nextId = 4
def template(content, id=None):
liTags = ''
for topic in topics:
liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'
return f'''
<html>
<body>
<h1><a href="/">WEB</a></h1>
<ol>
{liTags}
</ol>
{content}
<ul>
<li><a href="/create/">create</a></li>
<li>
<form action="/delete/{id}/" method="POST">
<input type="submit" value="delete">
</form>
</li>
</ul>
</body>
</html>
'''
@app.route("/")
def index():
return template('<h2>Welcome</h2>Hello, WEB!')
@app.route("/read/<int:id>/")
def read(id):
title = ''
body = ''
for topic in topics :
if topic['id'] == id:
title = topic['title']
body = topic['body']
break;
return template(f'<h2>{title}</h2>{body}', id)
@app.route('/create/')
def create():
content = '''
<form action="/create_process/" method="POST">
<p><input type="text" name="title" placeholder="title"></p>
<p><textarea name="body" placeholder="body"></textarea></p>
<p><input type="submit" value="create"></p>
</form>
'''
return template(content)
@app.route('/create_process/', methods=['POST'])
def create_process():
global nextId
title = request.form['title']
body = request.form['body']
newTopic = {"id":nextId, "title": title, "body": body}
topics.append(newTopic)
nextId = nextId + 1
return redirect(f'/read/{nextId-1}/')
@app.route('/delete/<int:id>/', methods=['POST'])
def delete(id):
for topic in topics:
if topic['id'] == id:
topics.remove(topic)
break;
return redirect('/')
# @app.route('/update/')
# def update():
# return 'Update'
app.run()
에서 none 시 home으로 갔을때 error 표시가 나타나지 않게 된다.
def template(content, id=None):
결과1-1)
결과1-2) js를 누르고 delete를 눌렀을때
5) 데이터 베이스
기존의 파일시스템에서 중복된 정보를 효율적으로 처리하는 것이 관점 연구분야였고, 이 중복을 피하여 정보를 일원화 하여 처리를 효율적으로 수행하기 위해서 서로 관련성을 가지며 중복이 없는 데이터의 집합을 유지하는 것을 데이터 베이스라고 한다.
5-1) DataBase Ranking
홈페이지: https://db-engines.com/en/ranking
5-2) SQlite
홈페이지: https://sqlitestudio.pl/
실행화면
2. 학습한 내용 중 어려웠던 점 또는 해결못한 것들
1) flask 상 sqlite를 실행하여 코드를 작성하는 부분
3. 해결방법 작성
3-1) 수업동영상 참고
3-2) 스스로 code를 처음부터 작성하였다.
3-1과 3-2를 통하여 terminal에서 처음 .exit를 하고 .open topics. sqlit3과 .sqlite3 topics. sqlite3을 작성한 후에 terminal 상 올바르게 열이 바뀌었다.
이후
3-3) 열추가 방법
-
열추가 방법 1
초록색 버튼(insert row)를 누르고 열을 입력 한 후 파란색 버튼(refresh) 누름.
DDL에서 코드 추가되는 것을 확인 가능. -
열추가 방법 2
메모처럼 생긴 Open SQL& editor 클릭하여 아래의 코드 입력
입력 코드 적용
INSERT INTO topics (title, body) VALUES ('ORACLE', 'ORACLE is ...')
3-4) sqlit3에서 열을 추가한 후 DDL 상의 코드를 glitch 상에서 그대로 복사
CREATE TABLE topics (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
body TEXT
);
이후 glitch 상의 terminal에 refresh
<참고>
.open topics. sqlite3 = topics. sqlite3을 열 때
.exit = 나갈 때
.sqlite3 topics. sqlite3 = sqlite3 topics를 sqlite3에서 찾을 때
ls = 그동안의 문서정보를 알 수 있다.
ls -al = ls보다 더 상세한 문서정보를 알 수 있다.
refresh = sqlite 상의 화면을 glitch에서 저장기능
4. 학습소감
데이터베이스 관련해서 sqlit3를 실행하고 작동하였을때 수업시간에 잘 따라가지 못한 부분도 있었고 용어 부분에서도 많이 이해가 되지않는 등 많이 어려웠었는데 개발일지를 작성하면서 수업동영상을 참고하여 다시 sqlit를 실행하다보니 실행부분에서는 따라가나 아직까지도 용어사용 등에서는 이해가 조금 어렵다고 생각이 들었습니다. 인터넷에서 데이터베이스관련 용어 등을 찾아보면서 공부하여 이해가 필요함을 느꼈습니다.
Author And Source
이 문제에 관하여([개발일지7일차] 데이터베이스 Python 연동), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@joseojin/개발일지7일차-데이터베이스-Python-연동저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)