05 请求与响应
REST框架的核心包括几个基本的构建模块
Request objects:扩展了常规
HttpRequest的Request对象提供了更灵活的请求解析。Request对象的核心功能是request.data属性,它与request.POST类似,但对于使用 Web API更为有用。request.POST只处理表单数据,只适用于POST方法request.data片任意数据 适用于POST/PUT/PATCH方法
Response objects:这是一种获取未渲染内容的TemplateResponse类型,并使用内容协商来确定返回给客户端的正确内容类型
Status codes:在视图中使用纯数字的HTTP code难以理解。而且如果错误代码出错,很容易被忽略。REST框架为
status模块中的每个状态代码提供了更明确的标识符。推荐替换django原生的状态代码。
wrapping APIView:REST框架提供了两个可用于编写API视图的包装器(wrappers)
@api_view:用于FBVAPIVIEW:用于CBV
Request``Response
使用以上组件,定义视图
from rest_framework import statusfrom rest_framework.decorators import api_viewfrom rest_framework.response import Responsefrom snippets.models import Snippetfrom snippets.serializers import SnippetSerializer@api_view(['GET', 'POST'])def snippet_list(request):"""列出所有的snippets,或者创建一个新的snippet。"""if request.method == 'GET':snippets = Snippet.objects.all()serializer = SnippetSerializer(snippets, many=True)return Response(serializer.data)elif request.method == 'POST':serializer = SnippetSerializer(data=request.data)if serializer.is_valid():serializer.save()return Response(serializer.data, status=status.HTTP_201_CREATED)return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Request
如果你正在做基于REST的web服务…你最好忽略
request.POST— Malcom Tredinnick, Django developers group
REST framework的Request类扩展了标准的HttpRequest,添加对REST framework的灵活请求解析和请求身份验证的支持。
REST framework的 Request 提供灵活的请求解析,允许你以与通常处理表单数据相同的方式使用JSON数据或者其他媒体类型处理请求。
request.data返回请求正文的解析内容。与原始的request.POST和request.FILES类似,并增加了以下特性:
- 它包括所有解析的崆,包括文件或者非文件输入
- 支持解析除
POST之外的HTTP方法的内容,这意味着你可以访问PUT/PATCH请求的内容。 - 支持REST framework灵活的请求解析,而不仅仅是表单数据。如,你可以心与处理传入表单数据相同的方式处理传入的JSON数据。
request.query_params 是request.GET的一个更准确的同义词
