with vincent template register loginview has custom contrib auth attribute and python django django-authentication

python - vincent - En Django, ¿cómo puedo verificar si un usuario está en cierto grupo?



register and login django (10)

En una línea:

''Groupname'' in user.groups.values_list(''name'', flat=True)

Esto se evalúa como True o False .

Creé un grupo personalizado en el sitio de administración de Django.

En mi código, quiero verificar si un usuario está en este grupo. ¿Cómo puedo hacer eso?


Lo he hecho de la siguiente manera. Parece ineficiente pero no tenía otra forma en mi mente:

@login_required def list_track(request): usergroup = request.user.groups.values_list(''name'', flat=True).first() if usergroup in ''appAdmin'': tracks = QuestionTrack.objects.order_by(''pk'') return render(request, ''cmit/appadmin/list_track.html'', {''tracks'': tracks}) else: return HttpResponseRedirect(''/cmit/loggedin'')


Por si acaso, si desea verificar que el grupo de usuarios pertenece a una lista de grupos predefinida:

def is_allowed(user): allowed_group = set([''admin'', ''lead'', ''manager'']) usr = User.objects.get(username=user) groups = [ x.name for x in usr.groups.all()] if allowed_group.intersection(set(groups)): return True return False


Si necesita la lista de usuarios que están en un grupo, puede hacer esto en su lugar:

from django.contrib.auth.models import Group users_in_group = Group.objects.get(name="group name").user_set.all()

y luego verificar

if user in users_in_group: # do something

para verificar si el usuario está en el grupo.


Si no necesita la instancia del usuario en el sitio (como yo lo hice), puede hacerlo con

User.objects.filter(pk=userId, groups__name=''Editor'').exists()

Esto producirá solo una solicitud a la base de datos y devolverá un booleano.


Si un usuario pertenece a un determinado grupo o no, se puede verificar en plantillas django utilizando:

{% if group in request.user.groups.all %} "some action" {% endif %}


Solo necesitas una línea:

from django.contrib.auth.decorators import user_passes_test @user_passes_test(lambda u: u.groups.filter(name=''companyGroup'').exists()) def you_view(): return HttpResponse("Since you''re logged in, you can see this text!")


Su objeto Usuario está vinculado al objeto Grupo a través de una relación ManyToMany .

De este modo, puede aplicar el método de filtro a user.groups .

Entonces, para verificar si un Usuario dado está en un grupo determinado ("Miembro" para el ejemplo), simplemente haga esto:

def is_member(user): return user.groups.filter(name=''Member'').exists()

Si desea verificar si un usuario dado pertenece a más de un grupo determinado, use el operador __in de la siguiente manera:

def is_in_multiple_groups(user): return user.groups.filter(name__in=[''group1'', ''group2'']).exists()

Tenga en cuenta que esas funciones se pueden usar con @user_passes_test decorator para administrar el acceso a sus vistas:

from django.contrib.auth.decorators import login_required, user_passes_test @login_required @user_passes_test(is_member) # or @user_passes_test(is_in_multiple_groups) def myview(request): # Do your processing

Espero que esto ayude


User.objects.filter (username = ''tom'', groups__name = ''admin''). Exists ()

Esa consulta le informará al usuario: "tom" si pertenece al grupo "admin" o no


Puede acceder a los grupos simplemente a través del atributo de groups en User .

from django.contrib.auth.models import User, Group group = Group(name="Editor") group.save() # save this new group for this example user = User.objects.get(pk=1) # assuming, there is one initial user user.groups.add(group) # user is now in the "Editor" group

luego user.groups.all() devuelve [<Group: Editor>]