除了类视图之外,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添加到视图中。这样,只有通过身份验证的用户才能访问这个视图。