自定義 User(二)

上一篇我們自定義的 User 并未包含 Django 自帶的權(quán)限模塊咳燕,現(xiàn)在我們自定義一個能使用權(quán)限模塊的自定義 User勿决。

要自定義包含原權(quán)限模塊的 User 模型,只需要讓 User 模型繼承 AbstractBaseUser 類的同時還繼承 PermissionsMixin 類招盲。




Django 提供的 PermissionsMixin 是一個抽象模型剥险,為您提供支持 Django 權(quán)限模型所需的所有方法和數(shù)據(jù)庫字段。

PermissionsMixin 提供了以下方法和屬性:

  • is_superuser
  • get_group_permissions(obj=None)
  • get_all_permissions(obj=None)
  • has_perm(perm, obj=None)
  • has_perms(perm_list, obj=None)
  • has_module_perms(package_name)




下面是一個包含 Permission 的自定義 User 模型例子:

from django.db import models
from django.contrib.auth.models import (
    BaseUserManager, AbstractBaseUser, PermissionsMixin
)

class MyUserManager(BaseUserManager):

    def _create_user(self, email, password, date_of_birth, is_staff, is_superuser, **extra_fields):

        if not email:
            raise ValueError('The given email must be set')

        email = self.normalize_email(email)
        user = self.model(
            email=email,
            date_of_birth=date_of_birth,
            is_staff=is_staff,
            is_active=True,
            is_superuser=is_superuser,
            **extra_fields
            )

        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_user(self, email, date_of_birth, password=None, **extra_fields):
        return self._create_user(email, password, date_of_birth, is_staff=False, is_superuser=False, **extra_fields)

    def create_superuser(self, email, date_of_birth, password, **extra_fields):
        return self._create_user(email, password, date_of_birth, is_staff=True, is_superuser=True, **extra_fields)



class MyUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    date_of_birth = models.DateField()

    # 管理類屬性
    is_active = models.BooleanField(default=True)
    # is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)

    # 指定 MyUser 模型的管理器
    objects = MyUserManager()

    # 描述User模型上用作唯一標識符的字段名稱
    # 字段必須必須是唯一的(即在其定義中設(shè)置unique=True)
    USERNAME_FIELD = 'email'

    # 當通過createsuperuser管理命令創(chuàng)建一個用戶時
    # 系統(tǒng)會提示用戶輸入以下字段
    REQUIRED_FIELDS = ['date_of_birth']

    # 返回 email 地址
    def get_full_name(self):
        return self.email

    # 返回 email 地址
    def get_short_name(self):
        return self.email

    def __str__(self):              # __unicode__ on Python 2
        return self.email

別忘了在 setting.py 中加上以下內(nèi)容:

AUTH_USER_MODEL = 'myUserApp.MyUser'




在 shell 中檢驗我們自定義的 User 模型宪肖。

創(chuàng)建一個 superuser:

from myUserApp.models import MyUser 

u = MyUser.objects.create_superuser(
email='user_001@django.com', 
date_of_birth='1988-8-8', 
password='********',
)

查看全部權(quán)限:

u.get_all_permissions()

>>> {'auth.add_group', 'myUserApp.delete_myuser', 'auth.delete_group', 
'sessions.change_session', 'myUserApp.change_myuser', 
'admin.add_logentry', 'contenttypes.change_contenttype', 
'myUserApp.add_myuser', 'auth.add_permission', 
'contenttypes.add_contenttype', 'admin.delete_logentry', 
'contenttypes.delete_contenttype', 'auth.delete_permission', 
'auth.change_group', 'auth.change_permission', 'admin.change_logentry', 
'sessions.add_session', 'sessions.delete_session'}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末表制,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子控乾,更是在濱河造成了極大的恐慌么介,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜕衡,死亡現(xiàn)場離奇詭異壤短,居然都是意外死亡,警方通過查閱死者的電腦和手機慨仿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門久脯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人镰吆,你說我怎么就攤上這事帘撰。” “怎么了万皿?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵摧找,是天一觀的道長。 經(jīng)常有香客問我牢硅,道長蹬耘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任减余,我火速辦了婚禮综苔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘位岔。我一直安慰自己如筛,他們只是感情好,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布赃承。 她就那樣靜靜地躺著妙黍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞧剖。 梳的紋絲不亂的頭發(fā)上拭嫁,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音抓于,去河邊找鬼觉既。 笑死,一個胖子當著我的面吹牛读慎,可吹牛的內(nèi)容都是我干的野舶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼巾遭,長吁一口氣:“原來是場噩夢啊……” “哼肉康!你這毒婦竟也來了闯估?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤吼和,失蹤者是張志新(化名)和其女友劉穎涨薪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炫乓,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡刚夺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了末捣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侠姑。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖箩做,靈堂內(nèi)的尸體忽然破棺而出莽红,到底是詐尸還是另有隱情,我是刑警寧澤卒茬,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布船老,位于F島的核電站,受9級特大地震影響圃酵,放射性物質(zhì)發(fā)生泄漏柳畔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一郭赐、第九天 我趴在偏房一處隱蔽的房頂上張望薪韩。 院中可真熱鬧,春花似錦捌锭、人聲如沸俘陷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拉盾。三九已至,卻和暖如春豁状,著一層夾襖步出監(jiān)牢的瞬間捉偏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工泻红, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夭禽,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓谊路,卻偏偏與公主長得像讹躯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容

  • cms_project 項目潮梯,自定義用戶和相關(guān)權(quán)限設(shè)置 1.重寫用戶模型 1.1 修改配置文件骗灶,覆蓋默認的User...
    常大鵬閱讀 25,815評論 1 26
  • django——重寫用戶模型 Django內(nèi)建的User模型可能不適合某些類型的項目。例如秉馏,在某些網(wǎng)站上使用郵件地...
    常大鵬閱讀 26,298評論 2 29
  • 經(jīng)過對django的初步學(xué)習(xí)矿卑,我們已經(jīng)對后臺的基本流程以及django的運作有了一定的了解,但是這還不足夠沃饶,dja...
    coder_ben閱讀 3,827評論 8 34
  • 在 Django 里,在權(quán)限管理中有內(nèi)置的 Authentication 系統(tǒng)轻黑,用來管理帳戶(Users)糊肤,組(G...
    SingleDiego閱讀 349評論 0 0
  • 嘆九尺高峰 星辰伸手可觸 振翅雄鷹 傲視蒼茫大地 欲吻輪月摘星辰 不知是悲途 觀古今 烏江血染淚史 念霸王 美人已...
    死神狙擊手閱讀 261評論 0 0