他の関数でアクセスできる変数を格納するために使用しようとしてflask.g
いますが、何かが正しく行われていないようです。にアクセスしようとすると、アプリケーションで次のエラーが生成されますg.name
: AttributeError: '_RequestGlobals' object has no attribute 'name'
。
のドキュメントにflask.g
は次のように書かれています:
あなたが望むものは何でもこれに保存してください。たとえば、データベース接続または現在ログインしているユーザーです。
これは、変数が作成された関数の外部にある変数にアクセスしようとしたときに受け取るエラーを示す完全で最小限の例です。どんな助けも大歓迎です。
#!/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)