使用Flask-User与app工厂和蓝图

时间:2018-04-10 19:15:00

标签: python flask

我正在制作我的第一个更大的Flask应用程序,并且在我的项目结构中有一些挂起。

我的应用通常有models.py, routes.pyforms.py。在基本文件夹中,我my_app.pycreate_app导入app。我在蓝图中组织了routes.pyforms.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()

0 个答案:

没有答案