python - Flask_User 和 Blueprint - 如何构建应用程序?
问题描述
我正在创建我的第一个更大的 Python Flask 应用程序,我将使用的模块之一是 Flask_User。为了让一切更易于管理,我想强加一个蓝图和工厂应用程序。
结构很简单:
app.py
config.py
auth/
__init__.py
models.py
因此,目标是在 auth 部分中包含所有身份验证内容。然而,它归结为在哪里初始化 UserManager 以防止出现错误、循环引用等。
user_manager = UserManager(app, db, User)
代码的样子 - app.py
from flask import Flask
# Configuration
from config import Config, HomeDevelopmentConfig
# Extensions
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# INITIATE DB
db = SQLAlchemy()
migrate = Migrate() # this will run SQLAlchemy as well
from flask_user import UserManager
from auth.models import User
user_manager = UserManager()
# APPLICATION FACTORY
def create_app(config_class=Config):
# Create app object
app = Flask(__name__)
# Load configuration
app.config.from_object(config_class)
# Register extensions
db.init_app(app)
migrate.init_app(app, db)
user_manager = UserManager(app, db, User) # !!! this will not work - circular reference to User as User needs db
# Close session with DB at the app shut down
@app.teardown_request
def shutdown_session(exception=None):
db.session.remove()
with app.app_context():
# Register blueprints
# Main flask app
from main import bp_main
app.register_blueprint(bp_main)
# Authentication (flask-user)
from auth import bp_auth
app.register_blueprint(bp_auth)
return app
# RUN APPLICATION
if __name__ == '__main__':
app = create_app(HomeDevelopmentConfig)
app.run()
models.py(应该包含用于身份验证的数据结构)
from app import db
from flask_user import UserMixin #, UserManager
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100), nullable=False, unique=True)
password = db.Column(db.String(255), nullable=False, server_default='')
first_name = db.Column(db.String(100), nullable=False, server_default='')
last_name = db.Column(db.String(100), nullable=False, server_default='')
email_confirmed_at = db.Column(db.DateTime())
active = db.Column('is_active', db.Boolean(), nullable=False, server_default='0')
# Define the relationship to Role via UserRoles
roles = db.relationship('Role', secondary='user_roles')
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(50), unique=True)
class UserRoles(db.Model, UserMixin):
__tablename__ = 'user_roles'
id = db.Column(db.Integer(), primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('users.id', ondelete='CASCADE'))
role_id = db.Column(db.Integer(), db.ForeignKey('roles.id', ondelete='CASCADE'))
最后init .py 进行身份验证:
from flask import blueprints
bp_auth = blueprints.Blueprint('auth', __name__)
from auth import models
看起来像是不可能完成的任务,但也许你有一些好的提示。可行的方法是将所有代码放入 app.py 中,但这会使
解决方案
推荐阅读
- android - 尝试使用 URLconnection 但我收到错误
- slurm - 来自 aprun 的 Slurm
- angular - 在 TypeScript.2.7 中找不到名称“TextDecoder”
- javascript - 意外的令牌 { 语法错误
- php - 如何使用 PDO 绑定参数方法将多行文本插入 mysql?
- r - 数据框中的最大滚动和
- scala - 如何创建模拟元素的 Spark RDD?
- javascript - 用 JavaScript 舍入数字
- python - 如何删除 Django 模板中字符周围的空格?
- json - Firebase 无效的键名,尽管我使用了正确的 ASCII 符号