我对在Django中编写自定义中间件非常陌生。
我们在Django中知道,内置了self.request
。在self.request
中,有太多实例,例如self.request.user
,self.request.data
,self.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)
# 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
不要忘记在MIDDLEWARE
的settings.py
中添加中间件。
注意,它应该是object
,而不是obect
。
阅读有关在Django's official documentation中编写自定义中间件的更多信息。