django用戶登陸驗證

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

django的功能很是強大,可是自帶的user表不少狀況下並不知足咱們的需求,所以咱們須要修改其默認的user表,而且把用username登陸改爲用email登陸app

 

第一步,建立本身的user表,在建立的app下的models中繼承

 

 

from django.contrib.auth.models import AbstractUserget

from django.db import modelsio

# Create your models here.class

 

 

class UserProfile(AbstractUser):email

nick_name = models.CharField(max_length=50, verbose_name='暱稱', default='')import

birthday = models.DateField(null=True, blank=True, verbose_name='生日')登錄

gender = models.CharField(max_length=6, choices=(('male', '男'), ('female', '女')), default='female', verbose_name='性別')mobile

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中加入該方法

 

完成

相關文章
相關標籤/搜索