Первые шаги с Flask и python в целом. Я пытаюсь создать очень простое приложение, используя Flask-Admin для создания страницы просмотра модели.
Все примеры кода из Flask и Flask-Admin работают так, как должны, и ModelView может запускать базовый CRUD в моей базе данных.
Но, когда я использую отдельный models.py
файл (из этого урока ), все идет не так.
app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///database/db.db"
app.config['FLASK_ADMIN_SWATCH'] = 'flatly'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
from models import *
class PostView(ModelView):
edit_modal = True
admin = Admin(app, name='ProjectX', template_mode='bootstrap3')
admin.add_view(PostView(Post, db.session))
if __name__ == '__main__':
app.run()
models.py
from app import db
class Post(db.Model):
__tablename__ = 'post'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255), unique=True, nullable=False)
text = db.Column(db.String(255), unique=False, nullable=False)
def __repr__(self):
return '<Post {}>'.format(self.title)
Когда я бегу python app.py
, я получаю:
Traceback (most recent call last):
File "app.py", line 12, in <module>
from models import *
File "/Users/me/Sites/projectx/models.py", line 1, in <module>
from app import db
File "/Users/me/Sites/projectx/app.py", line 18, in <module>
admin.add_view(PostView(Post, db.session))
NameError: name 'Post' is not defined
Когда я меняю from models import *
на from models import Post
, я получаю
Traceback (most recent call last):
File "app.py", line 12, in <module>
from models import Post
File "/Users/me/Sites/projectx/models.py", line 1, in <module>
from app import db
File "/Users/me/Sites/projectx/app.py", line 12, in <module>
from models import Post
ImportError: cannot import name 'Post'
Мне кажется, что db
недоступно в models.py
? Это проблема с циклическим импортом, и если да, как я могу это исправить?
EDIT Возможно, я что-то напутал с моей виртуальной средой (думаю, у меня запущены как pipenv, так и autoenv), и есть некоторая путаница с pip / python2 / python3. Но я сомневаюсь, что это как-то связано с проблемой. Это приложение определенно работает на 3.6.5