request.data в DRF v / s serializers.data в DRF - PullRequest
2 голосов
/ 29 января 2020

В чем разница между request.data в DRF и serializers.data в DRF.

Когда я пишу представление на основе функций в DRF, я использую оба из них, как -

        elif request.method == 'POST':  

        serializer = datesSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()   

и,

        startdate = serializer.data['startdate']
        enddate = serializer.data['enddate']

Но не смог найти разницу в их и разница по использованию их в коде.

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

request.data выглядит сырым яйцом, которое может быть не вкусным и содержит дополнительную информацию о запросе. Serializer.data похож на приготовленное яйцо di sh в зависимости от настроек вашего сериализатора.

И request.data будет использоваться в качестве входных данных для сериализатора. Если данные запроса действительны после проверки валидации сериализатора, то сериализатор может быть сохранен для создания экземпляра объекта. Если нет, сериализатор недействителен. Если все эти процедуры выполнены успешно, вы можете получить доступ к serializer.data, который является отформатированным словарем.

Вот определение данных запроса в DRF.

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 голос
/ 29 января 2020

request.data - это данные, поступившие как часть объекта request.

Платформа REST представляет объект Request, расширяющий обычный запрос HttpRequest, и обеспечивает более гибкий анализ запросов. Основная функциональность объекта Request - это атрибут request.data, который похож на request.POST, но более полезен для работы с веб-API.

https://www.django-rest-framework.org/tutorial/2-requests-and-responses/#request -объекты

Принимая во внимание, что

serializer.data - это данные, которые уже были проанализированы сериализатором.

Возвращает исходящее примитивное представление

https://www.django-rest-framework.org/api-guide/serializers/#baseserializer

Ссылка: request.data в DRF против request.body в Django

...