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

Django Rest Framework debug post and put requests

我使用drf扩展来对模型使用se json列表,在那里我可以用debug-toolbar调试GET请求,但是我如何调试POSTPUT请求?

在调试模式下,我有此设置:

1
2
3
4
5
6
7
8
INSTALLED_APPS += ('debug_toolbar',)

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

DEBUG_TOOLBAR_PATCH_SETTINGS = False
INTERNAL_IPS = (
    '127.0.0.1'
)

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


我发现django-silk用于调试drf。

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


如果您需要截获请求/响应并应用自己的处理,那么您可以添加自定义的mixin,如此答案中所述。

但在最简单的场景中,假设您使用Python请求执行测试后请求(或Put):

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

然后您可以使用

1
print(response.text)

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

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

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


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

1
2
3
4
5
    ...
    # Don't render the toolbar during AJAX requests.
    # if request.is_ajax():
    #     return
    ...

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