当前位置: 代码迷 >> python >> 对烧瓶蓝图使用flask-admin
  详细解决方案

对烧瓶蓝图使用flask-admin

热度:96   发布时间:2023-06-13 17:02:07.0

我想使用flask-admin设置一个基本的管理界面,我希望所有这些都放在一个蓝图中。 这是我的代码的最低版本:

#app.py
from flask import Flask
from bp import bp

app = Flask(__name__)
app.register_blueprint(bp)

if __name__ == "__main__":
    app.run(debug=True)


#bp.py
from flask import Blueprint, current_app
from flask_admin import Admin
from flask_admin.contrib.pymongo import ModelView
import pymongo

conn = pymongo.MongoClient()
bp = Blueprint('bp', __name__,
               template_folder='templates')

admin = Admin(current_app)
admin.add_view(ModelView(conn.my_db.my_collection))

当运行python app.py ,它因RuntimeError: working outside of application context崩溃RuntimeError: working outside of application context ,因为admin绝不与bp挂钩(或使用任何用于描述它的词)。 通常情况下,

@bp.route('/<page>')
def show(page): 
    pass

但是在创建Admin对象的上下文中找不到正确的装饰器。 有一两件事我想是做admin = Admin()bp.py ,进口adminapp.py然后admin.app = appapp.py 那行得通,但是感觉就像我将逻辑分割成几个文件,所以我对此并不满意。 处理这种情况的Python方法是什么?

您需要实际的应用程序对象来初始化Flask管理员类。 Current_app无法正常工作。 该调用应放在app.py上。 然后可以在蓝图上使用

from app import admin

它以这种方式解决。 仅供您参考。

#YourApp/init.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin

db = SQLAlchemy()
admin = Admin(name='TuozhanOA', template_mode='bootstrap3')
def create_app(config_class=Config):
    app = Flask(name)
    app.config.from_object(Config)
    db.init_app(app)
    admin.init_app(app)
    from YourApp.main.routes import main
    app.register_blueprint(main)
    from YourApp.adminbp.routes import adminbp, user_datastore
    app.register_blueprint(adminbp)
    security = Security(app, user_datastore)
    return app

#YourApp/adminbp/routes.py
from flask import render_template, Blueprint
from YourApp.models import User, Role
from YourApp import db, admin
from flask_admin.contrib.sqla import ModelView
from wtforms.fields import PasswordField
from flask_admin.contrib.fileadmin import FileAdmin
import os.path as op

from flask_security import current_user, login_required, RoleMixin, Security, 
SQLAlchemyUserDatastore, UserMixin, utils

adminbp = Blueprint('adminbp', name)
admin.add_view(ModelView(User, db.session, category="Team"))
admin.add_view(ModelView(Role, db.session, category="Team"))

path = op.join(op.dirname(file), 'tuozhan')
admin.add_view(FileAdmin(path, '/static/tuozhan/', name='File Explore'))
  相关解决方案