Django Rest Framework 调试 post 并提出请求
Django Rest Framework debug post and put requests
我使用 DRF 扩展来为模型选择 json 列表,在那里我可以使用 debug-toolbar
调试 GET
请求,但是我如何调试 POST
和PUT
个请求?
我在调试模式下有这个设置:
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。
您无法拦截 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
数据。
为了快速本地调试 POST
或 PUT
验证错误(例如,在 http 状态 400 问题的情况下),我喜欢在 Field.run_validators()
的末尾中断 rest_framework.fields
并检查那里的错误消息。
我使用 DRF 扩展来为模型选择 json 列表,在那里我可以使用 debug-toolbar
调试 GET
请求,但是我如何调试 POST
和PUT
个请求?
我在调试模式下有这个设置:
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。
您无法拦截 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
数据。
为了快速本地调试 POST
或 PUT
验证错误(例如,在 http 状态 400 问题的情况下),我喜欢在 Field.run_validators()
的末尾中断 rest_framework.fields
并检查那里的错误消息。