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