欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django Rest framework權(quán)限的詳細用法

 更新時間:2019年07月25日 14:54:00   作者:Title  
這篇文章主要介紹了Django Rest framework權(quán)限的詳細用法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

我們都聽過權(quán)限,那么權(quán)限到底是做什么的呢.

我們都有博客,或者去一些論壇,一定知道管理員這個角色,

比如我們申請博客的時候,一定要向管理員申請,也就是說管理員會有一些特殊的權(quán)利,是我們沒有的.

==這些對某件事情決策的范圍和程度,我們叫做權(quán)限==,權(quán)限是我們在項目開發(fā)中經(jīng)常用到的.

本文將詳細講述DRF框架為我們提供的權(quán)限組件的使用方法.

源碼剖析

DRF的版本控制、認證、權(quán)限、頻率組件都在initial方法里初始化.


我們點進去看看:

其實我們版本、認證、權(quán)限、頻率控制走的源碼流程大致相同.

==我們的權(quán)限類中一定要有has_permission方法——框架為我們提供的鉤子.==

我們再來看看rest_framework.permissions文件中存放的框架為我們提供的所有權(quán)限的方法:

==注意圖中的BasePermission類,這個類是框架為我們提供的基礎(chǔ)權(quán)限類,我們自定義的權(quán)限類都要繼承此類.==

調(diào)用方法

在視圖中調(diào)用:

permission_classes = ["自定義的權(quán)限類", ]

全局調(diào)用:

REST_FRAMEWORK = {
 # 配置全局認證
 'DEFAULT_AUTHENTICATION_CLASSES': ["指定自定義的權(quán)限類", ]
}

權(quán)限的詳細用法

請結(jié)合【DRF認證組件詳細用法】此文獻中的自定義認證類來閱讀如下步驟.

第一步 準備數(shù)據(jù)庫文件和數(shù)據(jù)

from django.db import models

class UserInfo(models.Model):
 name = models.CharField(max_length=32)
 pwd = models.CharField(max_length=32)
 token = models.UUIDField(null=True, blank=True)
 user_type = ((1, "普通用戶"), (2, "管理員"))
 type = models.IntegerField(choices=user_type, default=1)

數(shù)據(jù)如下:

mysql> select * from blog_userinfo;
+----+-----------+-----------+------+-------+
| id | name | pwd | type | token |
+----+-----------+-----------+------+-------+
| 1 | 花千骨 | huaqiangu | 1 | NULL |
| 2 | 錦覓 | jinmi | 2 | NULL |
+----+-----------+-----------+------+-------+
2 rows in set (0.00 sec)

第二步 自定義一個權(quán)限組件

from rest_framework.permissions import BasePermission # 導(dǎo)入基礎(chǔ)的權(quán)限類


class MyPermission():
 """必備的屬性和方法,基本固定的邏輯"""

 message = "普通用戶無權(quán)訪問的數(shù)據(jù)"

 def has_permission(self, request, view):
 """
 注意:
 源碼中初始化時的順序是認證在前,權(quán)限在后,所以只要認證通過
 我們這里就可以使用request.user拿到用戶信息,request.auth拿到用戶對象
 """
 # 獲取認證控制的返回值
 print("用戶名:" request.user)
 user_obj = request.auth
 if user_obj.type == 1:
 return False # 普通用戶
 return True # 管理員

第三步 urls.py

from django.conf.urls import url
from blog.views import LoginView, TestPermissionView

urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^login/$', LoginView.as_view()), # 用于登陸
 url(r'^test_permission/$', TestPermissionView.as_view()), # 用于權(quán)限測試
]

第四步 views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from .auth import MyAuth # 導(dǎo)入自定義的認證組件
from .permission import MyPermission # 導(dǎo)入自定義的權(quán)限控制組件
from .models import UserInfo # 導(dǎo)入用戶信息表
import uuid # 用于生成uuid


class LoginView(APIView):
 """用于登陸驗證并生成UUID的視圖"""

 def post(self, request):
 name = request.data.get('name')
 pwd = request.data.get('pwd')
 user_obj = UserInfo.objects.filter(name=name, pwd=pwd).first()
 if user_obj:
 u4 = uuid.uuid4() # 生成uuid4
 user_obj.token = u4
 user_obj.save()
 return Response(str(u4))
 return Response("用戶名或密碼錯誤")


class TestPermissionView(APIView):
 """用于測試權(quán)限的視圖"""

 # 在視圖中增加如下屬性,即表明此視圖要走如下組件的邏輯
 authentication_classes = [MyAuth, ] # 自定義的認證組件
 permission_classes = [MyPermission, ] # 權(quán)限控制組件

 def get(self, request):
 return Response("這里是管理員能訪問的數(shù)據(jù)")

好了,我們可以測試了.

我們先登陸一個普通用戶:


然后復(fù)制返回的UUID,再去訪問權(quán)限測試頁面:


可見,返回的內(nèi)容為普通用戶無權(quán)限.

我們再來登陸一個管理員:


然后復(fù)制返回的UUID,再去訪問權(quán)限測試頁面:


可見,返回的內(nèi)容為管理員能訪問的數(shù)據(jù).

好了,關(guān)于DRF的權(quán)限就到這里了.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python字符串反轉(zhuǎn)的四種方法詳解

    python字符串反轉(zhuǎn)的四種方法詳解

    這篇文章主要介紹了python字符串反轉(zhuǎn)的四種詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • python搭建簡易服務(wù)器分析與實現(xiàn)

    python搭建簡易服務(wù)器分析與實現(xiàn)

    本文將介紹python搭建簡易服務(wù)器實現(xiàn)步驟,需要了解的朋友可以參考下
    2012-12-12
  • python原始套接字編程示例分享

    python原始套接字編程示例分享

    在實驗中需要自己構(gòu)造單獨的HTTP數(shù)據(jù)報文,而使用SOCK_STREAM進行發(fā)送數(shù)據(jù)包,需要進行完整的TCP交互。因此想使用原始套接字進行編程,直接構(gòu)造數(shù)據(jù)包,并在IP層進行發(fā)送,即采用SOCK_RAW進行數(shù)據(jù)發(fā)送。使用SOCK_RAW的優(yōu)勢是,可以對數(shù)據(jù)包進行完整的修改,可以處理IP層上的所有數(shù)據(jù)包,對各字段進行修改,而不受UDP和TCP的限制。
    2014-02-02
  • Python實現(xiàn)的用戶登錄系統(tǒng)功能示例

    Python實現(xiàn)的用戶登錄系統(tǒng)功能示例

    這篇文章主要介紹了Python實現(xiàn)的用戶登錄系統(tǒng)功能,涉及Python流程控制及字符串判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • 使用PyQt5實現(xiàn)一個鼠標連點器

    使用PyQt5實現(xiàn)一個鼠標連點器

    這篇文章主要為大家詳細介紹了如何使用PyQt5實現(xiàn)一個鼠標連點器,從而對QVBoxLayout、QHBoxLayout和QStackedWidget進行一個回顧復(fù)習(xí),需要的可以參考一下
    2023-12-12
  • Python中經(jīng)常使用的代碼片段

    Python中經(jīng)常使用的代碼片段

    大家好,本篇文章主要講的是Python中經(jīng)常使用的代碼片段,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 大語言模型的開發(fā)利器langchainan安裝使用快速入門學(xué)習(xí)

    大語言模型的開發(fā)利器langchainan安裝使用快速入門學(xué)習(xí)

    這篇文章主要為大家介紹了大語言模型的開發(fā)利器langchain安裝使用快速入門學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 如何使用Python進行PDF圖片識別OCR

    如何使用Python進行PDF圖片識別OCR

    這篇文章主要介紹了如何使用Python進行PDF圖片識別OCR,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • Python使用裝飾器模擬用戶登陸驗證功能示例

    Python使用裝飾器模擬用戶登陸驗證功能示例

    這篇文章主要介紹了Python使用裝飾器模擬用戶登陸驗證功能,結(jié)合登錄驗證實例形式分析了裝飾器的簡單使用技巧,需要的朋友可以參考下
    2018-08-08
  • python?memory_profiler庫生成器和迭代器內(nèi)存占用的時間分析

    python?memory_profiler庫生成器和迭代器內(nèi)存占用的時間分析

    這篇文章主要介紹了python?memory_profiler庫生成器和迭代器內(nèi)存占用的時間分析,文章圍繞主題展開詳細的內(nèi)容介紹,感興趣的小伙伴可以參考一下
    2022-06-06

最新評論