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

溫馨提示×

溫馨提示×

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

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

Django Rest framework權限的詳細用法

發布時間:2020-09-15 03:54:58 來源:腳本之家 閱讀:194 作者:Title 欄目:開發技術

前言

我們都聽過權限,那么權限到底是做什么的呢.

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

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

==這些對某件事情決策的范圍和程度,我們叫做權限==,權限是我們在項目開發中經常用到的.

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

源碼剖析

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

Django Rest framework權限的詳細用法

我們點進去看看:

Django Rest framework權限的詳細用法

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

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

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

Django Rest framework權限的詳細用法

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

調用方法

在視圖中調用:

permission_classes = ["自定義的權限類", ]

全局調用:

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

權限的詳細用法

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

第一步 準備數據庫文件和數據

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)

數據如下:

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)

第二步 自定義一個權限組件

from rest_framework.permissions import BasePermission # 導入基礎的權限類


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

 message = "普通用戶無權訪問的數據"

 def has_permission(self, request, view):
 """
 注意:
 源碼中初始化時的順序是認證在前,權限在后,所以只要認證通過
 我們這里就可以使用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()), # 用于權限測試
]

第四步 views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from .auth import MyAuth # 導入自定義的認證組件
from .permission import MyPermission # 導入自定義的權限控制組件
from .models import UserInfo # 導入用戶信息表
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):
 """用于測試權限的視圖"""

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

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

好了,我們可以測試了.

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

Django Rest framework權限的詳細用法

然后復制返回的UUID,再去訪問權限測試頁面:

Django Rest framework權限的詳細用法

可見,返回的內容為普通用戶無權限.

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

Django Rest framework權限的詳細用法

然后復制返回的UUID,再去訪問權限測試頁面:

Django Rest framework權限的詳細用法

可見,返回的內容為管理員能訪問的數據.

好了,關于DRF的權限就到這里了.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

泸溪县| 巍山| 吴川市| 乌恰县| 合山市| 赤城县| 南和县| 新绛县| 岳西县| 炉霍县| 紫金县| 游戏| 天台县| 茶陵县| 石城县| 余江县| 儋州市| 东平县| 台南县| 恩平市| 谢通门县| 会昌县| 宁陕县| 武川县| 镇康县| 疏勒县| 壤塘县| 陆河县| 镇坪县| 盐亭县| 舒兰市| 咸阳市| 衡南县| 麻栗坡县| 宜春市| 桃江县| 吕梁市| 桃源县| 浑源县| 内丘县| 涟水县|