本篇介紹django的后臺管理,以及使用后臺默認的用戶賬號,實現用戶登錄身份驗證。


1、創建管理員賬戶

            python?manage.py?createsuperuser
          

輸入用戶名,郵箱,密碼

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第1張圖片

2、登錄管理頁面

            http://localhost:8000/admin
          

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第2張圖片

3、創建用戶組與用戶

創建用戶組,并且對用戶組授予權限。

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第3張圖片

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第4張圖片

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第5張圖片

創建用戶,劃入用戶組,并且啟用賬戶。

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第6張圖片

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第7張圖片

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

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第8張圖片

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第9張圖片

4、修改views.py

我們計劃調用django admin自帶的用戶管理與登錄認證,這樣就不需要自己重寫。

導入對應的包

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

然后編寫login_action函數

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

上述代碼,其實就是用前段頁面的POST動作獲取username與password,先認證用戶名密碼是否正確。如果正確,正面django用戶數據庫有此用戶。

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

如果用戶名密碼認證不通過,就依然跳轉回index.html登錄頁。

#注意記得將之前測試的login函數刪除了,還有原來index.html里面增加的測試代碼需要刪除。

5、修改urls

老規矩,增加了函數,必須到urls里面添加路由。

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

6、修改前端頁面

index.html的

,如果只設置method='post',表單提交的數據,默認是提交到index函數的。

現在需要手動指定將數據提交給login_action函數,需要增加action并且指向login_action函數。

            


7、數據庫手動修改數據

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

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第10張圖片

然后測試index.html輸入student1用戶名密碼,嘗試登錄驗證跳轉。發現用戶名密碼正確后,能夠成功跳轉。

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第11張圖片

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第12張圖片

問題是,如果我們記下來url,不輸入用戶名密碼,當前是可以直接訪問127.0.0.1:8000/stuinfo的,那么怎么強制必須要登錄了。

只需要在views里面,在stuinfo函數前面加上裝飾器@login_required即可。這樣就會強制必須要登錄后才能訪問頁面了。

              (request):
            


目前由于沒有做注銷功能,使用某個賬戶登錄后,如何注銷測試下一項呢?只能手動訪問127.0.0.1:8000/admin,注銷后再測試。

注銷后直接訪問127.0.0.1:8000/stuinf,發現已經頁面已經不能不登錄匿名訪問了。

【實戰演練】Python+Django網站開發系列07-django后臺管理與身份驗證_第13張圖片