Django认证系统中的用户模型类有些字段无法满足项目需求,如手机号,需要给模型类添加额外的字段。
Django提供了django.contrib.auth.models.AbstractUser
用户抽象模型类允许继承,扩展字段来使用Django认证系统的用户模型类。
可以在apps中创建Django应用users,并在配置文件中注册users应用。
在创建好的应用models.py中定义用户的用户模型类。
class User(AbstractUser):
"""用户模型类"""
mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')
class Meta:
db_table = 'xx_users'
verbose_name = '用户'
verbose_name_plural = verbose_name
自定义的用户模型类还不能直接被Django的认证系统所识别,需要在配置文件中告知Django认证系统使用自定义的模型类。
在配置文件中进行设置
AUTH_USER_MODEL = 'users.User'
注意:Django建议AUTH_USER_MODEL参数的设置一定要在第一次数据库迁移之前就设置好,否则后续使用可能出现未知错误。
执行数据库迁移
python manage.py makemigrations
python manage.py migrate
执行python manage.py migrate
命令时:系统报错类似如下:
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration reversion.0001_squashed_0004_auto_20160611_1202 is applied before its dependency users.0001_initial on database 'default'.
这是由于reversion的子应用使用了原来的users模型,目前数据库已经设置了默认的子应用为users
的模型了,所以产生了冲突。需要清除原来的迁移文件和数据库中的所有信息就可以解决。
解决步骤:
1. 备份数据库,删除关于用户原来的数据表信息和表结构[如果刚开始开发,则直接清除库中所有数据表即可。]
2. 删除子应用users中migrations目录下除了__init__.py以外的所有迁移文件
3. 删除在django.contrib.admin和django.contrib.auth模块里面的migrations迁移文件,除了__init__.py
4. 删除在xadmin和reversion模块中的migrations的迁移文件,除了__init__.py。
5. 执行数据迁移,把备份数据,除了用户以外的全部恢复执行即可。
6. 使用manage.py createsuperuser创建管理员即可