Как я могу зарегистрировать 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()
Пакетная папка Backend
├── __init__.py
├── models.py
├── static
├── templates
│ └── user
│ └── index.html
└── views
├── __init__.py
└── user.py
models.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')
1 ответ
Поэтому я отвечаю на свой вопрос. это была просто ошибка.
Мне просто нужно импортировать UserView
как описано здесь. А также необходимо импортировать приложение пакета в представлении.
Итак, вот связь между __init__.py
а также views/user.py
,
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 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 Documentaion: была интересной.
Круговой импорт:
Каждый программист на Python ненавидит их, но мы только что добавили: циклический импорт (вот когда два модуля зависят друг от друга. В этом случае views.py зависит от init.py). Имейте в виду, что это плохая идея в целом, но здесь это на самом деле хорошо. Причина этого в том, что мы на самом деле не используем представления в init.py, а просто следим за тем, чтобы модуль был импортирован, и мы делаем это в нижней части файла.