2016-09-09 2 views
0

Djangoは特定のビューだけで我々が行うことができますGET要求に応答することができますので、もし、@request_http_methodデコレータを使用して受け入れられている方法を制限する方法を提供しています:Django:予想されるコンテンツタイプをフィルタリングしますか?

@require_http_methods(['GET']) 
def only_get(request): 
    pass 

そうでなければ、我々は403(FORBIDDEN)応答を取得します。

しかし、私はまた、Content-Typeのjsonを受け入れたいと思います。それがjsonでない場合、リクエストも拒否する必要があります(403レスポンスも適切なものと思われます)。

Djangoにはrequire_http_methodsデコレータと似たものがありますが、コンテンツタイプはありますか?もしそうでなければ、私はこのシナリオにどのように取り組むことができますか?

答えて

0

DjangoはContent-Typeと似たようなものはありませんが、間違ったContent-Typeでリクエストを破棄してdecorator_from_middlewareオプションを使用するミドルウェアを簡単に書くことができます。

あなたはDjangoの1.10を使用する場合:

class AllowedContentTypes(object): 

    def __init__(self, get_response): 
     self.get_response = get_response 

    def __call__(self, request, *args, **kwargs): 
     types = kwargs.pop('types') or ['application/json'] 
     if request.content_type in types: 
      response = self.get_response(request) 

     else: 
      response = HttpResponse() # your response for wrong content type 
     return response 

をなど、あなたのビューに適用されます。また

@decorator_from_middleware_with_args(AllowedContentTypes)(types=['application/json']) 
def your_view(request): 
    ... 

、あなたはDjangoのRESTフレームワークを使用することができ、そこには、コンテンツタイプをフィルタリングすることができますJSONParserは、パーサーを使用して、要求に対してapplication/jsonコンテンツタイプのみを許可します。また、REST APIを実装すると便利です。

+1

私はそれをまったく同じようにはしませんでしたが、私はこの回答を受け入れるつもりです:) – dabadaba

関連する問題