flask 使用蓝图时报错
这是蓝图
from flask import Blueprint
from models import LoginForm, User
from flask import render_template, session, redirect, url_for, flash, request
from flask_login import login_user, logout_user, login_required
users = Blueprint('user', __name__, url_prefix='/user')
@users.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if request.method == 'POST':
userid = request.form.get('userid')
user = User.query.get(userid)
if user is not None and request.form.get('password') == user.password:
current_user = User()
current_user.id = userid
login_user(current_user)
flash("登录成功")
session['userid'] = userid
return redirect(url_for('index'))
else:
flash('登录失败')
if session.get('userid'):
userid = session.get('userid')
user = User.query.get(userid)
form.userid.data = user.userid
form.password.data = user.password
del session['userid']
return render_template('login.html', form=form)
@users.route('/logout')
@login_required
def logout():
logout_user()
flash("登出成功")
return redirect(url_for('login'))
这是app.py
from flask import Flask, render_template, session, redirect, url_for, flash, request
from flask_admin.contrib import sqla
from flask_admin.contrib.sqla import ModelView
from flask_bootstrap import Bootstrap
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, login_user, UserMixin, logout_user, login_required, current_user, \
AnonymousUserMixin
from flask_admin import Admin, BaseView, expose, AdminIndexView
import config
from exts import db
from models import User, StudentInfo, LoginForm
from blueprints.about_user import users
app = Flask(__name__)
app.config.from_object(config)
app.register_blueprint(users)
db.init_app(app)
bootstrap = Bootstrap(app)
moment = Moment(app)
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.login_view = 'user.login'
login_manager.login_message_category = 'info'
login_manager.login_message = '请登录'
login_manager.init_app(app)
class MyView(BaseView):
@expose('/')
def index(self):
return self.render('admin/index.html')
class MyModelView(ModelView):
def is_accessible(self):
if current_user.username == "admin":
return True
return False
def inaccessible_callback(self, name, **kwargs):
# redirect to login page if user doesn't have access
return redirect(url_for('login', next=request.url))
class Anonymous(AnonymousUserMixin):
def __init__(self):
self.username = 'Guest'
login_manager.anonymous_user = Anonymous
class MyAdminIndexView(AdminIndexView):
@expose('/')
def default(self):
username = current_user.get_id()
return self.render('admin/index.html', username=username)
def is_accessible(self):
if current_user.get_id() == 'admin':
return True
else:
return False
def inaccessible_callback(self, name, **kwargs):
# redirect to login page if user doesn't have access
return redirect(url_for('login', next=request.url))
admin = Admin(app, name="后台管理", template_mode='bootstrap3')
admin.add_view(MyModelView(User, db.session))
admin.add_view(MyModelView(StudentInfo, db.session))
admin.add_view(MyView(name='Hello'))
admin.add_view(MyView(name='Hello 1', endpoint='test1', category='Test'))
admin.add_view(MyView(name='Hello 2', endpoint='test2', category='Test'))
admin.add_view(MyView(name='Hello 3', endpoint='test3', category='Test'))
index_view = MyAdminIndexView(name='管理员首页')
@login_manager.user_loader
def load_user(userid):
if User.query.get(userid) is not None:
current_user = User.query.get(userid)
current_user.id = userid
return current_user
@app.route('/')
@login_required
def index():
userid = session.get('userid')
user = User.query.get(userid)
return render_template('index.html', user=user)
if __name__ == '__main__':
app.run(debug=True)
Flask 使用蓝图时报错通常是因为在蓝图中缺少了某些必要的代码,或者在蓝图中使用了不正确的语法。
要解决这个问题,首先应该检查错误消息,看看是哪里出了问题。
如果是因为缺少了某些必要的代码,则应该检查蓝图中是否缺少了任何 @app.route 装饰器或其他必要的代码。
如果是因为在蓝图中使用了不正确的语法,则应该检查代码是否存在语法错误,并根据提示修改代码。
如果仍然无法解决问题,则可以尝试使用 Flask 调试模式来查看更详细的错误消息。 可以在应用程序实例上设置 app.debug=True,然后再次运行应用程序。 Flask 会显示更详细的错误消息,并且会在页面上显示调试信息。 这可以帮助您更快地找到并修复问题