ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 web framework - 6. 읽기

    '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
Designed by Tistory.