Django Rest Framework 调试 post 并提出请求

Django Rest Framework debug post and put requests

我使用 DRF 扩展来为模型选择 json 列表,在那里我可以使用 debug-toolbar 调试 GET 请求,但是我如何调试 POSTPUT 个请求?

我在调试模式下有这个设置:

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/

您无法拦截 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
    ...

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

如果您需要拦截 request/response 并应用您自己的处理,那么您可以按照 this answer.

中的描述添加您的自定义 mixin

但是在最简单的情况下,假设你做了一个测试 POST 请求(或 PUT),例如 python requests:

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

然后你可以用

得到错误信息
print(response.text)

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

您也可以从终端使用 curl 做同样的事情:

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

在本地机器上进行交互式调试时,我喜欢通过插入 rest_framework.generics 中的相关 put()post() 方法来检查 request 数据。

为了快速本地调试 POSTPUT 验证错误(例如,在 http 状态 400 问题的情况下),我喜欢在 Field.run_validators() 的末尾中断 rest_framework.fields 并检查那里的错误消息。