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