flask 使用蓝图时报错,如何解决?

flask 使用蓝图时报错

img

这是蓝图

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 会显示更详细的错误消息,并且会在页面上显示调试信息。 这可以帮助您更快地找到并修复问题