是否可以为特定的View
类指定所需的自定义标头?
在我正在使用的API上,一些信息是通过标头传递的,如果标头丢失,我需要返回BAD_REQUEST或类似内容。
我可以想到使用mixins实现它的方法,但是不确定是否已经有一些东西可以做到这一点。
答案 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
,然后将它们添加到您的特定视图或设置文件中的所有视图。