【发布时间】:2019-10-09 12:40:33
【问题描述】:
我们知道在 Django 中,我们可以访问 self.request 中的太多实例,例如 self.request.user、self.request.data、self.request.authenticator 等
我正在尝试让self.request.mygroup 编写自定义中间件
这是我的模型
from django.contrib.auth.models import User
from django.db import models
class Person(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid4,
editable=False
)
auth_user = models.OneToOneField(
User,
on_delete=models.CASCADE,
related_name='auth_user',
)
class Group(models.Model):
members = models.ManyToManyField(
Person,
related_name='group_members'
)
我写了这个中间件,它工作正常:
class GroupMiddleWare(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
person = Person.objects.filter(
auth_user__id=request.user.id
).first()
mygroup = Group.objects.filter(
members__alias__in=[person.alias]
)
request.mygroup = mygroup.first()
response = self.get_response(request)
return response
上面的中间件工作正常,但问题是当我从隐身模式访问时,我的意思是当我没有登录时,它会抛出一个错误,比如 AnonymouseUser 没有属性 self.request.user
为了处理这个问题,我尝试编写 if self.request.user.is_authenticated: 之类的条件,但它会出现另一个相同的错误。我想我错误地制作了中间件,谁能帮我扩展self.request 以获得我自己的实例,例如self.request.mygroup?
我不知道什么是编写中间件的正确方法,我是中间件的新手
我希望self.request.mygroup 应该只返回经过身份验证的用户组
【问题讨论】:
标签: django django-rest-framework django-middleware