DRF中的request.data和DRF中的serializers.data有什么区别?
当我在DRF中编写基于函数的视图时,我会像-
一样使用它们CustomJS
和
elif request.method == 'POST':
serializer = datesSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
但是找不到它们的区别以及在代码中使用它们的区别。
答案 0 :(得分:2)
request.data似乎是生鸡蛋,可能不好吃,并且包含有关请求的其他信息。根据序列化程序的设置,Serializer.data类似于煮熟的鸡蛋盘。
然后request.data将用作序列化器的输入。如果在检查序列化程序的有效性之后请求数据有效,则可以保存序列化程序以创建对象实例。如果不是,则序列化程序无效。如果所有这些步骤均成功,则可以访问为格式化字典的serializer.data。
这是DRF中request data的定义。
request.data returns the parsed content of the request body. This is similar to the standard request.POST and request.FILES attributes except that:
It includes all parsed content, including file and non-file inputs.
It supports parsing the content of HTTP methods other than POST, meaning that you can access the content of PUT and PATCH requests.
It supports REST framework's flexible request parsing, rather than just supporting form data. For example you can handle incoming JSON data in the same way that you handle incoming form data.
For more details see the parsers documentation.
这是request.data的示例
{
"csrfmiddlewaretoken":[
"RrwwZyZCmEElmGG16muxEopwXbRZDsARYcDjraIC1kmcjEux3OIOZoeG7XUSmL4V"
],
"email":[
"myqepuzez@mailinator.com"
],
"first_name":[
"Roary"
],
"last_name":[
"Daugherty"
],
"password":[
"In quam qui magni re"
],
"phone":[
"+1 (542) 262-5207"
],
"username":[
"tikit"
]
}
以及序列化器数据的示例:
{
"id":3,
"group_ids":[
],
"role_ids":[
],
"email":"myqepuzez@mailinator.com",
"first_name":"Roary",
"is_active":False,
"last_name":"Daugherty",
"phone":"+1 (542) 262-5207",
"username":"tikit"
}
答案 1 :(得分:1)
request.data
是作为request
对象的一部分而来的数据。
REST框架引入了一个Request对象,该对象扩展了常规对象 HttpRequest,并提供更灵活的请求解析。核心 Request对象的功能是request.data属性, 与request.POST类似,但是对使用Web更为有用 API。
https://www.django-rest-framework.org/tutorial/2-requests-and-responses/#request-objects
位置
serializer.data
是已由序列化程序解析的数据。
返回传出的原始表示形式
https://www.django-rest-framework.org/api-guide/serializers/#baseserializer
答案 2 :(得分:1)
在使用 Rest API 时,我们在“请求”中接收来自客户端的数据,当我们打印 request.data
时,它将打印客户端提交的所有信息。
serializers.data
主要用于发送给客户端或最终用户的数据。有时我们的数据库有一些值的排列方式使得它们不是 json 可序列化的(假设我们不能将它们发送到客户端),因此序列化器是将数据转换为可以传输到客户。
由序列化程序解析的数据只不过是以准备发送给客户端的形式排列的数据。