基本的なフラスコプロセスを構築する
- 仮想環境をインストールする
python -m venv venv
次に、activateを実行して、仮想環境に入ります。
- 仮想環境にフラスコをインストールする
(venv) pip install flask
- 基本的なhelloworldプログラムを作成する
# main.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "hello world!"
- FLASK_APP環境変数(Windows)を設定し、実行します
(venv) set FLASK_APP=main.py
python -m flask run # 或flask run
localhost:5000にアクセスすると、返されたコンテンツを確認できます。
基本操作
メソッドをURLにバインドする
- 直接バインディング
@app.route('/test')
def func():
return 1
- パラメータ付き
@app.route('/test/<variable>')
def func():
return variable
フォームデータの処理
最初にリクエストオブジェクトを紹介します(コンセプトセクションを参照)
- URLパラメータを操作し、args属性を使用します
request.args.get('key')
- フォームデータを操作し、フォーム属性を使用します
request.form['username']
リダイレクトとエラー
リダイレクトを使用してリクエストをリダイレクトする
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
操作応答(応答)
ビュー関数の戻り値は、特定のルールに従って自動的に応答オブジェクトに変換されます。
例:not_foundによって返されるhtmlページ(文字列)は、404ステータスコードを持つ応答オブジェクトを生成します。
@app.errorhandler(404)
def not_found(error):
return render_template('error.html'), 404
dictが返されると、自動的に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),
}
セッション与クッキー
from flask import Flask,request,session
app = Flask(__name__)
app.secret_key = b'sdafdddd\x]\x'
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
コンセプトと問題
WSGIとは
- WSGIはPythonWeb Server Gateway Interfaceの略で、一連のWebサーバー間でのWebアプリケーションの移植性を向上させるためにWebサーバーとPythonWebアプリケーションまたはWebフレームワークの間の標準インターフェイスを指定します。
- WSGI標準では、Webプログラムには2つのパラメーターを受け入れることができる呼び出し可能オブジェクト(関数)が必要です。最初のパラメーターは環境ディクショナリで、2番目のパラメーターは呼び出し可能オブジェクトによって呼び出されて応答を開始する関数です。
- httpリクエストのすべての情報はenvironを介して取得でき、httpレスポンスのデータは、start_responseと関数の戻り値を介して本文として使用できます。
def hello(environ, start_response):
status = "200 OK"
response_headers = [('Content-Type', 'text/html')]
start_response(status, response_headers)
path = environ['PATH_INFO'][1:] or 'hello'
return [b'<h1> %s </h1>' % path.encode()]
リクエストの処理方法
Flaskは、グローバルオブジェクトリクエストを使用してクライアントリクエストを処理します。