ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [FLASK] 쓰기(Create)_1
    FLASK 2022. 11. 12. 21:28

     

     

     

    이번엔 쓰기 기능(Create)을 구현해 보도록 하겠습니다!

     

    현재 코드▼

    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)

     

     

    create를 구현하기 위해서는

    create로 이동하는 링크가 있어야 합니다.

    Hello, WEB 하단에 만들어주도록 하겠습니다!

     

     

     

     

     

     

     

     

     

     

     

     

    먼저 template()을 수정해줍니다.

    추후 update, delete도 만들 예정이기 때문에

    <li>태그(목록)으로 묶고

    순서가 없는 리스트이므로 <ul>태그로 감싸줍니다.

     

     

     

     

     

     

     

     

     

     

     

     

     

    create를 클릭하면

    /create/페이지로 이동하고 문구가 출력됩니다.

     

     

     

     

     

     

     

     

     

     

     

    @app.route('/create/', methods=['GET', 'POST'])
    def create():
        content = '''
            <form action="/create/" 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(getContents(), content)

     

     

     

    create() 함수를 수정합니다.

     

     

     

    쓰기 기능에서는 서버쪽으로 제목, 본문을 전송해야 합니다.

    text정보를 서버로 전송할 때

    사용자로부터 입력받는 태그는 <input type="text">입니다.

    placeholder를 추가하면

    무엇을 적어야할지 문구를 나타낼 수 있습니다.

    (입력시 사라집니다.)

     

     

     

     

     

     

     

     

     

     

     

     

     

    title(제목)을 추가했으니

    body(본문) 정보도 추가해주도록 하겠습니다.

    본문은 여러줄의 글이 입력될 수 있습니다.

    여러줄의 text는 input이 아닌

    <textarea>라는 태그를 사용합니다.

     

     

     

     

    그런데 입력칸이 보기에 좋지 않네요!

    줄바꿈 태그인 <p>를 추가해 예쁘게 만들어 줍니다.

     

     

     

     

    깔끔하게 정리되었습니다 !

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    각각 입력한 값이 서버로 전송될 때 이름이 필요합니다.

    이름을 지정하는 것은 name 속성입니다.

     

    입력 후 전송할 때에 필요한 버튼을 만들어야겠죠?

    <input type="submit">은 '제출'이라는 버튼이 생성됩니다.

    value값을 주면 원하는 이름의 버튼이 생성됩니다!

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    사용자가 입력한 정보를 create 버튼을 눌렀을 때

    어떤 서버로 전송하려면

    어디로 전송할 것인지를 지정해야합니다.

    입력한 정보를 서버로 전송하는 역할이 <form>태그 입니다.

    action 속성은 어떤 경로로 전송할 것인가를 명시합니다.

     

     

     

     

    action속성에 'aabbcc'라는 값을 입력하고

    title과 body에 위와같이 입력한 다음

    creat를 누르면

    다음과 같은 주소로 이동합니다.

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    그런데 url을 살펴보면 데이터가 포함되어 있습니다.

    url을 통해서 서버로 데이터를 전송하는 방식은 GET방식으로

    동적으로 동작하는 웹서비스에서

    특정한 페이지를 식별하는 고유한 주소로서 사용되는 것입니다.

     

    우리가 하고있는 쓰기 기능은

    특정 페이지를 식별하는 것이 아닌

    새로운 정보를 추가, 수정하는 것이므로

    POST방식을 사용해야 합니다.

     

    method속성에 POST를 적어줍니다.

    (기본값은 GET)

     

     

     

    POST방식으로 데이터를 전송하면

    데이터가 url을 통해서 전송되지 않습니다!

    (url에 데이터 포함X)

     

    데이터를 읽어올 때 : GET

    데이터를 바꿀 때 : POST

     

     

     

     

     

     

     

     

    출처

    'FLASK' 카테고리의 다른 글

    [FLASK] 수정(Update)  (0) 2022.11.13
    [FLASK] 쓰기(Create)_2  (0) 2022.11.12
    [FLASK] 읽기(Read)  (0) 2022.11.11
    [FLASK] 홈페이지 구현  (0) 2022.11.11
    [FLASK] 라우팅(Routing)  (0) 2022.11.09
Designed by Tistory.