繼續(xù)上一篇,我們?cè)诶^續(xù)完成其他頁面設(shè)置之前,先把老師登錄后的頁面給創(chuàng)建出來,并且學(xué)生與老師不能互訪門戶,以及實(shí)現(xiàn)注銷功能。


回到【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開發(fā)系列02-Django完整開發(fā)環(huán)境部署,對(duì)于老師頁面,具有以下模塊。

1、需求分析

老師登錄后頁面包括如下功能:

1)個(gè)人信息:登錄后顯示老師個(gè)人信息,以及自己需要授課的課程名、上課時(shí)間、上課地點(diǎn)。

2)成績錄入:可以查看自己授課的課程下面的學(xué)生,并且可以錄入成績,成績僅能為0~100分,超出范圍會(huì)提示無效,可以多次修改成績。

3)修改密碼:修改用戶密碼

4)注銷:注銷后自動(dòng)返回登錄頁面

其中注銷可以與學(xué)生的注銷共用,但是修改密碼不行,因?yàn)辄c(diǎn)擊修改密碼頁面后,學(xué)生的修改密碼頁面引用的是BASE02的導(dǎo)航頁,如果老師門戶的導(dǎo)航頁是BASE03,而修改密碼頁面共用,在老師門戶點(diǎn)擊“修改密碼”之后,就會(huì)跳轉(zhuǎn)到了BASE02頁去了,會(huì)出現(xiàn)BUG。

2、代碼開發(fā)

因此現(xiàn)在需要先創(chuàng)建BASE03,BASE03可以在BASE02基礎(chǔ)上復(fù)制粘貼修改,修改標(biāo)簽與href后面跳轉(zhuǎn)的頁面

            {%?.==?%}?{%?%}?個(gè)人信息{%?.==?%}?{%?%}?成績錄入{%?.==?%}?{%?%}?修改密碼注銷
          

然后創(chuàng)建老師個(gè)人信息、成績錄入,老師修改密碼3個(gè)html頁面,并且在view里面

            (request):
????render_to_response(())
          
            (request):
????render_to_response(())
          
            (request):
????render_to_response(())
          

國際慣例,在views里面添加函數(shù),在urls里面添加路由。

            url(enterscore)url(tmopasswd)url(tchinfo)
          

然后訪問127.0.0.1:8000/index,用老師賬戶登錄看看是否能夠成功跳轉(zhuǎn)。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開發(fā)系列08-django門戶互訪控制與注銷、修改密碼_第1張圖片

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開發(fā)系列08-django門戶互訪控制與注銷、修改密碼_第2張圖片

剩下需要做兩個(gè)事情:

1、注銷:

添加注銷的view函數(shù),

            (request):
????auth.logout(request)
????HttpResponseRedirect()
          

增加urls路由:

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

BASE02、03的注銷標(biāo)簽綁定url

            注銷
          

然后刷新,重新登錄,點(diǎn)擊注銷按鈕,發(fā)現(xiàn)可以跳轉(zhuǎn)回index.html登錄頁。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開發(fā)系列08-django門戶互訪控制與注銷、修改密碼_第3張圖片

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開發(fā)系列08-django門戶互訪控制與注銷、修改密碼_第4張圖片

2、限制學(xué)生門戶的所有頁面不要給老師用戶登錄,老師門戶所有頁面

這個(gè)需要再在每個(gè)頁面前面增加裝飾器,判定登錄賬號(hào)的權(quán)限,來看看是否有權(quán)限進(jìn)入頁面。permission_required后面填寫之前用戶組給予了的權(quán)限。

每個(gè)頁面都需要加這個(gè)@permission_required裝飾器。不同門戶的頁面添加學(xué)生或者老師的權(quán)限要求。

            (==)
(request):
????render_to_response(())
          
            (==)
(request):
????data?=?student.objects.all()
????render_to_response(())
          


測試:

不登錄,直接訪問頁面url如127.0.0.1:8000/queryscore,發(fā)現(xiàn)無法訪問,報(bào)錯(cuò)如下:

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開發(fā)系列08-django門戶互訪控制與注銷、修改密碼_第5張圖片

使用老師賬號(hào)登錄,直接訪問url127.0.0.1:8000/queryscore,顯示403 無權(quán)限訪問。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開發(fā)系列08-django門戶互訪控制與注銷、修改密碼_第6張圖片

使用學(xué)生賬號(hào)從index登錄,然后正常訪問queryscore頁面,訪問正常。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開發(fā)系列08-django門戶互訪控制與注銷、修改密碼_第7張圖片


3、修改密碼頁面直接引用django admin的修改密碼

編輯mopasswd與tmopasswd.html,我們用iframe子框架來在我們的頁面里面嵌套django admin自帶的密碼修改。

            {%?%}
????::{%?%}
          

然后修改views里面的函數(shù),獲取當(dāng)前登錄用戶session。

            (request):
????username?=?request.session.get()
????render_to_response(())
          
            (request):
????username?=?request.session.get()
????render_to_response(())
          

查看效果,發(fā)現(xiàn)iframe大小不夠,再回去手動(dòng)調(diào)整iframe的width與height即可。

【實(shí)戰(zhàn)演練】Python+Django網(wǎng)站開發(fā)系列08-django門戶互訪控制與注銷、修改密碼_第8張圖片


回顧:

1、我們實(shí)現(xiàn)了使用django admin自帶的用戶創(chuàng)建功能創(chuàng)建用戶;

2、實(shí)現(xiàn)了index與后臺(tái)數(shù)據(jù)庫交互進(jìn)行用戶認(rèn)證鑒權(quán)(使用django admin自帶的auth模塊),實(shí)現(xiàn)了登錄認(rèn)證效果。

3、實(shí)現(xiàn)了學(xué)生登錄通過后重定向到學(xué)生門戶,老師登錄通過后重定向到老師門戶。

4、實(shí)現(xiàn)了注銷功能。

5、未登錄無法直接訪問所有子頁面。

6、學(xué)生無法訪問老師門戶任何頁面,同樣老師無法訪問學(xué)生門戶任何頁面,即使記住了url直接訪問。

7、實(shí)現(xiàn)了修改密碼。

至此,靜態(tài)頁面,導(dǎo)航欄,用戶登錄驗(yàn)證,注銷,修改密碼,防止未登錄/無權(quán)限的用戶訪問頁面等功能都已經(jīng)實(shí)現(xiàn)了。

下一篇開始,主要就剩下前端與后端與數(shù)據(jù)庫的交互 增、刪、改 了(查已經(jīng)做了)。