本篇介紹django的后臺(tái)管理,以及使用后臺(tái)默認(rèn)的用戶賬號(hào),實(shí)現(xiàn)用戶登錄身份驗(yàn)證。


1、創(chuàng)建管理員賬戶

            python?manage.py?createsuperuser
          

輸入用戶名,郵箱,密碼

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第1張圖片

2、登錄管理頁(yè)面

            http://localhost:8000/admin
          

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第2張圖片

3、創(chuàng)建用戶組與用戶

創(chuàng)建用戶組,并且對(duì)用戶組授予權(quán)限。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第3張圖片

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第4張圖片

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第5張圖片

創(chuàng)建用戶,劃入用戶組,并且啟用賬戶。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第6張圖片

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第7張圖片

注銷,使用用戶賬戶登錄嘗試。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第8張圖片

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第9張圖片

4、修改views.py

我們計(jì)劃調(diào)用django admin自帶的用戶管理與登錄認(rèn)證,這樣就不需要自己重寫。

導(dǎo)入對(duì)應(yīng)的包

            django.http?HttpResponseRedirect
django.contrib?auth
django.contrib.auth.decorators?login_requiredpermission_required
          

然后編寫login_action函數(shù)

            (request):
????request.method?==?:
????????username?=?request.POST.get()???????????????????????????????????????#從前端的POST請(qǐng)求獲取用戶名
????????password?=?request.POST.get()???????????????????????????????????????#從前端的POST請(qǐng)求獲取密碼
????????userinfo?=?auth.authenticate(=username=password)????????????#利用django?admin的auth模塊認(rèn)證鑒權(quán)
????????userinfo?:
????????????auth.login(requestuserinfo)????????????????????????????#利用auth模塊獲取當(dāng)前已登錄的用戶session
????????????request.session[]?=?username
????????????stuinfo?=?student.objects.filter(=username)?????#判斷認(rèn)證成功的用戶是否在學(xué)生表里面存在,是則是學(xué)生,否則是老師
????????????stuinfo:
????????????????HttpResponseRedirect()?????????????#跳轉(zhuǎn)到老師個(gè)人信息頁(yè)
????????????:
????????????????HttpResponseRedirect()?????????????#跳轉(zhuǎn)到老師個(gè)人信息頁(yè)
????????:
????????????render_to_response(())????????#用戶名密碼不正確,跳轉(zhuǎn)回index.html頁(yè)
          

上述代碼,其實(shí)就是用前段頁(yè)面的POST動(dòng)作獲取username與password,先認(rèn)證用戶名密碼是否正確。如果正確,正面django用戶數(shù)據(jù)庫(kù)有此用戶。

再判斷該用戶是否存在student表里面,如果是,就是學(xué)生,則利用HttpResponseRedirect重定向頁(yè)面到學(xué)生個(gè)人信息頁(yè)(stuinfo),如果不存在student表里面,那么肯定是老師,就跳轉(zhuǎn)tchinfo的老師個(gè)人信息頁(yè)。

如果用戶名密碼認(rèn)證不通過(guò),就依然跳轉(zhuǎn)回index.html登錄頁(yè)。

#注意記得將之前測(cè)試的login函數(shù)刪除了,還有原來(lái)index.html里面增加的測(cè)試代碼需要?jiǎng)h除。

5、修改urls

老規(guī)矩,增加了函數(shù),必須到urls里面添加路由。

            url(r'^login_action/',?login_action),
          

6、修改前端頁(yè)面

index.html的

,如果只設(shè)置method='post',表單提交的數(shù)據(jù),默認(rèn)是提交到index函數(shù)的。

現(xiàn)在需要手動(dòng)指定將數(shù)據(jù)提交給login_action函數(shù),需要增加action并且指向login_action函數(shù)。

            


7、數(shù)據(jù)庫(kù)手動(dòng)修改數(shù)據(jù)

我們將django admin里面創(chuàng)建的用戶,student1\student2分別手動(dòng)添加到student表,以及teacher1和teacher2手動(dòng)添加到teacher表。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第10張圖片

然后測(cè)試index.html輸入student1用戶名密碼,嘗試登錄驗(yàn)證跳轉(zhuǎn)。發(fā)現(xiàn)用戶名密碼正確后,能夠成功跳轉(zhuǎn)。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第11張圖片

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第12張圖片

問(wèn)題是,如果我們記下來(lái)url,不輸入用戶名密碼,當(dāng)前是可以直接訪問(wèn)127.0.0.1:8000/stuinfo的,那么怎么強(qiáng)制必須要登錄了。

只需要在views里面,在stuinfo函數(shù)前面加上裝飾器@login_required即可。這樣就會(huì)強(qiáng)制必須要登錄后才能訪問(wèn)頁(yè)面了。

              (request):
            


目前由于沒(méi)有做注銷功能,使用某個(gè)賬戶登錄后,如何注銷測(cè)試下一項(xiàng)呢?只能手動(dòng)訪問(wèn)127.0.0.1:8000/admin,注銷后再測(cè)試。

注銷后直接訪問(wèn)127.0.0.1:8000/stuinf,發(fā)現(xiàn)已經(jīng)頁(yè)面已經(jīng)不能不登錄匿名訪問(wèn)了。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開(kāi)發(fā)系列07-django后臺(tái)管理與身份驗(yàn)證_第13張圖片