20220331 Flask

학습한 내용

title과 body에 쓴 내용을 create하고 delete하기

# flask에 있는 Flask, request, redirect를 사용하겠다.
from flask import Flask, request, redirect


app = Flask(__name__)

topics = [
    {"id":1, "title":"html", "body":"html is ...."},
    {"id":2, "title":"css", "body":"css is ...."},
    {"id":3, "title":"js", "body":"js is ...."}
]

##1. 다음 list에 오를 id는 4이므로 'nextId'에 4를 넣어줌.
nextId = 4

# template 함수에 id parameter 추가
def template(content, id=None):
    liTags = ''
    for topic in topics:
      	liTags = liTags + f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'
    return f'''
    <html>
      <body>
        <h1><a href="/">WEB</a></h1>
        <ol>
          {liTags}
        </ol>
        {content}
        <ul>
          <li><a href="/create/">create</a></li>
          <li>
            <form action="/delete/{id}/" method="POST">
              <input type="submit" value="delete">
            </form>
          </li>
        </ul>
      </body>
    </html>
    '''

@app.route("/")
def index():
  	return template('<h2>Welcome</h2>Hello, WEB!')

@app.route("/read/<int:id>/")
def read(id):
    title = ''
    body = ''  
    for topic in topics :
      if topic['id'] == id:
        title = topic['title']
        body = topic['body']
        break;
    # id추가
    return template(f'<h2>{title}</h2>{body}', id)

@app.route('/create/')
def create():
	# form action을 "/create_process/" method="POST"로 변경
    content = '''
        <form action="/create_process/" 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(content)


##2. '/create_process/'를 route함. // methods에는 'POST' 외에도 넣을 수 있으므로 methods
@app.route('/create_process/', methods=['POST'])
def create_process():
	# 전역 변수의 의미로 global // 그래야 nextId 정보를 전달 할 수 있음
    global nextId
    # title, body에 입력한 내용을 request
    title = request.form['title']
    body = request.form['body']
    # newTopic 변수 생성
    newTopic = {"id":nextId, "title": title, "body": body}
    # newTopic에 입력된 정보를 topics에 넣어줌.
    topics.append(newTopic)
    # nextId의 값을 1 증가시킴
    nextId = nextId + 1
    #생성된 '/read/' page로 이동
    return redirect(f'/read/{nextId-1}/')


##3. create된 목록 삭제하기
@app.route('/delete/<int:id>/', methods=['POST'])
def delete(id):
    for topic in topics:
    	if topic['id'] == id:
        	topics.remove(topic)
        	break;
    # Home으로 이동
    return redirect('/')


app.run()
  • 실행결과
구현
hi 입력
hi create 후
WOW create
delete

학습내용 중 어려웠던 점

flask 구현 과정이 조금 복잡하게 느껴졌다.

해결방법

  1. WEB의 '/' route
  2. 리스트를 클릭하면 넘어갈 '/read/' route
  3. 추가할 값을 입력받을 create button과 양식이 담긴 '/create/' route
  4. create한 양식을 진행할 수 있도록 하는 '/create_process/' route
  5. create한 list delete할 수 있는 '/delete/' route
  • 필요한 함수는 중간에 선언하기

학습소감

과정이 조금 복잡하지만 구현하고 나서의 뿌듯함이 있다.

참고

https://flask.palletsprojects.com/en/2.1.x/quickstart/#the-request-object

좋은 웹페이지 즐겨찾기