You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
3.6 KiB
79 lines
3.6 KiB
# !/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") |