Django 繼承AbstractUser擴充使用者模型
by:授客 QQ:1033553122
測試環境
Win 10
Python 3.5.4
Django-2.0.13.tar.gz
官方下載下傳位址:
https://www.djangoproject.com/download/2.0.13/tarball/
mysql-5.7.23-winx64.zip
概述
Django 使用者認證系統提供了一個内置的 User Model,用于記錄使用者的使用者名,密碼,郵箱,姓,名等個人資訊,這些資訊可能無法滿足實際需求,這種情況下,需要拓展使用者模型,如果項目還沒有使用 Django 内置 User 模型,可以采用繼承 AbstractUser 的拓展方式進行拓展(如果已經使用了Django的内置模型,Django會為其生成相關資料庫遷移檔案和資料庫表,采用繼承方式拓展會比較麻煩。)
檢視User模型源碼,(本文中檔案路徑為:
%PYTHON_HOME%\Lib\site-packages\Django-2.0.13-py3.5.egg\django\contrib\auth\models.py),如下,可知User僅是繼承了 AbstractUser,沒有對 AbstractUser 做任何的拓展,是以,如果我們可以自己繼承 AbstractUser,并根據自己的需求進行拓展。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iZwMGMkZjZhJGZzcjZhRGOxYWYzEjMxM2MmN2MmVGNi9CXxAzLcZDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL5M3Lc9CX6MHc0RHaiojIsJye.png)
建立自定義使用者模型
編輯應用的models.py(本文中應用為mysite,models.py路徑為projectName/mysite/models.py),添加以下帶背景色内容部分
from django.db import models
# Create your models here.
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
name = models.CharField(max_length=50, verbose_name='姓名')
creater = models.CharField(max_length=20, verbose_name='建立人')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='建立時間')
updater = models.CharField(max_length=20, verbose_name='更新人')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新時間')
is_delete = models.BooleanField(default=False, verbose_name='是否删除')
修改項目settings.py
為了讓 Django 使用者認證系統使用我們自定義的使用者模型,必須在項目settings.py 裡通過 AUTH_USER_MODEL 指定自定義使用者模型,如下帶背景色部分的内容
...略
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
AUTH_USER_MODEL = 'mysite.User'
注意變量值的格式:appName.CustomeUserModel,意為使用appName應用下的自定義CustomeUserModel使用者模型,本例為使用mysite應用的User模型
執行資料庫遷移
進入到項目根目錄,執行以下指令
python manage.py makemigrations mysite
python manage.py migrate
成功後,Django便會使用我們自定義的使用者模型作為預設的使用者模型了
注意:一定要在配置好 AUTH_USER_MODEL 變量後再遷移資料庫