Django 写中间件扩展self.request

Django writing Middleware to extend self.request

我对在 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

只需执行:

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)
        # Instead of using filter, consider doing (if it fits your usecase):
        # mycustom = get_object_or_404(MyCustom, pk=request.user.pk)
        request.mycustom = mycustom
        response = self.get_response(request)
        return response

不要忘记在 settings.pyMIDDLEWARE 中添加您的中间件。


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


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