日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rest_framework07:权限/频率/过滤组件/排序/异常处理封装Response对象

發布時間:2023/12/4 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rest_framework07:权限/频率/过滤组件/排序/异常处理封装Response对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

權限

寫一個類,繼承BasePermission,如果通過返回True,否則False

這里需要配合認證使用,否則沒有user_type屬性。

from rest_framework.permissions import BasePermissionclass UserPermission(BasePermission):def has_permission(self, request, view):# 不是超級用戶不能訪問# 如果認證已經通過了, request 內勇敢有user對象。# 當前登錄用戶user = request.userif user.user_type == 1:return Trueelse:return False

局部使用

在視圖類添加

class TestView(APIView):permission_classes = [app_auth.UserPermission]

全局使用

在配置文件添加

REST_FRAMEWORK={'DEFAULT_PERMISSION_CLASSES':['app_authentication.app_auth.UserPermission',] }

局部禁用

class TestView(APIView):permission_classes = []

內置頻率

全局配置

未登錄用戶限制

REST_FRAMEWORK={'DEFAULT_THROTTLE_CLASSES': ('rest_framework.throttling.AnonRateThrottle',),'DEFAULT_THROTTLE_RATES': {'anon': '3/m',}

過濾組件

組件是django的,放在rest framework使用

1.安裝

pip install django-filter

2.注冊

INSTALLED_APPS = [...'django_filters', # 需要注冊應用, ]

3.配置

全局配置為例

REST_FRAMEWORK = {...'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',) } from rest_framework.generics import ListAPIView from app01.models import Book from app_authentication.ser import BookModelSerializerclass BookView(ListAPIView):queryset = Book.objects.all()serializer_class = BookModelSerializerfilter_fields = ('name', 'price')

訪問:http://127.0.0.1:8000/app_authentication/bookview/?price=22.10

排序

from rest_framework.filters import OrderingFilter class Book2View(ListAPIView):queryset = Book.objects.all()serializer_class = BookModelSerializer# 如果有局部過濾功能,在列表添加filter_backends = [OrderingFilter]ordering_fields=('id','price')

訪問:

倒序:http://127.0.0.1:8000/app_authentication/book2view/?ordering=-price

正序:http://127.0.0.1:8000/app_authentication/book2view/?ordering=price

異常處理

1.統一拋出固定格式錯誤信息

2.記日志

自定義異常方法,替換全局使用

# 自定義異常 from rest_framework.views import exception_handler from rest_framework.response import Response from rest_framework import status def my_exception_handler(exc,context):response=exception_handler(exc,context)# response 兩種情況# None drf 沒有處理# Response 對象,django處理,但不符合需求print(type(exc))if not response: # 非空if isinstance(exc,ZeroDivisionError):return Response(data={'status':777,'msg':'除以0錯誤'+str(exc)},status=status.HTTP_400_BAD_REQUEST)return Response(data={'status': 999, 'msg': str(exc)}, status=status.HTTP_400_BAD_REQUEST)else:return Response(data={'status': 888, 'msg': response.data.get('detail')}, status=status.HTTP_400_BAD_REQUEST)

settings.py

REST_FRAMEWORK={...'EXCEPTION_HANDLER':'app_authentication.app_auth.my_exception_handler' }

封裝Response對象

class APIResponse(Response):def __init__(self,code=100,msg='成功',data=None,status=None,headers=None,**kwargs):dic={'code':code,'msg':msg}if data:dic={'code':code,'msg':msg,'data':data}# 可以多添加參數dic.update(kwargs)super().__init__(data=dic,status=status,headers=headers)

使用

from app_authentication.app_auth import APIResponse class TestView4(APIView):def get(self,request,*args,**kwargs):return APIResponse(data={"nane":'abc'},token="sldjfl",aa="123123")# return APIResponse(data={"nane":'abc'}) # return APIResponse(token="sldjfl",aa="123123")

總結

以上是生活随笔為你收集整理的rest_framework07:权限/频率/过滤组件/排序/异常处理封装Response对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。