【问题标题】:Django custom middleware not adding custom headerDjango 自定义中间件未添加自定义标头
【发布时间】: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


【解决方案1】:

如果标头不是HTTP_*_* 格式,Django 会丢弃标头,因此中间件必须如下所示:

from django.utils.deprecation import MiddlewareMixin


class ReverseProxyLocalMiddleware(MiddlewareMixin):
    def process_request(self, request, user_id=1):
        request.META['HTTP_USER_ID'] = user_id

【讨论】:

    猜你喜欢
    • 2019-10-31
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    相关资源
    最近更新 更多