Sto tentando di utilizzare flask.g
per memorizzare le variabili a cui è possibile accedere in altre funzioni, ma non sembra che stia facendo qualcosa correttamente. L'applicazione genera il seguente errore quando provo ad accedere a g.name
: AttributeError: '_RequestGlobals' object has no attribute 'name'
.Impossibile utilizzare flask.g per accedere alle variabili in altre funzioni
Il documentation per flask.g
dice:
Proprio Negozio su questo quello che vuoi. Per esempio una connessione al database o l'utente attualmente connesso.
Ecco un completo esempio minimo che illustra l'errore che ricevo quando si cerca di accedere alla variabile al di fuori della funzione è stato creato in. Qualsiasi l'aiuto sarebbe molto apprezzato.
#!/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)
Il problema con l'utilizzo di @ app.before_request nel mio caso è che ho bisogno di ottenere il nome utente e le informazioni sulle password da parte dell'utente per utilizzare il mio magic_user_function(). Controllo i moduli che hai menzionato. – Raj
Pensavo che avrei seguito per farti sapere che questo era quello che ho finito per fare. Ho dovuto riscrivere il mio wrapper per supportare questo metodo, ma non era male. Grazie per le risposte alle mie domande sul Flask tra Rachel! – Raj