-
[FLASK] 읽기(Read)FLASK 2022. 11. 11. 16:47
현재 코드▼
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': 'javascript', 'body': 'javascript is ...'} ] @app.route('/') def index(): liTags = '' for topic in topics: liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>' return f'''<!doctype html> <html> <body> <h1><a href="/">WEB</a><h1> </ol> {liTags} </ol> <h2>Welcome</h2> Hello, Web </body> </html> ''' @app.route('/create/') def create(): return 'Create' @app.route('/read/<id>/') def read(id): return 'Read '+id
기본적인 데이터 처리 기능은 다음과 같습니다.
Create(생성)
Read(읽기)
Update(갱신)
Delete(삭제)
CRUD의 읽기(Read) 기능을 구현해보도록 하겠습니다 !
기본 틀은 웹페이지를 구현했던 것과 같습니다. (index() 부분)
index() 코드를 복사하여 가져와서 수정해가면서
표시된 Welcome / Hello, Web 부분이
선택한 글이 되도록 만들겠습니다.
@app.route('/read/<int:id>/') def read(id): liTags = '' for topic in topics: liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>' title = '' body = '' for topic in topics: if id == topic['id']: title = topic['title'] body = topic['body'] break return f'''<!doctype html> <html> <body> <h1><a href="/">WEB</a></h1> <ol> {liTags} </ol> <h2>{title}</h2> {body} </body> </html> '''
어떤 특정한 id로 접근했을 때
그 id를 topics에서 조회하여 id와 일치하는 데이터를 가져옵니다.
(id값과 일치하는 title, body)
※ 이때 <id>는 id값이 무조건 문자열(str)로 반환됩니다.
<int:id>로 입력하면
자동으로 플라스크가 정수(int)로 컨버팅을 해줍니다!
이제 이 데이터들을 사용해 볼까요?
Welcome 자리에 title값을
Hello, Web 부분에 body값을 넣어줍니다.
실행 후 목록을 클릭해 보면
'css is ...' 라는 문구가 잘 출력되는 것을 확인할 수 있습니다!
+ 코드 줄이기)
현재 코드에서 만든 index()와 read() 함수의 틀이 비슷해
겹치는 부분이 많습니다!
플라스크에서 '템플릿'이라는 기능을 사용하면 되지만
지금은 함수화하여 사용하겠습니다.
index()와 read()의 중복되는
return 부분을 template()이라는 함수로 만들었습니다.
바뀔 수 있는 부분은
각각 contents, content로 정하고
입력받는 파라미터로 전달해 줍니다.
마찬가지로 중복되는 목록을 만드는 부분(liTags)도
함수로 정의해주었습니다!
만든 함수를 입력하여
좀 더 간결하게 코드를 정리정돈 하였습니다~!
완성 코드 ▼
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': 'javascript', 'body': 'javascript is ...'} ] def template(contents, content): return f'''<!doctype html> <html> <body> <h1><a href="/">WEB</a><h1> </ol> {contents} </ol> {content} </body> </html> ''' def getContents(): liTags = '' for topic in topics: liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>' return liTags @app.route('/') def index(): return template(getContents(), '<h2>Welcome</h2>Hello, WEB') @app.route('/create/') def create(): return 'Create' @app.route('/read/<int:id>/') def read(id): title = '' body = '' for topic in topics: if id == topic['id']: title = topic['title'] body = topic['body'] break return template(getContents(), f'<h2>{title}</h2>{body}') app.run(debug=True)
출처
'FLASK' 카테고리의 다른 글
[FLASK] 쓰기(Create)_2 (0) 2022.11.12 [FLASK] 쓰기(Create)_1 (0) 2022.11.12 [FLASK] 홈페이지 구현 (0) 2022.11.11 [FLASK] 라우팅(Routing) (0) 2022.11.09 [FLASK] 환경셋팅하기 (0) 2022.11.09