django练手( 九):扩展django自带的用户模型
一、思路
通过查阅网上的各种资料,知道django自带的用户模型的引入路径是from django.contrib.auth.models.User
。按住Ctrl,用鼠标左键单击User,可以看到User的源码如下:
class User(AbstractUser):
"""
Users within the Django authentication system are represented by this
model.
django的认证系统中的用户由这个模型表示。
Username and password are required. Other fields are optional.
用户名和密码是必填项。其它字段是可选的。
"""
class Meta(AbstractUser.Meta):
swappable = "AUTH_USER_MODEL"
可以看出,User类继承了AbstractUser,但没有对AbstractUser做任何修改。鉴于这种情况,我在扩展用户模型的时候,也选择继承自AbstractUser类。同时,需要在setting.py文件中告诉django,我使用了那个用户模型。
二、处理过程
-
在app-models.py文件中进行扩展代码的编写,代码如下:
from django.db import models from django.contrib.auth.models import AbstractUser #引入AbstractUser # 在AbstractUser的基础上,给用户模型扩展两个字段:电话号码和地址 class MyUser(AbstractUser): phone_num = models.CharField(max_length=11, verbose_name='手机号', help_text='手机号是必填项') address = models.CharField(max_length=100, verbose_name='地址', blank=True, help_text='请输入地址')
-
在setting.py中告诉django,以后要使用我自己定义的MyUser作为框架的用户模型。在setting.py文件的末尾增加配置代码如下:
AUTH_USER_MODEL = 'app.MyUser'
这段代码右侧的值包含两个部分的内容。点前面是app的名称,点后面是类名。直接使用就可以了,不需要导入。
-
生成数据库迁移文件,进行数据库迁移。
第一步,在终端中执行python manage.py makemigrations
命令,生成迁移文件。执行命令的截图如下:
第二步、在终端执行python manage.py migrate
命令,进行数据库迁移。数据库迁移的命令执行情况如下图:
-
报错的原因及处理方法。
①报错的原因:
我还没有找到对这个报错很清晰的解释。
②报错的处理方法:
首先,在setting.py的INSTALLED_APPS中注释掉'django.contrib.admin'
;
第二,在usls.py文件中注释掉path('admin/', admin.site.urls),
;
第三,重新执行python manage.py migrate
命令;此时,会提示命令执行成功
第四,把刚才注释掉的代码恢复原状。
这么处理的原理我也没有搞清除,那位大神知道,欢迎指点。 -
数据库迁移的结果。
数据库迁移后,数据库中新增三个数据表,分别是app_myuser,app_myuser_groups,app_myuser_user_permissions,如下图:
打开app_myuser表,可以看到,除原来user的字段外,新增了phone_num和address字段。