最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django權限設置及驗證方式

 更新時間:2020年05月13日 10:23:08   作者:guyunzh  
這篇文章主要介紹了Django權限設置及驗證方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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

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

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

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

具體步驟如下:

第一步:

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

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

第二步:

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

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

或者, 你可以自己寫一個創(chuàng)建permission的文件.這里,我的需求是根據(jù)用戶來限制是否訪問資源,直接在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即可創(chuàng)建指定codename的permission,這與用戶是綁定的.

第三步:

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

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

用法如下

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

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

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

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

views中判斷是否有權限:

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

html中根據(jù)權限判斷控件是否顯示:

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

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

參考django文檔:https://docs.djangoproject.com/en/2.1/topics/auth/default/#permissions

以上這篇Django權限設置及驗證方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python函數(shù)的兩種嵌套方法小結

    python函數(shù)的兩種嵌套方法小結

    這篇文章主要介紹了python函數(shù)的兩種嵌套方法小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01
  • Pytorch Dataset,TensorDataset,Dataloader,Sampler關系解讀

    Pytorch Dataset,TensorDataset,Dataloader,Sampler關系解讀

    這篇文章主要介紹了Pytorch Dataset,TensorDataset,Dataloader,Sampler關系,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Series和DataFrame使用簡單入門

    Series和DataFrame使用簡單入門

    這篇文章主要介紹了Series和DataFrame使用簡單入門,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • python讀取文件夾中圖片的圖片名并寫入excel表格

    python讀取文件夾中圖片的圖片名并寫入excel表格

    這篇文章介紹了使用python讀取文件夾中圖片的圖片名并寫入excel表格的方法。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • django 控制頁面跳轉的例子

    django 控制頁面跳轉的例子

    今天小編就為大家分享一篇django 控制頁面跳轉的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python操作xml文件示例

    python操作xml文件示例

    這篇文章主要介紹了python操作xml文件示例,需要的朋友可以參考下
    2014-04-04
  • Python dash-fastapi前后端搭建過程

    Python dash-fastapi前后端搭建過程

    項目中需要快速搭建一個前后端系統(tǒng),涉及到dash-fastapi架構的時候,對該架構的時候進行總結,本文主要總結的是對該架構的基本使用,后續(xù)再對該架構的項目源碼進行總結分析,感興趣的朋友一起看看吧
    2025-03-03
  • Python中導入模塊的幾種方式總結

    Python中導入模塊的幾種方式總結

    模塊就是用一堆的代碼實現(xiàn)了一些功能的代碼的集合,通常一個或者多個函數(shù)寫在一個.py文件里,下面這篇文章主要給大家介紹了關于Python中導入模塊的幾種方式,需要的朋友可以參考下
    2022-12-12
  • conda使用清華源設置channel的鏡像

    conda使用清華源設置channel的鏡像

    今天在下載OpenCV的時候發(fā)現(xiàn)清華的conda channel鏡像已經(jīng)不能用了,conda需要設置的源是anaconda的源,本來就來介紹一下在conda使用清華源設置channel的鏡像的方法,感興趣的可以了解一下
    2021-05-05
  • python GUI庫圖形界面開發(fā)之PyQt5信號與槽的高級使用技巧(自定義信號與槽)詳解與實例

    python GUI庫圖形界面開發(fā)之PyQt5信號與槽的高級使用技巧(自定義信號與槽)詳解與實例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5信號與槽的高級知識(自定義信號與槽)詳解與實例,需要的朋友可以參考下
    2020-03-03

最新評論

平罗县| 东兰县| 北海市| 漠河县| 宁晋县| 卢氏县| 清流县| 民权县| 西丰县| 中卫市| 建瓯市| 定安县| 华池县| 尉犁县| 阳泉市| 九江市| 奈曼旗| 永川市| 宜宾县| 金堂县| 思茅市| 丰宁| 尼木县| 梨树县| 仪征市| 安西县| 盱眙县| 黎川县| 沅陵县| 页游| 渑池县| 沅陵县| 卢湾区| 余庆县| 楚雄市| 宽城| 抚远县| 静安区| 石河子市| 武平县| 邯郸县|