flask.g
を使用して他の関数でアクセスできる変数を格納しようとしていますが、正しく動作していないようです。 g.name
にアクセスしようとすると、アプリケーションで次のエラーが生成されます。AttributeError: '_RequestGlobals' object has no attribute 'name'
フラスコを使用して他の関数の変数にアクセスすることができません
flask.g
ためdocumentationは言う:
はちょうどあなたが好きな本に格納します。たとえば、データベース 接続または現在ログインしているユーザー。
は、ここでそれが作成された関数の外の変数にアクセスしようとしたとき、私は受信エラーを示し、完全な、最小限の例です。どれ助けていただければ幸いです。
#!/usr/bin/env python
from flask import Flask, render_template_string, request, redirect, url_for, g
from wtforms import Form, TextField
application = app = Flask('wsgi')
@app.route('/', methods=['GET', 'POST'])
def index():
form = LoginForm(request.form)
if request.method == 'POST' and form.validate():
name = form.name.data
g.name = name
# Need to create an instance of a class and access that in another route
#g.api = CustomApi(name)
return redirect(url_for('get_posts'))
else:
return render_template_string(template_form, form=form)
@app.route('/posts', methods=['GET'])
def get_posts():
# Need to access the instance of CustomApi here
#api = g.api
name = g.name
return render_template_string(name_template, name=name)
class LoginForm(Form):
name = TextField('Name')
template_form = """
{% block content %}
<h1>Enter your name</h1>
<form method="POST" action="/">
<div>{{ form.name.label }} {{ form.name() }}</div><br>
<button type="submit" class="btn">Submit</button>
</form>
{% endblock %}
"""
name_template = """
{% block content %}
<div>"Hello {{ name }}"</div><br>
{% endblock %}
"""
if __name__ == '__main__':
app.run(debug=True)
私の場合、@ app.before_requestを使用する際の問題は、私がmagic_user_function()を利用するためにユーザからユーザ名とパスワード情報を取得する必要があることです。私があなたが言及したモジュールをチェックアウトします。 – Raj
私はフォローアップして、これが私のやり遂げたことであることを知らせます。私はこのメソッドをサポートするためにラッパーを書き直さなければならなかったが、それほど悪くはなかった。私のフラスコの質問btwレイチェルの答えをありがとう! – Raj