with tutorial framework create auth django django-rest-framework django-authentication

django - tutorial - ¿Cómo almacenar en caché user.groups en una solicitud para que no se golpee db cada vez que llame a request.user.groups.all()?



django rest framework with django 2 (1)

Estoy usando Django con Django REST y tengo un sistema de permisos de usuario basado en grupos de usuarios. Como resultado, debo verificar algunas veces el número de grupos de usuarios asignados dentro de las vistas para ver si un usuario pertenece a cierto grupo usando request.user.groups.all() . Funciona, pero cada llamada de ese tipo da como resultado una consulta adicional a db para recuperar grupos.

Me gustaría poder anular algún método que extraiga a un usuario de un archivo db durante la autenticación antes de adjuntarlo a una solicitud, así puedo agregar algo como

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

así que no se realizarán llamadas adicionales cada vez que acceda a grupos más abajo.


Deberías poder aprovechar la propiedad de 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

por lo tanto, cada vez que use user.cached_groups, se activará un conjunto de consultas en caché que solo durará tanto como lo haga su instancia de usuario.