76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from flask_sqlalchemy import SQLAlchemy
 | 
						|
from werkzeug.security import generate_password_hash, check_password_hash
 | 
						|
from datetime import datetime
 | 
						|
 | 
						|
db = SQLAlchemy()
 | 
						|
 | 
						|
 | 
						|
class User(db.Model):
 | 
						|
    __tablename__ = 'users'
 | 
						|
 | 
						|
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
 | 
						|
    username = db.Column(db.String(64), unique=True, nullable=False)
 | 
						|
    password = db.Column(db.String(255), nullable=False)
 | 
						|
    email = db.Column(db.String(128), unique=True, nullable=True)
 | 
						|
    phone = db.Column(db.String(20), unique=True, nullable=True)
 | 
						|
    nickname = db.Column(db.String(64), nullable=True)
 | 
						|
    status = db.Column(db.Integer, default=1)  # 1: active, 0: disabled
 | 
						|
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'), default=2)  # 2: 普通用户, 1: 管理员
 | 
						|
    created_at = db.Column(db.DateTime, default=datetime.now)
 | 
						|
    updated_at = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
 | 
						|
 | 
						|
    def __init__(self, username, password, email=None, phone=None, nickname=None, role_id=2):
 | 
						|
        self.username = username
 | 
						|
        self.set_password(password)
 | 
						|
        self.email = email
 | 
						|
        self.phone = phone
 | 
						|
        self.nickname = nickname
 | 
						|
        self.role_id = role_id
 | 
						|
 | 
						|
    def set_password(self, password):
 | 
						|
        """设置密码,使用哈希加密"""
 | 
						|
        self.password = generate_password_hash(password)
 | 
						|
 | 
						|
    def check_password(self, password):
 | 
						|
        """验证密码"""
 | 
						|
        return check_password_hash(self.password, password)
 | 
						|
 | 
						|
    def to_dict(self):
 | 
						|
        """转换为字典格式"""
 | 
						|
        return {
 | 
						|
            'id': self.id,
 | 
						|
            'username': self.username,
 | 
						|
            'email': self.email,
 | 
						|
            'phone': self.phone,
 | 
						|
            'nickname': self.nickname,
 | 
						|
            'status': self.status,
 | 
						|
            'role_id': self.role_id,
 | 
						|
            'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
 | 
						|
            'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S')
 | 
						|
        }
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def create_user(cls, username, password, email=None, phone=None, nickname=None, role_id=2):
 | 
						|
        """创建新用户"""
 | 
						|
        user = User(
 | 
						|
            username=username,
 | 
						|
            password=password,
 | 
						|
            email=email,
 | 
						|
            phone=phone,
 | 
						|
            nickname=nickname,
 | 
						|
            role_id=role_id
 | 
						|
        )
 | 
						|
        db.session.add(user)
 | 
						|
        db.session.commit()
 | 
						|
        return user
 | 
						|
 | 
						|
 | 
						|
class Role(db.Model):
 | 
						|
    __tablename__ = 'roles'
 | 
						|
 | 
						|
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
 | 
						|
    role_name = db.Column(db.String(32), unique=True, nullable=False)
 | 
						|
    description = db.Column(db.String(128))
 | 
						|
 | 
						|
    users = db.relationship('User', backref='role')
 |