초기 설치 : pip3 install flask
from flask import Flask
app = Flask(__name__)
@app.route('/')
def guri():
return "hello world"
if __name__ = "__main__":
app.run()
app = Flask(__name__)
: 이 파일이 다른 파일을 통해 실행이 됐는지 아니면 직접 실행된 건지를 알려준다.
@app.route('/') ~~
: Flask의 기능과 Python의 함수가 합쳐져서 하나의 API 역할을 한다.
@
: 데코레이터 => 어떤 반복적인 기능을 만들기 위해서, 자주 사용하는 기능을 만들기 위해서 코드를 반복해서 사용하는 경우가 있는데 이 데코레이터가 그런 수고를 덜어준다.
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def guri():
data = {"name" : "guri"}
return jsonify(data)
if __name__ = "__main__":
app.run()
flask 패키지 안에 존재하는 jsonify
를 import
data를 json 형식으로 바꿔서 리턴한다.
결과값은 {"name" : "guri"}
이 화면에 나타난다.
HTML을 화면에 전달하기 위해서는 html 파일이 필요하다.
html 파일은 위 사진처럼 templates라는 폴더 아래에 넣어줘야 한다. (index.html
)
templates 폴더에 html 파일을 넣어주면 Flask가 자동으로 찾아서 연결해준다 !
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def guri():
return render_template('index.html')
if __name__ = "__main__":
app.run()
그리고 app.py
에서 render_template
를 import하고 리턴 값에 render_template(html파일이름)
을 준다.
render_template
라는 함수는 templates라는 폴더 안의 html 파일을 읽어오는 역할을 한다.
@app.route('URL주소')
형식으로 여러 개 사용해서 다양한 url을 만들 수 있다.
주의사항은 다른 @app.route
에 중복된 이름(앞서 다른 app.route에서 정의한 이름)의 함수를 생성할 수 없다
@app.route('/')
def guri():
return jsonify("hello")
@app.route('/list')
def guri():
return jsonify("list page")
...
REST API ?
@app.route('url1', methods=["GET"])
@app.route('url2', methods=["POST"])
@app.route('url3', methods=["GET", "POST"])
methods라는 옵션을 추가해서 해당하는 HTTP Method만 사용할 수 있도록 적용
GET
from flask import *
app = Flask(__name__)
@app.route("/" , methods=["GET"] ) # URL 뒤에 ?name=guri 넣어 GET 요청
def guri():
name = request.args.get('name')
result = "hello. " + name
return result
if __name__== "__main__":
app.run()
=> name = request.args.get('name')
: 주소 (localhost:5000?name=guri)치면 name을 리턴
POST
templates/index.html 생성해서 그 안에 form을 생성한다.
from flask import *
app = Flask(__name__)
@app.route("/login" , methods=["POST"] )
def guri_login():
id = request.form['id']
password = request.form['password']
if id == 'guri' and password = '1111':
return 'Hello'
else:
'Bye'
if __name__== "__main__":
app.run()
request.form[~~]
을 통해 데이터를 받아옴
app.py
) 여러 파일로 생성함 ! Blueprint 사용
board = Blueprint('board', __name__)
: 이름 선언@app.route()
였던 것을 @board.route()
로 변경 app.py
에서 from board_api import board
이런 식으로 불러와줘야 함app.register_blueprint(board)
로 Blueprint 등록from flask import Blueprint
# 블루프린트 객체 생성
bp = Bluprint(“hello”, __name__, url_prefix=“/hello”)
# app.route 데코레이터가 아닌 bp.route로 선언
@bp.route(‘/’)
def hello_guri():
return ‘Hello, GURI!”
{{% for d in data %}} ~ {{% endfor %}}
{{% if name == 'guri' %}} ~ {{% endif %}}
#if 사용법 (+ for문 )
{% for student in student_list %}
{% if student['name'] == 'guri' %}
<p> {{ student['text'] }} </p>
{% endif %}
{% endfor %}
📑 중요 키워드
@app.route
사용해서 url 생성
jsonify
로 json 형식 데이터 전송
render_template
사용해서 HTML 파일 연결
GET은request.args.get(~)
, POST는request.form[~]
Blueprint로 코드 모듈화! 유지보수 good
jinja 템플릿으로 html 내에서 python문법처럼 데이터 다루기 가능