как я могу зарегистрировать Flask-Admin BaseView в качестве модуля

Как я могу зарегистрировать Flask-Admin BaseView в качестве модуля в своем приложении? каждый раз, когда я запускаю свое приложение, я получаю ошибку столкновения чертежей!

Я также знаю о ModelView в Flask-Admin, но я хочу отделить модели и представления друг от друга.

init.py

from flask import Flask
import flask_admin as admin
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)


from views.user import user_view, UserView

admin = admin.Admin(app, name='Backend')
user_view.add_view(UserView)

db.create_all()

Серверная часть папки пакета

├── __init__.py
├── models.py
├── static
├── templates
│   └── user
│       └── index.html
└── views
    ├── __init__.py
    └── user.py

модели.py

from . import db


class UserModel(db.Model):
    '__tablename__' == "User"
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(100))
    last_name = db.Column(db.String(100))
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    # Required for administrative interface. For python 3 please use __str__ instead.
    def __unicode__(self):
        return self.username

user.py

from flask_admin import Admin, BaseView, expose
from Backend import app

user_view = Admin(app, name="User")


class UserView(BaseView):
    @expose('/')
    def index(self):
        return self.render('user/index.html')

person mthecreator    schedule 07.05.2015    source источник


Ответы (1)


Итак, я отвечаю на свой вопрос. это было просто заблуждение.

Мне просто нужно импортировать UserView, как описано здесь . А также необходимо импортировать приложение пакета в представление.

Итак, вот связь между __init__.py и views/user.py.

инициализация.py

from flask import Flask
import flask_admin as admin
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)


from views.user import UserView

admin = admin.Admin(app, name='Backend')
admin.add_view(UserView(name="User"))

db.create_all()

просмотры/user.py

from Backend import app
from flask_admin import BaseView, expose


class UserView(BaseView):
    @expose('/')
    def index(self):
        return self.render('user/index.html')

Эта часть из документации Flask: была интересной.

Круговой импорт:

Каждый программист на Python ненавидит их, и все же мы добавили кое-что: циклический импорт (это когда два модуля зависят друг от друга. В этом случае views.py зависит от init.py). Имейте в виду, что это плохая идея в целом, но здесь это на самом деле хорошо. Причина этого в том, что мы на самом деле не используем представления в init.py, а просто обеспечиваем импорт модуля, и мы делаем это в нижней части файла.

person mthecreator    schedule 09.05.2015