1、Request
restframework提供了一个Request对象(rest_framework.request.Request)
Request对象继承了Django默认的HttpRequest对象,它最核心的功能就是请求数据都包含在request.data属性中,类似于Django的request.POST,但是request.data应用范围更广:
1)request.data:返回解析之后的请求体数据,类似于Django中标准的request.POST和request.FILES属性。
request.data包含了解析之后的文件和非文件数据,包含了对POST PUT PATCH请求方式解析后的数据,利用了REST Framework的parsers解析器,不仅支持表单类型数据,也支持json数据
2)request.query_params:
与Django标准的request.GET相同
2、Response
restframework提供了一个Response对象(rest_framework.response.Response), 它是TemplateResponse的一种
参数说明:
data:返回给前端的数据
status:状态码,默认200
template_name:模板名称,如果使用HTMLRenderer时需要指明
headers:用于存放响应头信息的字典
content_type:响应数据的content_type,通常无须传递此参数,REST Framework会根据前端请求所需类型数据来设置此参数
3、Status code
rest_framework.views.Status
反应了当前请求的成功与否的状态
4、API视图装饰器
Restframework的API视图 有两种实现方式:
一种是基于函数的:@api_view
一种是基于类的:APIView
1)@api_view
使用@api_view装饰器,使得我们此处的Request不在是Django标准的HttpRequest,而是restframework的Request。
默认情况下,只有GET请求会被接收,它也允许我们自己配置函数允许接收的请求类型
@api_view():默认只接收GET请求
@api_view(http_method_names=[‘GET‘]):指明接收的请求类型
@api_view([‘GET‘, ‘POST‘]):接收get post请求
@api_view
def Snippet_list(request):
if request.method=="GET":
...
pass
elif request.method == "POST":
...
pass
2)APIView
APIView是基于类的装饰器,显然,类视图更符合面向对象的原则,它支持GET POST PUT DELETE等请求类型,且各种类型的请求之间,有了更好的分离
class Snippet_list(APIView):
def get(self, request):
...
pass
def post(self, request):
...
pass
原文地址:https://www.cnblogs.com/fiona-zhong/p/9687638.html