Django REST Framework-函数视图

2023-04-24 10:35:11 浏览数 (1)

除了类视图之外,Django REST Framework还支持函数视图。函数视图是普通的Django视图函数,可以用于处理API请求。与类视图不同,函数视图没有任何类或方法可以重写。但是,您可以使用装饰器来添加认证和权限检查,以及其他功能。

以下是一个简单的函数视图的例子:

代码语言:javascript复制
from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(['GET'])
def hello_world(request):
    return Response({'message': 'Hello, world!'})

在这个例子中,我们使用@api_view装饰器来将一个普通的Django视图函数转换为API视图。我们将请求方法限制为GET,并返回一个包含消息的响应。

@api_view装饰器是一个很好的起点,因为它允许您在不使用类视图的情况下使用DRF的其余功能。您可以使用DRF的其他装饰器来添加其他功能,如认证、权限检查、缓存等。

以下是一些常用的DRF装饰器:

  • @authentication_classes(classes): 添加认证类。classes是认证类的列表,按优先级排序。
  • @permission_classes(classes): 添加权限类。classes是权限类的列表,按优先级排序。
  • @throttle_classes(classes): 添加节流类。classes是节流类的列表,按优先级排序。
  • @renderer_classes(classes): 添加渲染器类。classes是渲染器类的列表,按优先级排序。
  • @parser_classes(classes): 添加解析器类。classes是解析器类的列表,按优先级排序。
  • @cache_response(timeout, key_func=None, cache=None): 缓存响应。timeout是缓存时间(秒),key_func是一个函数,用于生成缓存键,cache是一个可用于缓存的缓存实例。
  • @api_view(http_method_names): 允许使用的HTTP方法。http_method_names是一个方法名称列表。

以下是一个使用装饰器的函数视图的示例:

代码语言:javascript复制
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

@api_view(['GET'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def secret_data(request):
    data = {'message': 'You have access to secret data!'}
    return Response(data)

在这个例子中,我们定义了一个名为secret_data的函数视图,并使用@api_view装饰器将其转换为API视图。我们使用@authentication_classes装饰器将TokenAuthentication添加到视图中,并使用@permission_classes装饰器将IsAuthenticated添加到视图中。这样,只有通过身份验证的用户才能访问这个视图。

0 人点赞