Django Rest frameworks: request.Post vs request.data?
django, django-rest-framework, python, rest
Solution
The docs cover this:
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.
The last two are the important ones. By using `request.data` throughout instead of `request.POST`, you're supporting both JSON and Form-encoded inputs (or whatever set of parsers you have configured), and you'll be accepting request content on `PUT` and `PATCH` requests, as well as for `POST`.
Is one more flexible?
Yes. `request.data` is more flexible.
Problem
The Django Rest Frameworks has this to say about `POST`, quoting a Django dev Requests If you're doing REST-based web service stuff ... you should ignore request.POST. — Malcom Tredinnick, Django developers group As not-so experienced web-developer, why is `request.POST` (standard) discouraged over `request.DATA` (non-standard)? Is one more flexible?