https://flask.palletsprojects.com/en/1.1.x/
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
클래스의 인스턴스를 만듭니다. 첫 번째 인수는 응용 프로그램 모듈 또는 패키지의 이름입니다.
route()데코레이터를 사용하여 Flask에게 어떤 URL이 함수를 트리거해야하는지 알려줍니다.
함수에는 특정 함수에 대한 URL을 생성하는 데 사용되는 이름이 제공되며 사용자 브라우저에 표시하려는 메시지를 반환합니다.
$ flask run
$ python -m flask
route()데코레이터를 사용하여 함수를 URL에 바인딩 하십시오.
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
<variable_name>
로 섹션을 표시하여 가변 섹션을 URL에 추가 할 수 있습니다
함수 <variable_name>
는 키워드 인수로을 받습니다 . -><converter:variable_name>.
@app.route('/user/<username>')
def show_user_profile(username):
# show the user profile for that user
return 'User %s' % escape(username)
@app.route('/post/<int:post_id>')
def show_post(post_id):
# show the post with the given id, the id is an integer
return 'Post %d' % post_id
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
# show the subpath after /path/
return 'Subpath %s' % escape(subpath)
string | (기본값)은 슬래시없이 텍스트를 허용합니다
int | 양의 정수를 받아들입니다
float | 양의 부동 소수점 값을 받아들입니다.
path | 같은 string뿐만 아니라 슬래시를 받아
uuid | UUID 문자열을 받아들입니다
다음 두 규칙은 후행 슬래시 사용이 다릅니다.
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
projects엔드 포인트 의 표준 URL 에는 슬래시가 있습니다. 파일 시스템의 폴더와 비슷합니다. 후행 슬래시없이 URL에 액세스하면 Flask가 후행 슬래시가있는 표준 URL로 리디렉션합니다.
about엔드 포인트 의 표준 URL 에는 슬래시가 없습니다. 파일의 경로 이름과 비슷합니다. 슬래시가있는 URL에 액세스하면 404 "찾을 수 없음"오류가 발생합니다. 이렇게하면 이러한 리소스에 대한 URL을 고유하게 유지하여 검색 엔진이 동일한 페이지를 두 번 색인 생성하는 것을 피할 수 있습니다.
특정 함수에 대한 URL을 작성하려면 url_for()
함수를 사용하십시오
url_for()
함수는 함수 이름으로 된 endpoint의 URL을 생성합니다.
from flask import Flask, escape, url_for
app = Flask(__name__)
@app.route('/')
def index():
return 'index'
@app.route('/login')
def login():
return 'login'
@app.route('/user/<username>')
def profile(username):
return '{}\'s profile'.format(escape(username))
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
/
/login
/login?next=/
/user/John%20Doe
웹 애플리케이션은 URL에 액세스 할 때 다른 HTTP 메소드를 사용합니다. Flask로 작업 할 때 HTTP 메소드에 익숙해 져야합니다. 기본적으로 경로는 GET요청 에만 응답 합니다. route()데코레이터 의 methods인수를 사용하여 다른 HTTP 메소드를 처리 할 수 있습니다.
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
Jinja2 템플릿 엔진이 자동으로 구성 됩니다.
템플릿을 렌더링하려면이 render_template()
방법을 사용할 수 있습니다 . 템플릿 이름과 템플릿 엔진에 전달할 변수를 키워드 인수로 제공하기 만하면됩니다.
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
템플릿의 경우 Jinja2 템플릿의 모든 기능을 사용할 수 있습니다.
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
웹 응용 프로그램의 경우 클라이언트가 서버로 보내는 데이터에 반응하는 것이 중요합니다. Flask에서이 정보는 전역 request객체에 의해 제공됩니다.
쿠키에 액세스하기 위해 cookies 속성을 사용할 수 있습니다 . 쿠키를 설정하기 위해 set_cookie
응답 객체 의 방법을 사용할 수 있습니다. cookies요청 객체 의 속성은 클라이언트가 전송하는 모든 쿠키가 포함 된 사전입니다. 세션을 사용하려면 쿠키를 직접 사용하지 말고 대신 Flask 의 세션 을 사용하여 쿠키 위에 보안을 강화하십시오.
쿠키 읽기
from flask import request
@app.route('/')
def index():
username = request.cookies.get('username')
# use cookies.get(key) instead of cookies[key] to not get a
# KeyError if the cookie is missing.
쿠키 저장
from flask import make_response
@app.route('/')
def index():
resp = make_response(render_template(...))
resp.set_cookie('username', 'the username')
return resp
사용자를 다른 엔드 포인트로 리디렉션하려면이 redirect()
기능을 사용하십시오. 오류 코드로 요청을 일찍 중단하려면 다음 abort()
함수를 사용하십시오.
from flask import abort, redirect, url_for
@app.route('/')
def index():
return redirect(url_for('login'))
@app.route('/login')
def login():
abort(401)
this_is_never_executed()
기본적으로 각 오류 코드마다 흑백 오류 페이지가 표시됩니다. 오류 페이지를 사용자 정의하려면 errorhandler()
데코레이터를 사용할 수 있습니다.
from flask import render_template
@app.errorhandler(404)
def page_not_found(error):
return render_template('page_not_found.html'), 404
render_template()
이것은 Flask에게 해당 페이지의 상태 코드가 404 여야한다는 것을 알려줍니다.
API를 작성할 때 일반적인 응답 형식은 JSON입니다. Flask로 그러한 API를 작성하기 쉽습니다. dict뷰에서 a 를 반환 하면 JSON 응답으로 변환됩니다.
@app.route("/me")
def me_api():
user = get_current_user()
return {
"username": user.username,
"theme": user.theme,
"image": url_for("user_image", filename=user.image),
}
API 디자인에 따라 dict이외의 유형에 대한 JSON 응답을 만들 수 있습니다. 이 경우 jsonify()
지원되는 모든 JSON 데이터 유형을 직렬화 하는 함수를 사용하십시오.
@app.route("/users")
def users_api():
users = get_all_users()
return jsonify([user.to_json() for user in users])
요청 객체 외에도 session한 요청에서 다음 요청까지 사용자에게 특정한 정보를 저장할 수 있는 두 번째 객체 가 있습니다. 이것은 쿠키 위에 구현되어 쿠키에 암호로 서명합니다.
from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
# Set the secret key to some random bytes. Keep this really secret!
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
@app.route('/')
def index():
if 'username' in session:
return 'Logged in as %s' % escape(session['username'])
return 'You are not logged in'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
return '''
<form method="post">
<p><input type=text name=username>
<p><input type=submit value=Login>
</form>
'''
@app.route('/logout')
def logout():
# remove the username from the session if it's there
session.pop('username', None)
return redirect(url_for('index'))