1. ホーム
  2. python

[解決済み] このFlaskのコードにあるgオブジェクトは何ですか?

2022-02-17 14:15:28

質問内容

各レスポンスをタイムアウトさせる次のようなコードを見つけたのですが、場所がよくわかりません。 g は、どこから来ることになっているのでしょうか? とは何ですか? g ?

@app.before_request
def before_request():
  g.start = time.time()

@app.teardown_request
def teardown_request(exception=None):
    diff = time.time() - g.start
    print diff

解決方法は?

g はFlaskが提供するオブジェクトです。これは、1つのアプリコンテキスト中に必要なデータを保持するためのグローバルな名前空間です。たとえば before_request ハンドラは g.user であり、ルートや他の関数からアクセスできるようになります。

from flask import g

@app.before_request
def load_user():
    user = User.query.get(request.session.get("user_id"))
    g.user = user

@app.route("/admin")
def admin():
    if g.user is None or not g.user.is_admin:
        return redirect(url_for("index"))

アプリコンテキストは、1つのリクエスト/レスポンスサイクルの間持続する。 g は、リクエストにまたがるデータの保存には適していません。 データの永続化には、データベース、redis、セッション、またはその他の外部データソースを使用します。


開発サーバーやあらゆるウェブサーバーは、すでにログにタイミング情報を出力していることに注意してください。 もし本当にあなたのコードをプロファイリングしたいのであれば、次のようにします。 Werkzeug アプリケーションプロファイラ .