django 修改預設的user表和預設的認證系統

2022-05-09 01:12:09 字數 2154 閱讀 9461

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

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

'

接著修改認證系統

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))

ifuser.check_password(password):

return

user

except

exception as e:

return none

記得引入models中建立的表

#

auth 方法(支援郵箱登入)

authentication_backends = ('

users.views.custombackend

',)

setting中加入該方法

完成

django 中User的重寫

django本身的auth user 只包含了基本的資訊包括使用者名稱,密碼,郵箱以及註冊時間和最新的登入時間,但是這些欄位很難滿足我們的要求,有時我們想記錄使用者更多的資訊,例如手機號等資訊,這時就需要在auth user 的基礎上增加字段,django自定義user網上有四種方法。1,是官網上推...

django 中User的重寫

django本身的auth user 只包含了基本的資訊包括使用者名稱,密碼,郵箱以及註冊時間和最新的登入時間,但是這些欄位很難滿足我們的要求,有時我們想記錄使用者更多的資訊,例如手機號等資訊,這時就需要在auth user 的基礎上增加字段,django自定義user網上有四種方法。1,是官網上推...

Django拓展User使用者表

新增乙個字段 wechat models.charfield verbose name blank true null true max length 32 def str self return self.username 將model註冊到admin login admin.py from dj...