擴(kuò)展django-User表战坤,修改(自定義)django登錄驗(yàn)證和注冊方式

擴(kuò)展django-user表

django默認(rèn)的字段對于我們的需求往往不夠用士聪,我們需要添加自己需要的字段锦援。還有就是擴(kuò)展django-user表的話還是可以用request.user來獲取到當(dāng)前用戶信息

在我們的app下的models.py文件中鍵入如下代碼來擴(kuò)展django自帶的User表:

我的app名稱是users.

# 引入django自帶User表(占坑), 以便于在下方繼承
from django.contrib.auth.models import AbstractUser

# 繼承 AbstractUser
class UserExtension(AbstractUser):
    #  在下方添加所擴(kuò)展的字段
    phone = models.CharField(max_length=11, blank=True, null=True, verbose_name="手機(jī)號碼") 

然后在setting.py中加入:

# 'users.UserExtension' 是 ‘a(chǎn)pp名稱.剛才擴(kuò)展字段的類名’
AUTH_USER_MODEL = 'users.UserExtension' 

這時(shí)你再進(jìn)行同步數(shù)據(jù)庫“颍可能會出錯(cuò)灵寺,出錯(cuò)的話建議百度活聯(lián)系我。

這時(shí)看我們數(shù)據(jù)庫里的表是這樣的区岗,你可以對照原生的django表對比一下略板。

image.png

修改django登錄的驗(yàn)證

我們在用django做登錄驗(yàn)證的時(shí)候默認(rèn)是需要username字段和password字段,現(xiàn)在我們想讓他用手機(jī)號+密碼 或者 郵箱+密碼該怎么實(shí)現(xiàn)登錄驗(yàn)證呢慈缔?

默認(rèn)登錄驗(yàn)證代碼:

from django.views import View
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login

def login(request):
    username = 123
    password = 123

    user = authenticate(username=username, password=password)  #用戶驗(yàn)證
    if user:
        login(request, user)  #用戶登錄
        return redirect('/')
     else:
        return render(request, "users/login/") 

從上述代碼可以看到django登陸主要是基于authenticate,如果我們想要使用手機(jī)號碼/郵箱來代替叮称,那么可以重寫authenticate();

重寫authenticate:

from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from .models import UserExtension

class CustomBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            user = UserExtension.objects.get(Q(username=username) | Q(phone=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None 

然后在setting.py中設(shè)置如下:

我的app名稱是:users 藐鹤;重寫類名為CustomBackend瓤檐; 所以是‘users.views.CustomBackend’

AUTHENTICATION_BACKENDS =('users.views.CustomBackend',) 

重寫完之后我們再進(jìn)行登錄驗(yàn)證的時(shí)候就可以這樣進(jìn)行操作了:

重寫后的驗(yàn)證方式:

def user_login(request):
    phone = request.POST['phone']
    password = request.POST['password']

   # 實(shí)例化剛才重寫的類
   authentication = CustomBackend()
   user = authentication.authenticate(request, username=phone, password=password)
   if user:
       return HttpResponse("恭喜登錄成功")
   else:
       return HttpResponse("登錄失敗") 

第二次更新:擴(kuò)展django_user表后的自定義注冊

修改django注冊方式

因?yàn)槲覀儗jango_user表進(jìn)行了擴(kuò)展,我們還可以繼續(xù)用django自帶的create_user方法來完成注冊娱节;

既然我們都擴(kuò)展了字段挠蛉,我們不妨來試試自己定義一下django的注冊方式;

還有一點(diǎn)原因就是用django--create_user注冊賬號的時(shí)候至少需要 username,email,password字段(可能不需要email字段記不清了)肄满;

假設(shè)我們現(xiàn)在的需求是用戶名+手機(jī)號+驗(yàn)證碼方式注冊和登陸谴古,我們該怎么實(shí)現(xiàn)呢质涛?

1.擴(kuò)展django-user 表;

2.修改注冊方法

3.修改登陸驗(yàn)證方法

1和2在上文已經(jīng)提到了掰担,我們來看看 2汇陆,修改注冊方法:

1.大家都知道,django 自帶的注冊方法會給密碼進(jìn)行一定的加密處理带饱,后期修改密碼和登陸驗(yàn)證都需要

2.擴(kuò)展后的表可以算是一張自定義的新表毡代,同樣他還有User表的功能。

請看代碼:

def zhuce(request):
    # 接收到傳值
    password = 123
    # 像普通表一樣存儲
    user = UserInfo(username='abc', phone=123)
    # 調(diào)用User自帶的set_password方法對密碼進(jìn)行加密
    user.set_password(password)
    # 保存
    user.save()
    return HttpResponse('ok') 

這時(shí)候的注冊和django自帶的UserInfo.objects.creat_user() 結(jié)果是一樣的勺疼,只不過我們寫的方法會比較符合我們的需求月趟,可以用自定義字段進(jìn)行注冊。


新手寫文恢口,語句啰嗦,表述不清穷躁,還請多多諒解8纭!

如有大佬覺得哪里不對问潭,還請慷慨提建議T持睢!狡忙!


本文如有哪里不清楚或有其他問題梳虽,請聯(lián)系:1441576268@qq.com 添加QQ請注明來意。

本文初次發(fā)表于:python圈(Circle)

原文鏈接:擴(kuò)展django-User表灾茁,修改(自定義)django登錄驗(yàn)證和注冊方式

轉(zhuǎn)載請注明原文地址窜觉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市北专,隨后出現(xiàn)的幾起案子禀挫,更是在濱河造成了極大的恐慌,老刑警劉巖拓颓,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件语婴,死亡現(xiàn)場離奇詭異,居然都是意外死亡驶睦,警方通過查閱死者的電腦和手機(jī)砰左,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來场航,“玉大人缠导,你說我怎么就攤上這事∑烀觯” “怎么了酬核?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵蜜另,是天一觀的道長。 經(jīng)常有香客問我嫡意,道長举瑰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任蔬螟,我火速辦了婚禮此迅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘旧巾。我一直安慰自己耸序,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布鲁猩。 她就那樣靜靜地躺著坎怪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廓握。 梳的紋絲不亂的頭發(fā)上搅窿,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天,我揣著相機(jī)與錄音隙券,去河邊找鬼男应。 笑死,一個(gè)胖子當(dāng)著我的面吹牛娱仔,可吹牛的內(nèi)容都是我干的沐飘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼牲迫,長吁一口氣:“原來是場噩夢啊……” “哼耐朴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恩溅,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤隔箍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后脚乡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜒滩,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年奶稠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俯艰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锌订,死狀恐怖竹握,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辆飘,我是刑警寧澤啦辐,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布谓传,位于F島的核電站,受9級特大地震影響芹关,放射性物質(zhì)發(fā)生泄漏续挟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一侥衬、第九天 我趴在偏房一處隱蔽的房頂上張望诗祸。 院中可真熱鬧,春花似錦轴总、人聲如沸直颅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽功偿。三九已至,卻和暖如春往堡,著一層夾襖步出監(jiān)牢的瞬間脖含,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工投蝉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人征堪。 一個(gè)月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓瘩缆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佃蚜。 傳聞我的和親對象是個(gè)殘疾皇子庸娱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 這篇文章在博客園有出處的,是某位大神創(chuàng)作的谐算,然后自己為了研究用戶登錄注冊的問題熟尉,所以把它c(diǎn)opy到簡書上,希望可以...
    軒轅小愛閱讀 10,566評論 0 7
  • 4 創(chuàng)建一個(gè)社交網(wǎng)站 在上一章中洲脂,你學(xué)習(xí)了如何創(chuàng)建站點(diǎn)地圖和訂閱斤儿,并且為博客應(yīng)用構(gòu)建了一個(gè)搜索引擎。在這一章中恐锦,你...
    lakerszhy閱讀 2,190評論 0 7
  • 學(xué)習(xí)Django主要覺得該框架比較容易上手往果,還有Django-admin后臺方便使用,但是有些時(shí)候我們用Djang...
    橙子丨Sunty閱讀 10,273評論 4 24
  • 前端文件開發(fā)預(yù)覽 可以使用前端node.js 提供的服務(wù)器live-server作為前端開發(fā)服務(wù)器使用一铅。安裝nod...
    LiWei_9e4b閱讀 1,308評論 0 0
  • 一 他站在橋上已經(jīng)很久了陕贮,站到夕陽都已經(jīng)快要退去了。春天的風(fēng)吹動了他的衣角潘飘,他扶一扶眼鏡肮之,整一整衣領(lǐng)掉缺,拿出了一根煙...
    笑流蘇閱讀 288評論 0 0