【问题标题】:Django writing Middleware to extend self.request [duplicate]Django编写中间件来扩展self.request [重复]
【发布时间】:2019-10-09 05:16:28
【问题描述】:

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

    简单地做:

    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
    

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


    注意它应该是object 而不是obect


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      相关资源
      最近更新 更多