kaki1013

4. 쓰기 기능 구현 (1) 본문

버그바운티 스터디/FLASK

4. 쓰기 기능 구현 (1)

kaki1013 2023. 7. 21. 23:42

# 쓰기 칸 만들기

1. 예시 코드

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}
            <ul>
                <li><a href="/create/">create</a></li>
            </ul>
        </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('/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.route('/create/')
def create():
    """
        제목과 같은 text 정보를 서버로 전송할 때
        사용자로부터 입력을 받는 태그 input
            & 속성 type="text" & 해당 칸에 어떤 정보를 입력하는지 보여주는 속성 placeholder
        본문처럼 여러 줄을 입력받는 태그 textarea
        각각을 단락으로 구분하는 태그 p
        입력받은 text 정보가 서버로 전송될 때 사용될 이름을 지정하는 속성 name
        작성을 완료하고 서버로 전송할 때 필요한 버튼의 태그 input
            & 속성 type="submit" & 버튼의 label을 보여주는 속성 value
        서버로 전송할 사용자의 입력 정보를 그룹핑하는 태그 form
            & 서버의 어떤 경로로 전송할지 지정하는 속성 action & 전송할 메소드 지정하는 속성 method
    """
    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)


app.run(debug=True)

 

2. 요약

- 서버로 전송할 사용자의 입력 정보 → form 태그로 그룹핑

-  <input type="submit"> 버튼 → form 태그 안의 입력 정보를, form의 action 속성으로, method 방식을 통해 전송

- <form method="XXX">

        GET일 때 = 브라우저가 서버의 정보를 가져올 때 사용, POST = 브라우저가 서버의 정보를 변경할 때 사용

- GET 방식 : URL을 통해서 입력 정보가 전달 → 입력 정보가 노출 & 길어질 경우 오류 발생 가능

        동적으로 동작하는 웹 서비스에서 특정한 페이지를 식별하는 고유한 주소로서 사용

- POST 방식 : http 통신의 body를 통해서 전송됨 → 입력 정보가 감춰짐 & 대용량의 데이터를 전송 가능 

        정보를 바꿀 때는 URL 안에 데이터가 들어가 있으면 안됨 -> 감추는 방식 : POST

- 위의 코드는 글을 작성하고 제출해도, METHOD NOT ALLOWED라는 오류 메시지가 뜸

 

'버그바운티 스터디 > FLASK' 카테고리의 다른 글

6. 수정 기능 구현  (0) 2023.07.26
5. 쓰기 기능 구현 (2)  (0) 2023.07.22
3. 읽기 기능 구현  (0) 2023.07.21
2. 홈페이지 구현  (0) 2023.07.21
1. Routing  (0) 2023.07.21