亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

怎么設置和驗證Django權限

發布時間:2020-07-27 15:19:38 來源:億速云 閱讀:273 作者:小豬 欄目:開發技術

這篇文章主要為大家展示了怎么設置和驗證Django權限,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

當創建一個Models, 在同步到數據庫里,django默認設置了三個權限 ,就是 add, change, delete權限。但是往往有時候,根本不夠用,此時我們可以自己寫一個腳本,來進行權限的設置.

根據DJango官方文檔解釋,權限都是與models有關系的,此時.如果想設置一個view,對于有權限的用戶進行放行,對于無權限的用戶進行限制.那么我們就可以著手來寫這個需求.

驗證權限的方法一般有兩種,一種是用@permission_required來進行驗證,第二中是用user.has_perm()在函數里進行驗證,通過返回的True或者False來進行下一步

同時我的稍微復雜一些,是在django中加入了第三方認證oauth3,并限制跨域訪問的資源.具體見我之前的文章.

具體步驟如下:

第一步:

設置跨域訪問資源范圍,如下:

CORS_URLS_REGEX = r'^/(o|api/oauth/).*$'  
#只允許跨域訪問url為/o/....或者/api/oauth/...的資源

第二步:

寫一個設置permission腳本,或者你自己創建一個model,然后migrate得到django默認提供的三個權限,當然,這過于繁瑣和單一,你也可以自定義permission,在你創建的model里添加Meta類,然后創建你的自定義permission.如下:

      class **Model():
        ....
        class Meta:
        permissions = (
          (can_read'', '查看'),
          (can_delete'', '刪除'),
        )

或者, 你可以自己寫一個創建permission的文件.這里,我的需求是根據用戶來限制是否訪問資源,直接在User上來進行permission設置,如下:

from django.contrib.auth.models import Permission, User
from django.contrib.contenttypes.models import ContentType
 
def run(codename, name):
  content_type = ContentType.objects.get_for_model(User)
  permission = Permission.objects.get_or_create(codename=codename, name=name, content_type=content_type)
  return permission

運行run即可創建指定codename的permission,這與用戶是綁定的.

第三步:    

驗證權限,最主要的有兩種方法,用裝飾器方法,或者在函數里用has_perm/has_perms,我這里使用裝飾器方法,當然.最開始我自己手寫了一個驗證裝飾器,后來發現,django有自帶的,也比較好用,直接在views函數錢@permission_required(perms)即可.

由于此處我用的是django的視通函數,無法直接在函數前加@permission_required(perms),需要用到如下方法,可以將函數裝飾器改為方法或類裝飾器的方法,django自帶的@method_decorator(decorator),

用法如下

class LimitView(ProtectedResourceView):
  @method_decorator(permission_required(per_list[0]))
  def get(self, request):
    ....

LimitView為我自己的視圖函數,繼承自oauth的ProtectedResourceView,作用是保護視圖函數不被授權用戶查看.permission_required參數為用戶需要擁有的權限,如果有,可以正常訪問,否則,會重定向到登錄頁面,或者你可以在此處自己指定轉向頁面.

需要注意的是使用@permission_required(perms)時request.user需有字段,否則會報錯.我這里沒有登錄也可以訪問授權是因為我使用了用戶允許的授權碼訪問,會直接在request中設置user字段為該access_token對應的user.

補充知識:django 校驗用戶是否有權限

views中判斷是否有權限:

{% if request.user.has_perm('app.權限名')%}
……
 {%endif%}

html中根據權限判斷控件是否顯示:

{% if perms.appname.codename%}
{% endif%}

切記:要想html中變量生效,必須傳入RequestContext,views.py中必須是render(request,'xx.html',{}),這個問題糾結很久。

以上就是關于怎么設置和驗證Django權限的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

桓仁| 鄂伦春自治旗| 龙口市| 阿克| 大竹县| 马关县| 兴仁县| 郴州市| 永川市| 浏阳市| 麟游县| 禄丰县| 无棣县| 青岛市| 阿城市| 迁安市| 汝州市| 武山县| 长乐市| 莫力| 柳林县| 修文县| 宝坻区| 钟祥市| 泸定县| 玛纳斯县| 嘉定区| 集贤县| 宜昌市| 蒙城县| 敦化市| 正蓝旗| 长岛县| 丰镇市| 阿城市| 乌鲁木齐县| 依安县| 蒙自县| 屏东县| 胶南市| 志丹县|