zoukankan      html  css  js  c++  java
  • django中如果不是第一次迁移的时候就配置AUTH_USER_MODEL(用来告知django认证系统识别我们自定义的模型类),那么该如何解决才能让django的认证系统识别且不会报未知错误?

    Django认证系统中提供的用户模型类及方法很方便,我们可以使用这个模型类,但是字段有些无法满足项目需求,如还需要保存用户的手机号,需要给模型类添加额外的字段。

    Django提供了django.contrib.auth.models.AbstractUser用户抽象模型类允许我们继承,扩展字段来使用Django认证系统的用户模型类。

    我们可以在apps中创建Django应用users,并在配置文件中注册users应用。

    在创建好的应用models.py中定义用户的用户模型类。

    from django.contrib.auth.models import AbstractUser
    """不继承django提供的User,继承它的父类AbstractUser"""
    class User(AbstractUser):
        """用户模型类"""
        mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')
    
        class Meta:
            db_table = 'ly_users'
            verbose_name = '用户'
            verbose_name_plural = verbose_name
    

    我们自定义的用户模型类还不能直接被Django的认证系统所识别,需要在配置文件中告知Django认证系统使用我们自定义的模型类。
    在配置文件中进行设置

          AUTH_USER_MODEL = 'users.User'
          参数的设置以`点.`来分隔,表示`应用名.模型类名`
    

    注意:Django建议我们对于AUTH_USER_MODEL参数的设置一定要在第一次数据库迁移之前就设置好,否则后续使用可能出现未知错误。
    不是第一次迁移的时候就配置AUTH_USER_MODEL的解决办法:

    0. 先把现有的数据库导出备份,然后清掉数据库中所有的数据表。选中表,右键Dump Data to File->SQL Inserts,即可导出sql语句
    1. 把开发者创建的所有子应用下面的migrations目录下除了__init__.py以外的所有迁移文件,只要涉及到用户的,一律删除
    2. 把django.contrib.admin.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
    3. 把django.contrib.auth.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
    4. 把reversion.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
    5. 把xadmin.migrations目录下除了__init__.py以外的所有迁移文件,全部删除。
    6. 接下来,执行数据迁移,回顾第0步中的数据,以后如果要修改用户相关数据,不需要重复本次操作,直接数据迁移即可。
    7.把导出的sql语句重新插入到表中,
    


    -------------------------------------------

    个性签名:代码过万,键盘敲烂!!!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    sql把字符数组转换成表 :把字符串1,2,3变成表里的行数据
    Excel中如何把时间转化成文本
    网页前段常用代码及网页自适应
    sql存储过程几个简单例子(一)
    Web调用安卓,苹果手机摄像头,本地图片和文件
    JQuery-方法
    JQuery-选择器
    AJAX-JSON
    Ajax-验证码
    DOM-XML(解析与创建)
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/13687841.html
Copyright © 2011-2022 走看看