django 修改默認的user表和默認的認證系統


django的功能非常強大,但是自帶的user表很多情況下並不滿足我們的需求,因此我們需要修改其默認的user表,並且把用username登錄改成用email登錄

第一步,創建自己的user表,在創建的app下的models中

from django.contrib.auth.models import AbstractUser
from django.db import models # Create your models here.
class UserProfile(AbstractUser): nick_name = models.CharField(max_length=50, verbose_name='昵稱', default='') birthday = models.DateField(null=True, blank=True, verbose_name='生日') gender = models.CharField(max_length=6, choices=(('male', ''), ('female', '')), default='female', verbose_name='性別') address = models.CharField(max_length=100, default='', verbose_name='地址') mobile = models.CharField(max_length=11, null=True, blank=True, verbose_name='手機號') image = models.ImageField(max_length=100, upload_to='image/%Y/%m', default='image?default.png', verbose_name='頭像')
  class Meta:
  verbose_name = '用戶信息'
  verbose_name_plural = verbose_name
  def __str__(self):
  return self.username

因為django的user表也是繼承自AbstractUser,所以我們也這樣做

然后修改下setting,添加

# UserProfile 覆蓋了 django 內置的 user 表
AUTH_USER_MODEL = 'users.UserProfile'

appname.userProfile

接着修改認證系統

 
         
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from models import UserProfile

#
讓用戶可以用郵箱登錄 # setting 里要有對應的配置 class CustomBackend(ModelBackend): def authenticate(self, username=None, password=None, **kwargs): try: user = UserProfile.objects.get(Q(username = username) | Q(email=username)) if user.check_password(password): return user except Exception as e: return None

記得引入models中創建的表

# AUTH 方法(支持郵箱登錄)
AUTHENTICATION_BACKENDS = ('users.views.CustomBackend',)

setting中加入該方法

完成


免責聲明!

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



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