Django認證系統(tǒng)中的用戶模型類有些字段無法滿足項目需求挫掏,如手機號皿桑,需要給模型類添加額外的字段详拙。
Django提供了django.contrib.auth.models.AbstractUser
用戶抽象模型類允許繼承叹阔,擴展字段來使用Django認證系統(tǒng)的用戶模型類质蕉。
可以在apps中創(chuàng)建Django應用users势篡,并在配置文件中注冊users應用。
在創(chuàng)建好的應用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的認證系統(tǒng)所識別禁悠,需要在配置文件中告知Django認證系統(tǒng)使用自定義的模型類。
在配置文件中進行設置
AUTH_USER_MODEL = 'users.User'
注意:Django建議AUTH_USER_MODEL參數(shù)的設置一定要在第一次數(shù)據(jù)庫遷移之前就設置好兑宇,否則后續(xù)使用可能出現(xiàn)未知錯誤碍侦。
執(zhí)行數(shù)據(jù)庫遷移
python manage.py makemigrations
python manage.py migrate
執(zhí)行python manage.py migrate
命令時:系統(tǒng)報錯類似如下:
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模型,目前數(shù)據(jù)庫已經(jīng)設置了默認的子應用為users
的模型了隶糕,所以產(chǎn)生了沖突瓷产。需要清除原來的遷移文件和數(shù)據(jù)庫中的所有信息就可以解決。
解決步驟:
1. 備份數(shù)據(jù)庫枚驻,刪除關于用戶原來的數(shù)據(jù)表信息和表結(jié)構[如果剛開始開發(fā)濒旦,則直接清除庫中所有數(shù)據(jù)表即可。]
2. 刪除子應用users中migrations目錄下除了__init__.py以外的所有遷移文件
3. 刪除在django.contrib.admin和django.contrib.auth模塊里面的migrations遷移文件再登,除了__init__.py
4. 刪除在xadmin和reversion模塊中的migrations的遷移文件尔邓,除了__init__.py。
5. 執(zhí)行數(shù)據(jù)遷移霎冯,把備份數(shù)據(jù)铃拇,除了用戶以外的全部恢復執(zhí)行即可。
6. 使用manage.py createsuperuser創(chuàng)建管理員即可