Django 創建自定義User模型 CustomUser


官方文檔里給了兩種方法

1.創建一個Model,然后用一對一外鍵指到User,這樣就相當於是擴展了User,簡單又實用。

但是這樣沒法自定義User的save和delete函數(當然你直接去改django源碼也是可以的,我之前就是這么干的,但是改源碼這種事情實在是不靠譜),所以我就用了另一種方法

2.直接新建一個CustomUser並‘覆蓋’原來的User類

注意到django源碼里User類的定義里有且只有一個swappable='AUTH_USER_MODEL'。我的理解是,這個設置可以指定另一個類,讓另一個類來代替這個類。

首先在model.py里創建一個新的類CustomUser,然后去setting里添加如下字段:

#我的app名為blog
AUTH_USER_MODEL = 'blog.CustomUser'

這樣一來,django把所有對User的操作都轉移到了我們自己定義的CustomUser類上。

然后在blog的model.py里的代碼如下:

from django.db import models
from django.contrib.auth.models import AbstractUser

import os


class CustomUser(AbstractUser):
    location = models.CharField(max_length=100, blank=True, null=True)
    description = models.CharField(max_length=300, blank=True, null=True)
    avatar = models.ImageField(upload_to='avatars/', default='default/default.jpg', max_length=100)

    def __str__(self):
        return self.username

    def delete(self, *args, **kwargs):
        path = self.avatar.path
        if path:
            os.remove(path)
        super(CustomUser, self).delete(*args, **kwargs)

 

我擴展了三個字段:地址、個人簡介和頭像。

並且能夠隨意自定義save和delete函數。

注:不要輕易覆蓋save函數,因為django對User的save的調用實在是太頻繁了,就算是登錄,也會調用一次save()(django的save和update都使用save())以修改用戶的last_login,還有添加組或者修改權限的時候。你在save函數里的代碼會被多次調用。

這樣一來,我們創建了自己的CustomUser,並且是完全代替了原來的User類(而不是創建了兩個用於管理用戶的Model)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM