6회차 강의에서 해야 할 내용을 5회차 강의 때 앞질러 해버렸다... 머쓱하군.
그래서 이번 회차에서는 5회차 때 완성했던 코드를 강사님의 코드와 유사하게 수정해보았다.
내가 5회차 때 썼던 코드와 강사님이 이번 강의에서 쓴 코드의 주된 차이점은 다음과 같다.
- 리스트의 조회 방법: 나는 인덱스로, 강사님은 for문과 if문으로 조회함.
- 네비게이터가 모든 화면에 표시됨: 나는 read 화면들에 간단한 문자열 하나만 표시되게 하였지만, 강사님은 메인 화면에 표시되었던 네비게이터가 모든 read 화면의 상단에 표시되게 함.
- 리턴값의 차이: 나는 화면 표시 함수가 단순한 문자열을 리턴하게 만들었지만, 강사님은 html 코드를 리턴함.
- 형 변환의 시점: URL에서 받아오는 id는 기본적으로 문자열임. 나는 그 문자열을 함수 내에서 int()를 사용해 정수로 변환하였지만 강사님은 route() 내에 <int:id> 를 적어서 정수로 변환하였음.
- 함수화: 강사님은 중복되는 부분을 함수화하였음.
이 점들을 반영하여 수정하였다.
완성된 코드는 다음과 같다.
from flask import Flask
app = Flask(__name__)
topics = [
{'id': 1, 'title': 'A', 'content': 'This is page A.'},
{'id': 2, 'title': 'B', 'content': 'This is page B.'},
{'id': 3, 'title': 'C', 'content': 'This is page C.'}
]
# 중복되는 부분을 함수화함. 페이지마다 변동되는 부분의 내용은 인자로 받아옴.
def template(content):
str= '' # html 코드를 담을 문자열
# for문을 사용하여 str의 내용을 만들기
for topic in topics:
str = str + f'<li><a href = "/read/{topic["id"]}/">{topic["title"]}</a></li>'
# 리턴
return f'''<!doctype html>
<html>
<body>
<h1><a href = "/">Main</a></h1>
<ol>
{str}
</ol>
{content}
</body>
</html>
'''
# 메인 페이지
@app.route('/')
def index():
return template('<span>Welcome!</span>')
# A, B, C를 눌러 들어간 페이지
@app.route('/read/<int:id>/')
def read(id):
content = ''
for topic in topics:
if topic['id'] == id:
content = topic['content']
return template(content)
app.run()
실행 화면은 다음과 같다.
1. 메인 페이지
2. /read/1/
3. /read/2/
4. /read/3/
'기타 공부 > 생활코딩 Python Flask Web Framework 노트정리' 카테고리의 다른 글
8. 수정 (0) | 2022.10.24 |
---|---|
7. 쓰기 (0) | 2022.10.24 |
5. 홈페이지 구현 (2) | 2022.10.22 |
4. 라우팅 (0) | 2022.10.22 |
3. 플라스크를 사용하는 이유 (0) | 2022.10.22 |