Django编写中间件以扩展self.request

问题描述 投票:0回答:1

我对在Django中编写自定义中间件非常陌生。

我们在Django中知道,内置了self.request。在self.request中,有太多实例,例如self.request.userself.request.dataself.request.authenticator

我正在尝试添加self.request.mycustom;在self.request.mycustom中,我想获取模型MyCustom实例。

这是我的模特:

从django.contrib.auth.models导入用户

class MyCustom(models.Model):
    auth_user = models.OneToOneField(
        User,
        on_delete=models.CASCADE,
        related_name='auth_user',
    )

我正在尝试编写中间件,但没有获得编写方法。

这是我写的尝试:

class MessMiddleWare(obect):
    def precess_view(request):
        mycustom = MyCustom.objects.filter(id=request.user.pk)
        request.mycustom = mycustom

有人可以帮助我实现这一目标吗?

我只是想获得self.request.mycustom

django django-rest-framework django-middleware
1个回答
0
投票

简单地做:

from django.shortcuts import get_object_or_404

...

class MessMiddleWare(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        mycustom = MyCustom.objects.filter(id=request.user.pk)
        # If there is only one object with the pk then do:
        # mycustom = get_object_or_404(MyCustom, pk=request.user.pk)
        request.mycustom = mycustom
        response = self.get_response(request)
        return response

不要忘记在MIDDLEWAREsettings.py中添加中间件。


注意,它应该是object,而不是obect


阅读有关在Django's official documentation中编写自定义中间件的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.