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 createdelete
학습내용 중 어려웠던 점
flask 구현 과정이 조금 복잡하게 느껴졌다.
해결방법
- WEB의 '/' route
- 리스트를 클릭하면 넘어갈 '/read/' route
- 추가할 값을 입력받을 create button과 양식이 담긴 '/create/' route
- create한 양식을 진행할 수 있도록 하는 '/create_process/' route
- create한 list delete할 수 있는 '/delete/' route
- 필요한 함수는 중간에 선언하기
학습소감
과정이 조금 복잡하지만 구현하고 나서의 뿌듯함이 있다.
참고
https://flask.palletsprojects.com/en/2.1.x/quickstart/#the-request-object
Author And Source
이 문제에 관하여(20220331 Flask), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ujamong/20220331-Flask저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)