import datetime from flask_login import UserMixin from werkzeug.security import generate_password_hash, check_password_hash from applications.extensions import db, ma from marshmallow import fields from applications.models import Dept class User(db.Model, UserMixin): __tablename__ = 'admin_user' id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='用户ID') username = db.Column(db.String(20), comment='用户名') realname = db.Column(db.String(20), comment='真实名字') avatar = db.Column(db.String(255), comment='头像', default="/static/admin/admin/images/avatar.jpg") remark = db.Column(db.String(255), comment='备注') password_hash = db.Column(db.String(128), comment='哈希密码') enable = db.Column(db.Integer, default=0, comment='启用') dept_id = db.Column(db.Integer, comment='部门id') create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间') update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间') role = db.relationship('Role', secondary="admin_user_role", backref=db.backref('user'), lazy='dynamic') def set_password(self, password): self.password_hash = generate_password_hash(password) def validate_password(self, password): return check_password_hash(self.password_hash, password) # 用户models的序列化类 class UserSchema(ma.Schema): id = fields.Integer() username = fields.Str() realname = fields.Str() enable = fields.Integer() create_at = fields.DateTime() update_at = fields.DateTime() dept = fields.Method("get_dept") def get_dept(self, obj): if obj.dept_id != None: return Dept.query.filter_by(id=obj.dept_id).first().dept_name else: return None