web-dev-qa-db-ja.com

Django Rest Frameworkのデバッグポストおよび書き込みリクエスト

私はDRF拡張を使用してモデルのjsonリストを設定し、debug-toolbar that GET requestでデバッグできますが、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を実行してもツールバーが表示されません。

11
Mirza Delic

DRFのデバッグ用にDjango-silkを見つけました。

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

17
Mirza Delic

リクエスト/レスポンスをインターセプトして独自の処理を適用する必要がある場合は、 this answer の説明に従ってカスタムミックスインを追加できます。

ただし、最も単純なシナリオでは、たとえばPOST requests を使用してテストpythonリクエスト(またはPUT)を実行するとします。

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/
4
ccpizza

それはajaxであり、javascriptを介して呼び出されるため、DRFブラウズ可能APIでリダイレクトをインターセプトすることはできません。また、ajax呼び出しのため、ツールバーは表示されません。回避策として、ajax呼び出しでツールバーを無効にするdebug_toolbar.middleware.DebugToolbarMiddleware#process_requestの一時的なコメント行を使用できます。

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

リダイレクトはまだ機能しませんが、ツールバーは表示されます。

0
FeroxTL

ローカルマシンで対話式にデバッグする場合、rest_framework.genericsの関連するput()またはpost()メソッドをブレークインしてrequestデータを調べます。

POSTまたはPUT検証エラーの迅速なローカルデバッグ(たとえば、httpステータス400の問題の場合)のために、rest_framework.fieldsField.run_validators()の最後で中断して調べますそこのエラーメッセージ。

0
djvg