Django提供了一种使用@request_http_method
装饰器限制接受方法的方法,因此如果特定视图只能响应GET请求,我们可以这样做:
@require_http_methods(['GET'])
def only_get(request):
pass
否则我们会收到403(FORBIDDEN)回复。
但是,我还想接受json的Content-Type
。如果它不是json,它也应该拒绝该请求(我猜测403响应也是合适的)。
Django与require_http_methods
装饰器有什么相似之处,但对于内容类型?如果没有,我还能如何处理这种情况?
答案 0 :(得分: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 Framework,您可以使用Parsers过滤Content-Type,JSONParser只允许application / json content-type用于请求。为您的应用程序实现REST API也会更有用。