Django Rest Framework debug post and put requests

[亡魂溺海] 提交于 2021-02-07 05:17:53

问题


I use DRF extension to se json list for model, and there i can debug with debug-toolbar that GET request, but how can i debug POST and PUT requests?

I have this for settings in debug mode:

INSTALLED_APPS += ('debug_toolbar',)

MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)

DEBUG_TOOLBAR_PATCH_SETTINGS = False
INTERNAL_IPS = (
    '127.0.0.1'
)

Now, when i try with Intercept redirects in debug-toolbar, it doesn't show me toolbar when i do POST.


回答1:


I found django-silk for debugging DRF.

https://github.com/django-silk/silk/




回答2:


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/



回答3:


You can not intercept redirects in DRF browsable api because it is ajax and called via javascript. Also the toolbar is not shown because of ajax call. As workaround you could temporary comment lines in debug_toolbar.middleware.DebugToolbarMiddleware#process_request that disables toolbar in ajax call:

    ...
    # Don't render the toolbar during AJAX requests.
    # if request.is_ajax():
    #     return
    ...

Redirects still would not work, but toolbar would be visible.




回答4:


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.



来源:https://stackoverflow.com/questions/39287609/django-rest-framework-debug-post-and-put-requests

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!