파이썬기초 - flask 2일차
학습 내용
전체 소스 코드
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()
추가한 기능
create 버튼 누르면 list에 추가
- 기능 설명
create 페이지에서 create sumit을 누르면 create_process로 데이터를 보내는 action을 실행
create 페이지에서 보낸 데이터를 create_process 페이지에서 쓰려면
import request를 먼저 해야되고
create_process 페이지에서는 request.form['title']로 보낸 데이터를 가져온다.
@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 #전역에서 지정한 변수를 global이라고 지정하면 내부에서 수정할 수 있다
#topics는 값을 바꾸는게 아니라 추가하는 거라서 global 지정하지 않아도 되는 것이다
title = request.form['title']
body = request.form['body']
newTopic = {'id': nextId, 'title': title, "body": body}
topics.append(newTopic) #끝에 추가하기
nextId = nextId + 1
# return f'success!! go:/read/{nextId-1}'
return redirect(f'/read/{nextId-1}') #redirect 사용
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()
create 페이지에서 create sumit을 누르면 create_process로 데이터를 보내는 action을 실행
create 페이지에서 보낸 데이터를 create_process 페이지에서 쓰려면
import request를 먼저 해야되고
create_process 페이지에서는 request.form['title']로 보낸 데이터를 가져온다.
@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 #전역에서 지정한 변수를 global이라고 지정하면 내부에서 수정할 수 있다
#topics는 값을 바꾸는게 아니라 추가하는 거라서 global 지정하지 않아도 되는 것이다
title = request.form['title']
body = request.form['body']
newTopic = {'id': nextId, 'title': title, "body": body}
topics.append(newTopic) #끝에 추가하기
nextId = nextId + 1
# return f'success!! go:/read/{nextId-1}'
return redirect(f'/read/{nextId-1}') #redirect 사용
이제 텍스트를 입력하고 create 버튼을 클릭하면
create_process/ 페이지로 이동하고
create_process/ 페이지에서는 받아온 데이터를 topics에 추가하고
마지막 페이지 값인 nextId의 값을 1 증가시키고
화면에 success!! go:/read/(등록한페이지번호) 를 출력한다.
복사해서 주소창에 입력하면 입력한 글로 이동한다
- 실행 화면
delete 버튼 생성
- 기능 설명
탬플릿 함수에 딜리트 버튼 추가하고 값을 delete페이지로 보낸다
def template(content, id=None):
liTags = ''
liTags = ''
for topic in topics:
for topic in topics:
liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'
liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'
return f'''
return f'''
<html>
<html>
<body>
<body>
<h1><a href="/">WEB</a></h1>
<h1><a href="/">WEB</a></h1>
<ol>
<ol>
{liTags}
{liTags}
</ol>
</ol>
{content}
{content}
<ul>
<ul>
<li><a href="/create/">create</a></li>
<li><a href="/create/">create</a></li>
<li>
<form action="/delete/{id}/" method="POST">
<input type="submit" value="delete">
</form>
</li>
</ul>
</ul>
</body>
</body>
</html>
</html>
'''
'''
- 실행 화면
delete 버튼 누르면 list 제거
- 기능 설명
delete페이지에서 받아온 값에 해당하는 리스트를 지우고 메인페이지로 이동한다
@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.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('/delete/<int:id>/', methods=['POST'])
def delete(id):
for topic in topics:
if topic['id'] == id:
topics.remove(topic)
break;
return redirect('/')
@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('/delete/<int:id>/', methods=['POST'])
def delete(id):
for topic in topics:
if topic['id'] == id:
topics.remove(topic)
break;
return redirect('/')
전체적인 작동 원리는 알겠는데 어떻게 데이터를 주고 받는지 같은 세세한 것에 대한 이해가 부족했다.
수업이 끝난 후 해당 문서를 찾아보며 다시 직접 코딩해보니 이젠 좀 더 알 것 같다. 복습이 중요하다.
소감
오늘은 수업은 전반적으로 이해가 잘 되서 만족도가 크다. 지난 수업을 통해 처음 접한 웹프레임워크인 flask와 glitch라는 서비스가 어제까진 와닿지 않았었는데 오늘 수업을 통해 어떤 것인지 확실히 이해했다. 내일 수업엔 flask앱과 데이터베이스를 연결하는 걸 배운다는데 어떻게 할지 기대가 된다.
Author And Source
이 문제에 관하여(파이썬기초 - flask 2일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hanss1122/파이썬기초-flask-2일차-database저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)