DRF指定所需的标题

时间:2018-08-08 10:04:37

标签: django django-rest-framework

是否可以为特定的View类指定所需的自定义标头? 在我正在使用的API上,一些信息是通过标头传递的,如果标头丢失,我需要返回BAD_REQUEST或类似内容。

我可以想到使用mixins实现它的方法,但是不确定是否已经有一些东西可以做到这一点。

2 个答案:

答案 0 :(得分:2)

您可以通过将 dispatch() 的查看方法替换为

来做到这一点
from django.core.exceptions import PermissionDenied
from rest_framework import viewsets


class SampleViewset(viewsets.ModelViewSet):
    serializer_class = SampleSerializer
    queryset = SampleModel.objects.all()

    def dispatch(self, request, *args, **kwargs):
        if "HTTP_CUSTOM_HEADER" not in request.META:
            raise PermissionDenied('not found')
        return super().dispatch(request, *args, **kwargs)

使用Python请求的lib的自定义标头用法示例

In [10]: wrong_header = {"custom-header-wrong":"soem value"}

In [11]: orginal_header = {"custom-header":"soem value"}

In [12]: requests.get(url=url,headers=wrong_header).status_code
Out[12]: 403

In [13]: requests.get(url=url,headers=orginal_header).status_code
Out[13]: 200

答案 1 :(得分:0)

您可以使用权限进行设置

from rest_framework.permissions import BasePermission


class CustomHeaderPermission(BasePermission):
    REQUIRED_HEADERS = ("MyCustomHeader", "AnotherOne")

    def has_permission(self, request, view):
        for header in self.REQUIRED_HEADERS:
            if header not in request.META:
                return False
        return True

,然后将它们添加到您的特定视图或设置文件中的所有视图。