Flask 找不到用户对象
Flask can't find user object
我正在制作一个网络应用程序,我有以下代码(为简洁起见进行了编辑),它使用 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
别忘了导入
from 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>
我正在制作一个网络应用程序,我有以下代码(为简洁起见进行了编辑),它使用 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
别忘了导入
from 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>