Sandip Swain
Sandip Swain

Reputation: 433

What is the UserMixin in Flask?

from datetime import datetime
from werkzeug.security import generate_password_hash
from werkzeug.security import check_password_hash
from flask_login import UserMixin
from app import db


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(64), index=True, unique=True)
    password_hash = db.Column(db.String(64))
    posts = db.relationship('Post', backref='author', lazy='dynamic')

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return '<User{}>'.format(self.username)

After reading the official documentation I couldn't yet understand the purpose of UserMixin. Can anyone please describe it in brief?

Upvotes: 24

Views: 36750

Answers (1)

Seyi Daniel
Seyi Daniel

Reputation: 2379

Flask-login requires a User model with the following properties:

  • has an is_authenticated() method that returns True if the user has provided valid credentials
  • has an is_active() method that returns True if the user’s account is active
  • has an is_anonymous() method that returns True if the current user is an anonymous user
  • has a get_id() method which, given a User instance, returns the unique ID for that object

UserMixin class provides the implementation of this properties. Its the reason you can call for example is_authenticated to check if login credentials provide is correct or not instead of having to write a method to do that yourself.

Upvotes: 51

Related Questions