Отладочная публикация Django Rest Framework и запросы на размещение

Я использую расширение 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.


person Mirza Delic    schedule 02.09.2016    source источник
comment
проверьте это stackoverflow. com/questions/1118183/ лично, когда я работаю с API, лучший способ отладки/кода - это написание тестов   -  person pleasedontbelong    schedule 02.09.2016


Ответы (4)


Я нашел django-silk для отладки DRF.

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

person Mirza Delic    schedule 02.09.2016
comment
Получение проблемы промежуточного программного обеспечения Не удалось найти обработчики для регистратора silk.middleware - person Naveen Agarwal; 09.08.2017
comment
как вы используете django-silk для отладки DRF? Я запускаю тест на терминале, чтобы проверить конечную точку DRF, и я получаю 400, не зная, почему в более подробной информации - person Kim Stacks; 07.12.2017
comment
Я все еще использую django 1.9, поэтому django-silk у меня не работает - person ; 26.06.2018

Если вам нужно перехватить запрос/ответ и применить собственную обработку, вы можете добавить свой собственный миксин, как описано в этом ответе.

Но в самом тривиальном сценарии, учитывая, что вы делаете тестовый запрос POST (или PUT), например, с помощью python запросы:

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/
person ccpizza    schedule 20.07.2018

При интерактивной отладке на локальном компьютере мне нравится проверять данные request, разбивая соответствующий метод put() или post() в rest_framework.generics.

Для быстрой локальной отладки ошибок проверки POST или PUT (например, в случае проблем со статусом http 400) я предпочитаю прерываться в конце Field.run_validators() в rest_framework.fields и проверять там сообщения об ошибках.

person djvg    schedule 11.09.2019

Вы не можете перехватывать перенаправления в просматриваемом API DRF, потому что это ajax и вызывается через javascript. Также панель инструментов не отображается из-за вызова ajax. В качестве обходного пути вы можете временные строки комментариев в debug_toolbar.middleware.DebugToolbarMiddleware#process_request, которые отключают панель инструментов при вызове ajax:

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

Перенаправления по-прежнему не будут работать, но панель инструментов будет видна.

person FeroxTL    schedule 11.12.2017