欢迎访问宙启技术站
智能推送

rest_framework.views中常用的视图装饰器及其作用

发布时间:2024-01-06 19:20:46

rest_framework.views模块中,有一些常用的视图装饰器,可以用于装饰基于函数或基于类的视图,以实现不同的功能。下面是常用的几个视图装饰器及其作用,并给出了相应的使用例子。

1. @api_view(['GET', 'POST'])

作用:将函数视图转化为可以处理Web API请求的APIView对象。

例子:

   from rest_framework.decorators import api_view
   from rest_framework.response import Response

   @api_view(['GET', 'POST'])
   def hello_world(request):
       if request.method == 'GET':
           return Response({'message': 'Hello, World!'})
       elif request.method == 'POST':
           name = request.data.get('name')
           return Response({'message': f'Hello, {name}!'})
   

2. @permission_classes([IsAuthenticated])

作用:指定视图需要的权限类。

例子:

   from rest_framework.decorators import api_view, permission_classes
   from rest_framework.response import Response
   from rest_framework.permissions import IsAuthenticated

   @api_view(['GET'])
   @permission_classes([IsAuthenticated])
   def secret_data(request):
       return Response({'message': 'This is secret data!'})
   

3. @authentication_classes([TokenAuthentication])

作用:指定视图需要的身份验证类。

例子:

   from rest_framework.decorators import api_view, authentication_classes
   from rest_framework.response import Response
   from rest_framework.authentication import TokenAuthentication

   @api_view(['GET'])
   @authentication_classes([TokenAuthentication])
   def protected_data(request):
       return Response({'message': 'This is protected data!'})
   

4. @throttle_classes([UserRateThrottle])

作用:指定视图请求速率限制类。

例子:

   from rest_framework.decorators import api_view, throttle_classes
   from rest_framework.response import Response
   from rest_framework.throttling import UserRateThrottle

   @api_view(['GET'])
   @throttle_classes([UserRateThrottle])
   def limited_data(request):
       return Response({'message': 'You can only access this data a limited number of times per minute.'})
   

5. @renderer_classes([JSONRenderer])

作用:指定视图需要使用的渲染器类。

例子:

   from rest_framework.decorators import api_view, renderer_classes
   from rest_framework.response import Response
   from rest_framework.renderers import JSONRenderer

   @api_view(['GET'])
   @renderer_classes([JSONRenderer])
   def data_json(request):
       data = {'message': 'This is data in JSON format.'}
       return Response(data)
   

除了上述装饰器,还有其他一些装饰器如@parser_classes@versioning_classes@schema等,也可以用于给视图添加更多的功能和约束。根据具体的需求,可以选择适合的装饰器来装饰视图函数或视图类。这些装饰器能够帮助简化开发过程,提高代码的可读性和可维护性。