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,我使用了那个用户模型。

二、处理过程

  1. 在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='请输入地址')
    
  2. 在setting.py中告诉django,以后要使用我自己定义的MyUser作为框架的用户模型。在setting.py文件的末尾增加配置代码如下:

     AUTH_USER_MODEL = 'app.MyUser'
    

    这段代码右侧的值包含两个部分的内容。点前面是app的名称,点后面是类名。直接使用就可以了,不需要导入。

  3. 生成数据库迁移文件,进行数据库迁移。
    第一步,在终端中执行 python manage.py makemigrations 命令,生成迁移文件。执行命令的截图如下:
    image
    第二步、在终端执行python manage.py migrate命令,进行数据库迁移。数据库迁移的命令执行情况如下图:
    image

  4. 报错的原因及处理方法。
    ①报错的原因:
    我还没有找到对这个报错很清晰的解释。
    ②报错的处理方法:
    首先,在setting.py的INSTALLED_APPS中注释掉'django.contrib.admin'
    第二,在usls.py文件中注释掉path('admin/', admin.site.urls),
    第三,重新执行python manage.py migrate命令;此时,会提示命令执行成功
    第四,把刚才注释掉的代码恢复原状。
    这么处理的原理我也没有搞清除,那位大神知道,欢迎指点。

  5. 数据库迁移的结果。
    数据库迁移后,数据库中新增三个数据表,分别是app_myuser,app_myuser_groups,app_myuser_user_permissions,如下图:
    image
    打开app_myuser表,可以看到,除原来user的字段外,新增了phone_num和address字段。

posted @ 2024-01-02 18:11  喜气洋洋白云山  阅读(139)  评论(0编辑  收藏  举报