Django 写中间件扩展self.request
Django writing Middleware to extend self.request
我对在 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)
# 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.py
的 MIDDLEWARE
中添加您的中间件。
请注意,它应该是 object
而不是 obect
。
在 Django's official documentation 中阅读有关编写自定义中间件的更多信息。
我对在 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)
# 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.py
的 MIDDLEWARE
中添加您的中间件。
请注意,它应该是 object
而不是 obect
。
在 Django's official documentation 中阅读有关编写自定义中间件的更多信息。