【发布时间】:2019-12-13 10:36:00
【问题描述】:
所以我试图在我的 Django 应用程序中为每个请求添加一个自定义标头,我关注了this 问题,我的设置如下所示:
middleware.py:
from django.utils.deprecation import MiddlewareMixin
class ReverseProxyLocalMiddleware(MiddlewareMixin):
def process_request(self, request):
request.META['User-Id'] = 1
settings.py:
...
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
'myapp.middleware.ReverseProxyLocalMiddleware',
]
views.py:
class UserViewSet(
viewsets.GenericViewSet, mixins.ListModelMixin, mixins.RetrieveModelMixin
):
queryset = models.User.objects.all()
serializer_class = serializers.UserSerializer
def get_queryset(self):
return models.User.objects.active(dt=timezone.now())
def list(self, request):
user_id = request.META['User-Id']
...
但是,每当我尝试在测试中访问新标头时,我都会得到:
def list(self, request):
> user_id = request.META['User-Id']
E KeyError: 'User-Id'
有人知道我做错了什么吗?
【问题讨论】:
-
为什么要加入 META?
-
这是我(我猜很差)的理解,这是您添加自定义标题的方式 - 我还有其他方法吗?
-
我试过你的例子,它正在工作。您正在使用哪些视图?
-
添加了 Django 视图。
-
你在混合使用 drf 视图集和 Django mixins 吗?
标签: python django django-middleware