используйте 3 таблицы с веб-сайта flask-security, таблица ролей не включена в ваш пример. Я не включаю здесь «каждый нюанс», а только ключевые части кода. Я переименовал таблицу User в Users, потому что некоторые базы данных имеют конфликты имен. поскольку все, что вы предоставляете, - это запрос, который вы, очевидно, можете запросить по имени пользователя или электронной почте (я использую электронную почту).
в вашем ____init____.py (или app.py)
from flask_security import Security, SQLAlchemyUserDatastore
def create_app():
user_datastore = SQLAlchemyUserDatastore(db, Users, Role)
security = Security(app, user_datastore,
confirm_register_form=ExtendedConfirmRegisterForm)
return app
модели.py
roles_users = db.Table('roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('users.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
class Users(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50), unique=True)
name = db.Column(db.String(30))
password = db.Column(db.String(255))
about = db.Column(db.String(255))
last_login_at = db.Column(db.DateTime())
current_login_at = db.Column(db.DateTime())
last_login_ip = db.Column(db.String(100))
current_login_ip = db.Column(db.String(100))
login_count = db.Column(db.Integer)
active = db.Column(db.Boolean())
confirmed_at = db.Column(db.DateTime())
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
просмотры.py
from app import db, create_app
app = create_app()
app.app_context().push()
security = app.extensions.get('security')
в вашем views.py запросите пользователя и роль
u = Users.query.filter_by(email='[email protected]').first()
r = Role.query.filter_by(name='test').first()
security.datastore.add_role_to_user(u, r)
db.session.commit()
person
Jeff Bluemel
schedule
29.04.2018