国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django自定義用戶認(rèn)證示例詳解

2020-02-22 23:28:02
字體:
供稿:網(wǎng)友

前言

Django附帶的認(rèn)證對于大多數(shù)常見情況來說已經(jīng)足夠了,但是如何在 Django 中使用自定義的數(shù)據(jù)表進(jìn)行用戶認(rèn)證,有一種較為笨蛋的辦法就是自定義好數(shù)據(jù)表后,使用OnetoOne來跟 Django 的表進(jìn)行關(guān)聯(lián),類似于這樣:

from django.contrib.auth.models import Userclass UserProfile(models.Model): """ 用戶賬號表 """ user = models.OneToOneField(User) name = models.CharField(max_length=32) def __str__(self):  return self.name class Meta:  verbose_name_plural = verbose_name = "用戶賬號"  ordering = ['id']

這樣做雖然可以簡單、快速的實(shí)現(xiàn),但是有一個問題就是我們在自己的表中創(chuàng)建一個用戶就必須再跟 admin 中的一個用戶進(jìn)行關(guān)聯(lián),這簡直是不可以忍受的。

admin代替默認(rèn)User model

寫我們自定義的 models 類來創(chuàng)建用戶數(shù)據(jù)表來代替默認(rèn)的User model,而不與django admin的進(jìn)行關(guān)聯(lián),相關(guān)的官方文檔在這里

👾戳我

from django.db import modelsfrom django.contrib.auth.models import Userfrom django.contrib.auth.models import ( BaseUserManager, AbstractBaseUser)class UserProfileManager(BaseUserManager): def create_user(self, email, name, password=None):  """  用戶創(chuàng)建,需要提供 email、name、password  """  if not email:   raise ValueError('Users must have an email address')  user = self.model(   email=self.normalize_email(email),   name=name,  )  user.set_password(password)  user.save(using=self._db)  return user def create_superuser(self, email, name, password):  """  超級用戶創(chuàng)建,需要提供 email、name、password  """  user = self.create_user(   email,   password=password,   name=name,  )  user.is_admin = True  user.is_active = True  user.save(using=self._db)  return userclass UserProfile(AbstractBaseUser): # 在此處可以配置更多的自定義字段 email = models.EmailField(  verbose_name='email address',  max_length=255,  unique=True, ) name = models.CharField(max_length=32, verbose_name="用戶名稱") phone = models.IntegerField("電話") is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) objects = UserProfileManager() USERNAME_FIELD = 'email' # 將email 作為登入用戶名 REQUIRED_FIELDS = ['name', 'phone'] def __str__(self):  return self.email def get_full_name(self):  # The user is identified by their email address  return self.email def get_short_name(self):  # The user is identified by their email address  return self.email def has_perm(self, perm, obj=None):  "Does the user have a specific permission?"  # Simplest possible answer: Yes, always  return True def has_module_perms(self, app_label):  "Does the user have permissions to view the app `app_label`?"  # Simplest possible answer: Yes, always  return True @property def is_staff(self):  "Is the user a member of staff?"  # Simplest possible answer: All admins are staff  return self.is_admin            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 嘉鱼县| 瑞安市| 石狮市| 邳州市| 泗水县| 丹凤县| 泗洪县| 泽普县| 惠安县| 高淳县| 高阳县| 突泉县| 湘西| 嵩明县| 喜德县| 罗平县| 广饶县| 浮梁县| 绥宁县| 乌苏市| 宜章县| 永济市| 尼玛县| 杭州市| 乳山市| 灌阳县| 奎屯市| 神池县| 城市| 明水县| 东光县| 盘锦市| 聊城市| 松潘县| 公主岭市| 棋牌| 巴林左旗| 景东| 大余县| 青川县| 静海县|