web-dev-qa-db-ja.com

Django restフレームワークを使用して、ポストリクエストでカスタムヘッダーを取得する

Django restフレームワークを使用して、APIに投稿リクエストを送信しています。

curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/

残りのフレームワークビューで、costumヘッダーを取得します。カスタムヘッダーが条件を満たす場合、投稿データの分析に進みます。

わかりました、私の意見は次のように見えます:

class PostUpdateLogView(APIView):
    throttle_classes = ()
    permission_classes = ()
    parser_classes = (
        parsers.FormParser,
        parsers.MultiPartParser,
        parsers.JSONParser,
    )  

    renderer_classes = (renderers.JSONRenderer,)

    def post(self, request):
        print request.Meta
        # Get custom header
        # Validate custom header
        # Proceed to analize post data

        # Make response
        content = {
            'response': 'response',
        }

        return Response(content)

Request.Meta要素でカスタムヘッダーを見つけようとしていますが、request.Metaを印刷すると500エラーが表示されます。 request.dataを印刷すると、予想される応答が返されます。

¿Django restフレームワークを使用して、投稿リクエストでカスタムヘッダーを取得する方法は何ですか?

23
Andrés Quiroga

リクエストのメタデータ属性の名前は大文字です:

print request.META

ヘッダーは次のように利用できます。

request.META['HTTP_X_MYHEADER']

または:

request.META.get('HTTP_X_MYHEADER') # return `None` if no such header

ドキュメントからの引用

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

43
catavaran

有効なヘッダー情報を提供し、その情報をバックエンドから取得する場合は、それらに従ってください

client-name='ABCKD'

その後、ポストでそのクライアント情報を取得するか、これに続いて関数を取得します

request.META['HTTP_CLIENT_NAME']

'ABCKD'を出力します。

リクエストのヘッダー情報で指定する有効な変数名が何であれ、Django大文字に変換し、ここで「HTTP_」をプレフィックスとして使用し、クライアント名をCLIENT_NAMEに、プレフィックスをHTTP_に変換する。最終出力はHTTP_CLIENT_NAMEです

0
Mehedi Hasan