Extend Django User Model

Django 自带的 User 类就已经帮我们实现了用户的注册和登陆的基本功能. 可是, 这个类只包含了 username, first_name, last_name, email 这4个基础字段, 且first_name, last_name, 和email字段都是非必填的. 如果我们需要User表里面有更多的字段, 那么我们可以自己来拓展 Django这个类.

源码分析

1
2
3
4
5
6
7
8
9
class User(AbstractUser):
"""
Users within the Django authentication system are represented by this
model.

Username, password and email are required. Other fields are optional.
"""
class Meta(AbstractUser.Meta):
swappable = 'AUTH_USER_MODEL'

从源码可以看出, 自带的User继承自AbstractUser. 如果我们要添加字段或者更改字段, 也需要继承 AbstractUser.

拓展

1
2
3
4
5
6
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
# make email unique
email = models.EmailField(unique=True)
REQUIRED_FIELDS = ['first_name', 'last_name', 'email']

使用模型

当我们完成User表的拓展的时候, 工作并没有结束, 我们还需要告诉Django来使用我们刚刚拓展的User模型来验证登陆和注册.

settings.py添加

1
AUTH_USER_MODEL = 'manager.User'

这样才算完成.

EOF