简体   繁体   中英

how to use two kinds of users with the current_user function on the flask_login library?

I try to build an flask app that uses two kind of users and I want to use the current_user separate between the two classes. I need to make the load_user return normal user or delivery user.

here's the load user function:

@login.user_loader
def load_user(id):
    return User.query.get(int(id))

here's the users classes:

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    about_me = db.Column(db.String(140))
    last_seen = db.Column(db.DateTime, default=datetime.utcnow)

class Delivery(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    about_me = db.Column(db.String(140))
    last_seen = db.Column(db.DateTime, default=datetime.utcnow)

Just use one user model and type field or group model. Example:

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    about_me = db.Column(db.String(140))
    last_seen = db.Column(db.DateTime, default=datetime.utcnow)
    group = db.Column(db.ForeignKey('group.id'), nullable=False)

class Group(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    users = db.relationship('User', backref='user', lazy=True)
    description = db.Column(db.String(50))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM