91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django中的用戶身份驗證示例詳解

發布時間:2020-10-22 08:05:13 來源:腳本之家 閱讀:161 作者:THSSwzw 欄目:開發技術

前言

這次開發微信搶票程序中,普通用戶的身份是由微信管理的。當用戶通過微信公眾號(測試號)向后臺發消息時,微信會將用戶的身份標記為一個unique_id來識別,后端可以由此來判斷用戶身份。這種認證比較特殊,它不存在登陸、登出的操作。如果是一個普通的web應用,應該有用戶的登陸、登出操作,當用戶未經授權訪問某個URL的時候,后端應該拒絕這次請求,或者是重定向到登陸界面。

在這次作業中,因為需要一個后臺管理員來管理各種活動的創建和發布,因此也需要有用戶的身份認證操作。這次的后端是Django,試了一下發現Django實現了一套自己的身份驗證的API,用起來非常方便。

用戶創建與修改

眾所周知,Django中存儲數據的原型稱為Model,User就是Django中用戶的Model,不需要程序員在models.py中自己定義。它有username、password、email、first_name、last_name五個屬性。在Django中還有一個稱為superuser的用戶,它其實是User的一個特殊的子類,在本次微信搶票中,后臺管理員就是superuser。

普通User的創建是調用User中的create_user進行創建,而superuser的創建不是在代碼中,而是輸入python manage.py createsuperuser進行創建。

#普通用戶的創建
from django.contrib.auth.models import User
user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
user.last_name = 'Lennon'
user.save()

用戶登陸登出

在登陸時,使用authenticate的函數對用戶進行驗證,如果用戶名、密碼錯誤,該函數的返回值為None。此時嗲用login函數將request與該user綁定起來。login的結果是,以后每次的request,在request.user中總會存在用戶的信息,這是下一步我們進行權限認證的前提。用戶的退出就是調用logout(request)函數即可。

用戶權限

request.user.is_authenticated()

一般的情況下(比如在本次微信搶票中),只需要有兩種訪問可能。一個是用戶已登陸,可以訪問,一個是用戶未登陸,禁止訪問。因此我們用這個函數就足夠了。(我們確實是這么用的2333)

當然還有一種更簡單的用法——函數的裝飾器,因為我們用的是類做相應,因此不適合微信搶票程序,但是還是mark一下,因為確實太方便了。就是在函數的前面加上login_required()裝飾器,括號中可以填入如果未登陸應該重定向到哪個頁面。

但是在其它web應用中,我們需要不同的用戶組有不同的權限,這個時候Django提供了另外一個叫做permission的屬性。

首先,每個用戶都有一個group外鍵,可以給用戶分配在某些group中,然后可以通過group.permissions來修改group的permission列表。

在使用permission的時候,同樣可以使用裝飾器require_permission。

除此之外,還有一個值得提的地方:裝飾器user_passes_test(xxtest),可以自己編寫一個test函數來測試用戶是否可以訪問,test函數接收的參數為request.user

from django.contrib.auth.decorators import user_passes_test
​
def email_check(user):
  return user.email.endswith('@example.com')
​
@user_passes_test(email_check)
def my_view(request):
  ...

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漯河市| 永川市| 平湖市| 吉安县| 巨野县| 湘潭县| 瑞昌市| 宜黄县| 澄江县| 当雄县| 凯里市| 福清市| 岚皋县| 盈江县| 常山县| 永寿县| 长海县| 保定市| 鄱阳县| 黑山县| 北京市| 滨州市| 正阳县| 花莲县| 逊克县| 中山市| 县级市| 尉犁县| 黔西县| 思南县| 嫩江县| 奉贤区| 文山县| 佛冈县| 天门市| 彰化市| 万年县| 海原县| 霍山县| 旬阳县| 尉犁县|