token验证 - django-rest-auth



如何在一个请求中缓存user.groups,所以每次调用request.user.groups.all()时db都不会被触发。 (1)

你应该能够利用Python的属性:

class User(...):
    @property
    def cached_groups(self):
        if not hasattr(self, '_cached_groups'):
            self._cached_groups = list(self.groups.all())
        return self._cached_groups

因此,无论何时使用user.cached_groups,只要您的用户实例将会存在,就会触发一个缓存的查询集。

我正在使用Django和Django REST,并且有一个基于用户组的用户权限系统。 因此,我必须在视图内检查分配的用户组几次,以查看用户是否属于使用request.user.groups.all()的某个组。 它工作,但每个这样的调用结果额外的查询分贝来检索组。

我希望我可以重写一些方法,在认证过程中将用户从数据库中拉出来,然后再附加到一个请求,所以我可以添加像

User.objects.get(pk=userid).prefetch_related('groups')

所以每当我进一步访问组时,不会有额外的呼叫。





django-authentication