我正在制作一个网络应用程序,我有以下代码(为简洁起见编辑),它使用Flask-Login处理登录:
from flask_login import LoginManager, login_user, logout_user, login_required
login_manager = LoginManager()
login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
return User.query.filter_by(user_id=user_id).first()
@app.route('/')
@login_required
def home():
return user.first_name
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
try:
email = request.form.get("email")
user = User.query.filter(User.email == email).first()
if user.is_correct_password(request.form.get("password")):
login_user(user)
return redirect(url_for("home"))
else:
return error("Login Failed")
except:
return error("Unable to log in.")
else:
return render_template("login.html")
然而,我一直得到NameError: global name 'user' is not defined
,即使我确定我已经定义了user
,因为我能够通过@login_required
。 (当我退出并尝试进入主页时,我被告知我未经授权)。
我很感激我能得到任何帮助。
万分感谢!
您的home
视图存在问题:user
未定义。我想你的意思是使用Flask-Login的current_user
。
from flask_login import current_user
# ...
@app.route('/')
@login_required
def home():
return current_user.first_name
不要忘记进口
来自flask_login import current_user
from flask_login import current_user
@app.route('/', methods = ['POST', 'GET'])
@app.route('/index', methods = ['POST', 'GET'])
@login_required
def index():
return render_template('index.html',user={"id":current_user.id, "name": current_user.name, "password":current_user.password})
在模板上访问和访问
{% if user %}
<h3>Greetings {{user}}</h3>
{% endif %}
<table class="table table-striped" >
<thead>
<tr>
<th scope="col">Name</th>
<th scope="col">Value</th>
</tr>
</thead>
<tbody>
{% for key, value in user.items() %}
<tr>
<th scope="row">{{ key }}</th>
<td>{{ value }}</td>
</tr>
{% endfor %}
</tbody>
</table>