目錄
✅ 1. 創建自定義用戶模型
✅ 2. 更新settings.py
✅ 3. 創建並運行遷移
✅ 4. 自定義管理後台(可選)
✅ 5. 創建超級用戶測試
✅ 6. 在表單中使用(可選)
✅ 常見問題說明
首頁 後端開發 Python教學 Python Django自定義用戶模型示例

Python Django自定義用戶模型示例

Aug 01, 2025 am 06:41 AM

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

python django custom user model example

在Django 中使用自定義用戶模型(Custom User Model)是推薦做法,尤其是在項目初期。它提供了更大的靈活性,比如擴展字段(如手機號、暱稱)、修改認證方式(如用郵箱登錄代替用戶名),以及更好地適應未來需求。

python django custom user model example

下面是一個完整的Django 自定義用戶模型示例,使用AbstractUser擴展,並將郵箱設為唯一登錄字段。


✅ 1. 創建自定義用戶模型

假設你的項目名為myproject ,應用名為users

python django custom user model example

先創建應用(如果還沒有):

 python manage.py startapp users

然後在users/models.py中定義自定義用戶模型:

python django custom user model example
 # 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設置為email ,意味著用戶通過郵箱登錄。
  • 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1604
29
PHP教程
1510
276
Python類可以有多個構造函數嗎? Python類可以有多個構造函數嗎? Jul 15, 2025 am 02:54 AM

Yes,aPythonclasscanhavemultipleconstructorsthroughalternativetechniques.1.Usedefaultargumentsinthe__init__methodtoallowflexibleinitializationwithvaryingnumbersofparameters.2.Defineclassmethodsasalternativeconstructorsforclearerandscalableobjectcreati

用於量子機學習的Python 用於量子機學習的Python Jul 21, 2025 am 02:48 AM

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

成品python大片在線觀看入口 python免費成品網站大全 成品python大片在線觀看入口 python免費成品網站大全 Jul 23, 2025 pm 12:36 PM

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

從Python中的Web API訪問數據 從Python中的Web API訪問數據 Jul 16, 2025 am 04:52 AM

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

python一行,如果還有 python一行,如果還有 Jul 15, 2025 am 01:38 AM

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

python如果還有示例 python如果還有示例 Jul 15, 2025 am 02:55 AM

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

python run shell命令示例 python run shell命令示例 Jul 26, 2025 am 07:50 AM

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

python seaborn關節圖示例 python seaborn關節圖示例 Jul 26, 2025 am 08:11 AM

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

See all articles