登陆注册数据库设计
共同字段:
用户表
tablename: user
字段名 |
字段类型 |
字段描述 |
是否为空 |
是否unique |
默认值 |
username |
string(20) |
用户名 |
False |
True |
|
password |
string(100) |
密码 |
False |
False |
|
email |
string(49) |
邮箱 |
False |
True |
|
is_superuser |
bool |
是否为超级管理员 |
False |
False |
False |
is_confirmed |
bool |
邮箱是否验证 |
False |
False |
False |
register_time |
datetime |
注册时间 |
False |
False |
UTC时间 |
last_login |
datetime |
上次登陆 |
True |
False |
|
用户信息表
tablename: userinfo
字段名 |
字段类型 |
字段描述 |
是否为空 |
是否unique |
默认值 |
avatar |
string(128) |
头像路径 |
True |
False |
|
company |
string(128) |
公司 |
True |
False |
|
website |
string(128) |
网址 |
True |
False |
|
user_id |
integer |
关联用户表外键 |
True |
True |
|
user |
|
与用户信息成一对一关系 |
|
|
|
用户设置表
tablename: usersetting
字段名 |
字段类型 |
字段描述 |
是否为空 |
是否unique |
默认值 |
locale |
string(49) |
语言设置 |
False |
False |
zh |
timezone |
string(49) |
时区设置 |
False |
False |
UTC |
user_id |
integer |
关联用户表外键 |
True |
True |
|
user |
|
与用户设置成一对一关系 |
|
|
|
用户token表
tablename: usertoken
字段名 |
字段类型 |
字段描述 |
是否为空 |
是否unique |
默认值 |
token |
string(128) |
token |
False |
False |
|
available |
bool |
token是否有效 |
False |
False |
True |
created_at |
datetime |
token创建时间 |
False |
False |
UTC时间 |
updated_at |
datetime |
token更新时间 |
False |
False |
UTC时间(自动更新) |
user_id |
integer |
关联用户表外键 |
True |
True |
|
user |
|
与用户token成一对一关系 |
|
|
|
数据库实现
用户表
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column('用户名', db.String(49), unique=True, nullable=False)
email = db.Column('邮箱', db.String(81), unique=True, nullable=False)
password = db.Column('密码', db.String(81), nullable=False)
is_superuser = db.Column('是否超级管理员', db.Boolean, default=False)
is_confirmed = db.Column('是否验证', db.Boolean, default=False)
register_time = db.Column('注册时间', db.DateTime, default=datetime.now())
last_login = db.Column('上次登陆', db.DateTime, nullable=True)
用户信息表
class UserInfo(db.Model):
__tablename__ = 'userinfo'
id = db.Column(db.Integer, primary_key=True)
avatar = db.Column(db.String(128))
school = db.Column(db.String(128), nullable=True)
word = db.Column(db.Text, nullable=True)
introduce = db.Column(db.Text, nullable=True)
user_id = db.Column(
db.Integer, db.ForeignKey(
'user.id', ondelete="CASCADE"))
user = db.relationship(
User,
backref=db.backref(
"info", uselist=False, cascade='all,delete', lazy='joined'),
uselist=False,
lazy='joined')
用户设置表
class UserSetting(db.Model):
LOCALE_CHINESE = 'zh'
LOCALE_ENGLISH = 'en'
LOCALE = (('zh', 'Chinese'), ('en', 'English'))
TIMEZONE_UTC = 'UTC'
TIMEZONE = [(i, i) for i in all_timezones]
__tablename__ = 'usersetting'
id = db.Column(db.Integer, primary_key=True)
locale = db.Column(db.String(32), nullable=False, default=LOCALE_CHINESE)
timezone = db.Column(db.String(32), nullable=False, default=TIMEZONE_UTC)
user_id = db.Column(
db.Integer, db.ForeignKey(
'user.id', ondelete="CASCADE"))
user = db.relationship(
User,
backref=db.backref(
"setting", uselist=False, cascade='all,delete', lazy='joined'),
uselist=False,
lazy='joined')
用户token表
class UserToken(db.Model):
__tablename__ = 'usertoken'
id = db.Column(db.Integer, primary_key=True)
token = db.Column(db.String(128), nullable=False)
available = db.Column(db.Boolean, nullable=False, default=True)
created_at = db.Column(
db.DateTime, default=datetime.utcnow(), nullable=False)
updated_at = db.Column(
db.DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow())
user_id = db.Column(
db.Integer, db.ForeignKey(
'user.id', ondelete="CASCADE"))
user = db.relationship(
User,
backref=db.backref(
"token", uselist=False, cascade='all,delete', lazy='joined'),
uselist=False,
lazy='joined')
以后可能对表进行扩展