기타 공부/생활코딩 Python Flask Web Framework 노트정리

6. 읽기

모항 2022. 10. 22. 23:02

 

6회차 강의에서 해야 할 내용을 5회차 강의 때 앞질러 해버렸다... 머쓱하군.

 

그래서 이번 회차에서는 5회차 때 완성했던 코드를 강사님의 코드와 유사하게 수정해보았다.

 

내가 5회차 때 썼던 코드와 강사님이 이번 강의에서 쓴 코드의 주된 차이점은 다음과 같다.

  1. 리스트의 조회 방법: 나는 인덱스로, 강사님은 for문과 if문으로 조회함.
  2. 네비게이터가 모든 화면에 표시됨: 나는 read 화면들에 간단한 문자열 하나만 표시되게 하였지만, 강사님은 메인 화면에 표시되었던 네비게이터가 모든 read 화면의 상단에 표시되게 함.
  3. 리턴값의 차이: 나는 화면 표시 함수가 단순한 문자열을 리턴하게 만들었지만, 강사님은 html 코드를 리턴함.
  4. 형 변환의 시점: URL에서 받아오는 id는 기본적으로 문자열임. 나는 그 문자열을 함수 내에서 int()를 사용해 정수로 변환하였지만 강사님은 route() 내에 <int:id> 를 적어서 정수로 변환하였음.
  5. 함수화: 강사님은 중복되는 부분을 함수화하였음.

이 점들을 반영하여 수정하였다.

 

완성된 코드는 다음과 같다.

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