我正在制作我的第一个更大的Flask应用程序,并且在我的项目结构中有一些挂起。
我的应用通常有models.py, routes.py
和forms.py
。在基本文件夹中,我my_app.py
从create_app
导入app
。我在蓝图中组织了routes.py
和forms.py
,并在create_app()
__init__.py
内注册了该蓝图。
由于我有多个角色,因此我使用Flask-User
并需要UserManager
个对象。为了实现它,我需要app,db和user。因为routes.py
是在应用程序中注册的蓝图,所以我尝试使用蓝图实现Usermanager
。给我一个类型错误
我在哪里实现UserManager,我也有User模型,或者如何在模块中获取app
的实例?
编辑:我发现上述问题存在current_user
。
我的另一个hickup是forms.py
。我正在使用db中的数据生成一个表单。当我执行Questions.query.all()
时,我得到RuntimeError: No application found. Either work inside a view function or push an application context.
我在那里做错了什么?
当我尝试
时,我甚至在create_all()
函数中得到了这个错误
from app import models
db.create_all()
├── app
│ ├── __init__.py
│ ├── main
│ │ ├── __init__.py
│ │ ├── forms.py
│ │ └── routes.py
│ ├── models.py
│ └── templates
│ ├── admin
│ │ └── index.html
│ ├── base.html
│ ├── index.html
├── config.py
├── my_app.py
init.py
from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_user import UserManager
from flask_babelex import Babel
db = SQLAlchemy()
login = LoginManager()
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
login.init_app(app)
from app.main import bp as main_bp
app.register_blueprint(main_bp)
from app import models
# Setup Flask-User and specify the User data-model
user_manager = UserManager(app, db, models.User)
routes.py
from flask import render_template
from app.main.forms import LoginForm, QuestionForm, SurveyForm, TokenForm
from app.models import Question, Answer, User
from app.main import bp
from app.models import db
from flask_login import login_user, logout_user
from flask_user import current_user, login_required, roles_required, UserManager, UserMixin
# Setup Flask-User and specify the User data-model
user_manager = UserManager(bp, db, User)
@bp.route('/')
@bp.route('/index')
@roles_required('Admin')
def index():
return render_template('index.html')
forms.py
from flask_wtf import FlaskForm
from wtforms import $Fields...
from app.models import Question
from app import db
def getQuestions():
'''Get questions from db to generate forms'''
questions = Question.query.all()