Flask无法找到用户对象

问题描述 投票:0回答:2

我正在制作一个网络应用程序,我有以下代码(为简洁起见编辑),它使用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。 (当我退出并尝试进入主页时,我被告知我未经授权)。

我很感激我能得到任何帮助。

万分感谢!

python web-applications flask flask-login
2个回答
2
投票

您的home视图存在问题:user未定义。我想你的意思是使用Flask-Login的current_user

from flask_login import current_user

# ...

@app.route('/')
@login_required
def home():
    return current_user.first_name

0
投票

不要忘记进口

来自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>
© www.soinside.com 2019 - 2024. All rights reserved.