python - 如何通过蓝图使用 Flask 登录
问题描述
我正在尝试将 LoginManager 用于我的烧瓶应用程序。当我运行应用程序并打开索引页面时,它显示以下内容
File "...\python38-32\lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "...\python38-32\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "...\python38-32\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "...\python38-32\lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "...\python38-32\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "...\python38-32\lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "...\root\project\user_auth\routes.py", line 18, in index
return render_template('index.html', title='Welcome')
File "...\python38-32\lib\site-packages\flask\templating.py", line 137, in render_template
return _render(
File "...\python38-32\lib\site-packages\flask\templating.py", line 120, in _render
rv = template.render(context)
File "...\python38-32\lib\site-packages\jinja2\environment.py", line 1090, in render
self.environment.handle_exception()
File "...\python38-32\lib\site-packages\jinja2\environment.py", line 832, in handle_exception
reraise(*rewrite_traceback_stack(source=source))
File "...\python38-32\lib\site-packages\jinja2\_compat.py", line 28, in reraise
raise value.with_traceback(tb)
File "...\root\project\user_auth\templates\index.html", line 1, in top-level template code
{% extends "base.html" %}
File "...\root\project\user_auth\templates\base.html", line 13, in top-level template code
{% if current_user.is_anonymous %}
File "...\python38-32\lib\site-packages\jinja2\environment.py", line 471, in getattr
return getattr(obj, attribute)
jinja2.exceptions.UndefinedError: 'current_user' is undefined
这是我的结构
root /
config.py
|project/
| __init__.py
| user_auth/
| __init__.py
| app.py
| routes.py
在 app/ init .py 文件中,如下
from flask import Flask
from config import Config
app = Flask(__name__)
app.config.from_object(Config)
from .user_auth.routes import user_auth_bp
app.register_blueprint(user_auth_bp, url_prefix="")
从 user_auth init .py 文件是
from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
from flask import current_app
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
login = LoginManager(app)
login.login_view = '.login'
app.config['SECRET_KEY'] = 'trial'
from ..user_auth import routes, models
这是 user_auth/routes.py 文件
from ..user_auth import app, db
from flask_login import login_required
from ..user_auth.forms import RegistrationForm, LoginForm
from flask import request, render_template, flash, redirect, url_for, Blueprint
from werkzeug.urls import url_parse
from flask_login import logout_user
from flask_login import current_user, login_user
from ..user_auth.models import User
from flask import Blueprint
user_auth_bp = Blueprint('user_auth', __name__, template_folder='templates')
@user_auth_bp.route('/')
@user_auth_bp.route('/index')
def index():
return render_template('index.html', title='Welcome')
@user_auth_bp.route('/register', methods=["POST", "GET"])
def register():
form = RegistrationForm()
if form.validate_on_submit():
print("validated")
# Create User Model
username = form.username.data
password = form.password.data
email = form.email.data
newUser = User(username=username,email=email)
newUser.set_password(password)
db.session.add(newUser)
db.session.commit()
return redirect(url_for('.index'))
else:
return render_template('register.html', title='Welcome', form=form)
... (Other paths)
我正在运行 Windows 并使用以下命令
set FLASK_APP=project
然后我用
flask run
预先感谢您的帮助。
解决方案
您可以尝试搜索相同的问题 UndefinedError: 'current_user' is undefined
检查初始化文件:
login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
from .models import User
@login_manager.user_loader
def load_user(user_id):
user = User.query.filter_by(id=user_id).first()
推荐阅读
- android - 尝试构建 Flutter 时,Mlkit 抛出异常
- c# - WPF 自定义控件不可见 - 找不到主题?
- laravel - 如何正确地将控制器功能保存到两个单独的表中
- npm - 如何使用 Azure Devops 管道增加 npm 包的版本
- python - 在 zip 列表之后,所有 pandas 行的值都相同,为什么?
- angular - 错误未捕获的错误:在应用程序模块中声明时模板解析错误
- woocommerce - Woocommerce - 向其他人发送电子邮件
- javascript - 在 Zapier Code JS 中的 webhook 有效负载后循环
- javafx - 如何修复“工作区中没有安装与此环境严格兼容的 JRE。'?
- vue.js - 显示隐藏 Vuejs 元素