django - Django编写中间件来扩展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
不要忘记将中间件添加MIDDLEWARE
到settings.py
.
请注意,它应该是object
而不是obect
。
在Django 的官方文档中阅读有关编写自定义中间件的更多信息。
推荐阅读
- graph - GNN 层如何知道批次中的哪个图具有给定的节点和节点特征?
- typescript - How to move .env file into build folder with tsconfig
- spring-boot - 提高 spring 批处理作业性能
- visual-studio-code - 有没有办法在 VSCode 中禁用 shift + enter ?
- python-docx - 将图像插入现有 word 文件时文件损坏
- c# - IModelValidatorProvider 和 IModelValidator 实现的问题。生成的错误没有得到正确处理
- for-loop - 为什么这会在第二个循环中两次获得同一行?
- javascript - React-native 将组件添加到数组并访问它们
- c++ - 当其中一个函数实际上是函数对象时,修复或替代 ADL
- jenkins - 詹金斯奴隶不在 kubernetes 上运行