42

ビューセットで更新方法をテストしようとしています。ビューセットは、drf から取得したモデルビューセットです。更新するには、put リクエストを送信する必要があります。これは常にサポートされているとは限らないため、put リクエストを作成していることをサーバーに伝える方法は 2 つあります。最初のニーズに合わない方法は、追加のフィールドを使用して、呼び出されたフォームを作成し、_methodそれを に設定することputです。json データを投稿する必要があるため、X-HTTP-Method-Overrideヘッダーを使用する 2 番目の方法を使用する必要があります。

テストケースにデータを投稿するには、次のコードを使用します。

header = {'X_HTTP_METHOD_OVERRIDE': 'PUT'}
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)

しかし、残念ながら私が得る結果は{'detail':'Method POST not allowed.'}. ヘッダーも指定したアドオン ( Postman )を使用して、サーバーの動作をテストしました。X-HTTP-Method-Override例外は発生しません。ここで、ヘッダーを django テスト クライアントに正しく渡す方法を知る必要があります。

4

2 に答える 2

69

ヘッダーの先頭に追加する'HTTP_X_HTTP_METHOD_OVERRIDE'代わりに、ヘッダーを指定する必要があります。'X_HTTP_METHOD_OVERRIDE'HTTP_

header = {'HTTP_X_HTTP_METHOD_OVERRIDE': 'PUT'}
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header)

Django のドキュメントから:

リクエストの HTTP ヘッダーは、METAすべての文字を大文字に変換し、ハイフンをアンダースコアに置き換え、名前にプレフィックスを追加することHTTP_で、キーに変換されます。したがって、たとえば、というヘッダーはkeyX-Benderにマップされます。METAHTTP_X_BENDER

于 2015-08-09T10:18:45.827 に答える