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,并根據自己的需求進行拓展,

拓展用戶模型
新建自定義用戶模型
編輯應用的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 變數后再遷移資料庫
參考鏈接
https://www.cnblogs.com/AmilyWilly/p/8469851.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/211548.html
標籤:Python
