Django Rest Framework调试发布和放置请求

Mir*_*lic 10 django django-debug-toolbar django-rest-framework

我使用DRF扩展来获取模型的se json列表,并且我可以使用debug-toolbarGET请求进行调试,但是我如何调试POSTPUT请求?

我有这个用于调试模式的设置:

INSTALLED_APPS += ('debug_toolbar',)

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

DEBUG_TOOLBAR_PATCH_SETTINGS = False
INTERNAL_IPS = (
    '127.0.0.1'
)
Run Code Online (Sandbox Code Playgroud)

现在,当我Intercept redirects在调试工具栏中尝试时,它不会显示我的工具栏POST.

Mir*_*lic 17

我发现django-silk调试DRF.

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


ccp*_*zza 5

如果您需要拦截请求/响应并应用您自己的处理,那么您可以按照此答案中的描述添加自定义混合。

但在最简单的场景中,假设您使用 python requests执行测试 POST 请求(或 PUT) :

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

然后你可以得到错误消息

print(response.text)
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,输出将包含您正在寻找的失败原因,例如'age' is required

curl您还可以从终端执行相同的操作:

curl -vv --header "Content-Type: application/json" \
    --request POST \
    --data '{"name":"dinsdale"}' http://localhost:8000/person/
Run Code Online (Sandbox Code Playgroud)


Fer*_*xTL 0

您无法在 DRF 可浏览 api 中拦截重定向,因为它是 ajax 并通过 javascript 调用。此外,由于 ajax 调用,工具栏也不会显示。作为解决方法,您可以debug_toolbar.middleware.DebugToolbarMiddleware#process_request在 ajax 调用中禁用工具栏的临时注释行:

    ...
    # Don't render the toolbar during AJAX requests.
    # if request.is_ajax():
    #     return
    ...
Run Code Online (Sandbox Code Playgroud)

重定向仍然不起作用,但工具栏将可见。