Python Django自定義用戶模型示例
在Django中使用自定義用戶模型是推薦做法,尤其是在項目初期;2. 通過繼承AbstractUser可擴展字段並修改登錄方式,如將郵箱設為唯一登錄字段;3. 必須在settings.py中提前設置AUTH_USER_MODEL指向自定義模型,否則後續更改將導致外鍵斷裂;4. 創建遷移並運行以生成數據庫表結構;5. 可自定義admin類以在後台顯示新增字段;6. 創建超級用戶驗證配置是否生效;7. 可通過自定義表單處理註冊邏輯;8. AbstractUser適用於擴展字段場景,AbstractBaseUser用於完全自定義認證;9. 若需隱藏username,可在表單或save方法中自動生成。完整流程涵蓋模型定義、配置、遷移、後台管理與表單適配,且必須在項目初期完成用戶模型設置,以避免數據依賴問題。
在Django 中使用自定義用戶模型(Custom User Model)是推薦做法,尤其是在項目初期。它提供了更大的靈活性,比如擴展字段(如手機號、暱稱)、修改認證方式(如用郵箱登錄代替用戶名),以及更好地適應未來需求。

下面是一個完整的Django 自定義用戶模型示例,使用AbstractUser
擴展,並將郵箱設為唯一登錄字段。
✅ 1. 創建自定義用戶模型
假設你的項目名為myproject
,應用名為users
。

先創建應用(如果還沒有):
python manage.py startapp users
然後在users/models.py
中定義自定義用戶模型:

# users/models.py from django.contrib.auth.models import AbstractUser from django.db import models class CustomUser(AbstractUser): email = models.EmailField(unique=True) # 郵箱唯一phone = models.CharField(max_length=15, blank=True, null=True) nickname = models.CharField(max_length=50, blank=True, null=True) USERNAME_FIELD = 'email' # 使用郵箱登錄REQUIRED_FIELDS = ['username', 'first_name', 'last_name'] # 超級用戶需要填寫的字段def __str__(self): return self.email
? 注意:
- 繼承
AbstractUser
可以保留原有功能,同時擴展字段。USERNAME_FIELD
設置為REQUIRED_FIELDS
是創建超級用戶時必須輸入的字段(除了密碼)。
✅ 2. 更新settings.py
在myproject/settings.py
中告訴Django 使用你的新用戶模型:
# myproject/settings.py # 修改默認用戶模型AUTH_USER_MODEL = 'users.CustomUser' # 其他設置... INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users', # 註冊users 應用]
⚠️ 注意:這一步必須在第一次遷移前完成!否則後續修改會非常麻煩。
✅ 3. 創建並運行遷移
python manage.py makemigrations users python manage.py migrate
這會創建包含你自定義用戶表的數據庫結構。
✅ 4. 自定義管理後台(可選)
為了讓自定義字段在Django admin 中正常顯示,修改users/admin.py
:
# users/admin.py from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import CustomUser class CustomUserAdmin(UserAdmin): model = CustomUser list_display = ['email', 'username', 'first_name', 'last_name', 'is_staff'] fieldsets = UserAdmin.fieldsets ( (None, {'fields': ('phone', 'nickname')}), ) add_fieldsets = UserAdmin.add_fieldsets ( (None, {'fields': ('phone', 'nickname')}), ) admin.site.register(CustomUser, CustomUserAdmin)
✅ 5. 創建超級用戶測試
運行命令創建超級用戶:
python manage.py createsuperuser
輸入郵箱、用戶名、密碼等信息,登錄//m.sbmmt.com/link/d5a44bdaee01bac1c4490d1aded4c0d8查看是否生效。
✅ 6. 在表單中使用(可選)
你可以自定義註冊表單來適配新模型:
# users/forms.py from django import forms from django.contrib.auth.forms import UserCreationForm from .models import CustomUser class CustomUserCreationForm(UserCreationForm): class Meta: model = CustomUser fields = ('username', 'email', 'first_name', 'last_name', 'password1', 'password2', 'phone', 'nickname')
然後在視圖中使用這個表單處理註冊邏輯。
✅ 常見問題說明
為什麼不能中途換用戶模型?
因為Django 的外鍵依賴(如auth、sessions、log entry)都指向auth.User
,中途更換會導致外鍵斷裂。所以一定要在項目初期設置。-
AbstractUser vs AbstractBaseUser?
-
AbstractUser
:適合只需要擴展字段或改登錄字段的場景(推薦大多數情況使用)。 -
AbstractBaseUser
:完全自定義認證邏輯(如只用手機號、無密碼登錄等),更複雜。
-
如何用郵箱登錄而不讓用戶填username?
可以在表單中自動生成username(比如用郵箱前綴),或者覆蓋save()
方法。
基本上就這些。這個例子覆蓋了從模型定義到後台管理的完整流程,適合大多數項目需求。不復雜但容易忽略細節,尤其是AUTH_USER_MODEL
必須儘早設置。
以上是Python Django自定義用戶模型示例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Yes,aPythonclasscanhavemultipleconstructorsthroughalternativetechniques.1.Usedefaultargumentsinthe__init__methodtoallowflexibleinitializationwithvaryingnumbersofparameters.2.Defineclassmethodsasalternativeconstructorsforclearerandscalableobjectcreati

要入門量子機器學習(QML),首選工具是Python,需安裝PennyLane、Qiskit、TensorFlowQuantum或PyTorchQuantum等庫;接著通過運行示例熟悉流程,如使用PennyLane構建量子神經網絡;然後按照數據集準備、數據編碼、構建參數化量子線路、經典優化器訓練等步驟實現模型;實戰中應避免一開始就追求復雜模型,關注硬件限制,採用混合模型結構,並持續參考最新文獻和官方文檔以跟進發展。

本文為您精選了多個頂級的Python“成品”項目網站與高水平“大片”級學習資源入口。無論您是想尋找開發靈感、觀摩學習大師級的源代碼,還是系統性地提昇實戰能力,這些平台都是不容錯過的寶庫,能幫助您快速成長為Python高手。

使用Python調用WebAPI獲取數據的關鍵在於掌握基本流程和常用工具。 1.使用requests發起HTTP請求是最直接的方式,通過get方法獲取響應並用json()解析數據;2.對於需要認證的API,可通過headers添加token或key;3.需檢查響應狀態碼,推薦使用response.raise_for_status()自動處理異常;4.面對分頁接口,可通過循環依次請求不同頁面並加入延時避免頻率限制;5.處理返回的JSON數據時需根據結構提取信息,複雜數據可用pandas轉換為Data

Python的onelineifelse是三元操作符,寫法為xifconditionelsey,用於簡化簡單的條件判斷。它可用於變量賦值,如status="adult"ifage>=18else"minor";也可用於函數中直接返回結果,如defget_status(age):return"adult"ifage>=18else"minor";雖然支持嵌套使用,如result="A"i

寫Python的ifelse語句關鍵在於理解邏輯結構與細節。 1.基礎結構是if條件成立執行一段代碼,否則執行else部分,else可選;2.多條件判斷用elif實現,順序執行且一旦滿足即停止;3.嵌套if用於進一步細分判斷,建議不超過兩層;4.簡潔場景可用三元表達式替代簡單ifelse。注意縮進、條件順序及邏輯完整性,才能寫出清晰穩定的判斷代碼。

使用subprocess.run()可安全執行shell命令並捕獲輸出,推薦以列表傳參避免注入風險;2.需要shell特性時可設shell=True,但需警惕命令注入;3.使用subprocess.Popen可實現實時輸出處理;4.設置check=True可在命令失敗時拋出異常;5.簡單場景可直接鍊式調用獲取輸出;日常應優先使用subprocess.run(),避免使用os.system()或已棄用模塊,以上方法覆蓋了Python中執行shell命令的核心用法。

使用Seaborn的jointplot可快速可視化兩個變量間的關係及各自分佈;2.基礎散點圖通過sns.jointplot(data=tips,x="total_bill",y="tip",kind="scatter")實現,中心為散點圖,上下和右側顯示直方圖;3.添加回歸線和密度信息可用kind="reg",並結合marginal_kws設置邊緣圖樣式;4.數據量大時推薦kind="hex",用
