# !/usr/bin/env python3 # -*- encoding : utf-8 -*- # @Filename : user.py # @Software : VSCode # @Datetime : 2021/11/04 21:33:10 # @Author : leo liu # @Version : 1.0 # @Description : """ 用户模型 """ from datetime import datetime from sqlalchemy import Column, Integer, VARCHAR, SmallInteger, DateTime, ForeignKey, Table from sqlalchemy.orm import relationship from sqlalchemy.sql import func from db.base_class import Base, gen_uuid user_role = Table( "nlt_userrole", Base.metadata, Column("id", Integer, unique=True, index=True, primary_key=True, autoincrement=True, comment="ID"), Column("user_id", VARCHAR(32), ForeignKey("nlt_user.user_id"), nullable=False, primary_key=True, comment="用户id"), Column("role_id", VARCHAR(32), ForeignKey("nlt_role.role_id"), nullable=False, primary_key=True, comment="角色id"), Column("create_time", DateTime, default=datetime.now, server_default=func.now(), comment="创建时间") ) class User(Base): """ 用户表 """ __tablename__ = "nlt_user" user_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="用户id") username = Column(VARCHAR(128), nullable=False, unique=True, comment="用户名(不可更改)") hashed_password = Column(VARCHAR(128), nullable=False, comment="密码") nickname = Column(VARCHAR(128), comment="用户昵称(显示用可更改)") email = Column(VARCHAR(128), unique=True, comment="邮箱") avatar = Column(VARCHAR(256), nullable=True, comment="用户头像") phone = Column(VARCHAR(16), unique=True, index=True, nullable=True, comment="手机号") gender = Column(SmallInteger, default=0, comment="性别 0=未知 1=男 2=女", server_default="0") register_time = Column(DateTime, default=datetime.now, comment="注册事件") last_login_time = Column(DateTime, default=datetime.now, comment="上次登录时间") last_login_ip = Column(VARCHAR(64), nullable=True, comment="上次登录IP") register_ip = Column(VARCHAR(64), nullable=True, comment="注册IP") wechat_openid = Column(VARCHAR(64), nullable=True, comment="微信openId") country = Column(VARCHAR(64), nullable=True, comment="国家") province = Column(VARCHAR(64), nullable=True, comment="省") city = Column(VARCHAR(64), nullable=True, comment="市") q_limit_day = Column(Integer, default=0, comment="每日问题数量限制") tokens_limit = Column(Integer, default=0, comment="字数限制") # role_id = Column(Integer, comment="角色") # role = relationship("Role", secondary=user_role) is_active = Column(Integer, default=True, comment="用户是否激活 0=未激活 1=激活", server_default="1") __table_args__ = ({'comment': '用户表'}) class Role(Base): """ 角色表 """ __tablename__ = "nlt_role" role_id = Column(VARCHAR(32), default=gen_uuid, index=True, primary_key=True, unique=True, comment="角色id") name = Column(VARCHAR(128), nullable=False, comment="角色名") title = Column(VARCHAR(128), comment="角色名(中文)") users = relationship("User", backref="roles", secondary=user_role) # menu = relationship("Menu", secondary=menu.role_menu) __table_args__ = ({'comment': '角色表'}) class LoginHistory(Base): """ 登录记录 """ __tablename__ = "nlt_login_history" user_id = Column(VARCHAR(32), ForeignKey('nlt_user.user_id')) username = Column(VARCHAR(128), comment="用户名") login_time = Column(DateTime, default=datetime.now, comment="登录时间") login_ipv4 = Column(VARCHAR(15), comment="登录ip") user = relationship("User", backref="login_histories")