Django Rest Framework debug post and put requests

If you need to intercept the request/response and apply your own processing then you can add your custom mixin as described in this answer.

But in the most trivial scenario, given that you do a test POST request (or PUT), for example, with python requests:

import requests
response = requests.post('http://localhost:8000/person', json={"name": "dinsdale"})

Then you can get the error message with

print(response.text)

In most cases the output will contain the failure reason that you were looking for, e.g. 'age' is required.

You can also do the same thing with curl from a terminal:

curl -vv --header "Content-Type: application/json" \
    --request POST \
    --data '{"name":"dinsdale"}' http://localhost:8000/person/

When debugging interactively on a local machine, I like to examine the request data by breaking in the relevant put() or post() method in rest_framework.generics.

For quick local debugging of POST or PUT validation errors (e.g. in case of http status 400 issues), I like to break at the end of Field.run_validators() in rest_framework.fields and examine the error messages there.