J'ai construit un processus contextuel qui envoie les autorisations aux utilisateurs connectés en tant que chaîne dans un modèle. Puis, en fonction des utilisateurs perms, j'affiche ou cache les urls.Django - requête de processus contextuel répétée 102 fois
Cependant, l'utilisation de la barre d'outils de débogage ive juste vu que la requête est exécutée 102 fois pour une raison que je ne sais pas
Le débogage (les changements d'identité et il semble que il y a trois de chaque ID dans les doublons)
SELECT `django_content_type`.`id`, `django_content_type`.`app_label`, `django_content_type`.`model` FROM `django_content_type` WHERE `django_content_type`.`id` = 35
Duplicated 102 times.
0.6862959744274587%
23.41
Sel Expl
Connection: default
/itapp/itapp/sites/views.py in site_detail_files(214)
'PageType' : 'files',
/usr/local/lib/python3.6/contextlib.py in __enter__(81)
return next(self.gen)
/itapp/itapp/itapp/context_processors.py in UserPerms(34)
'Perms': str(all_perms),
la fonction:
def UserPerms(request):
from django.contrib.auth.models import Permission
all_perms = []
if str(request.user) != 'AnonymousUser':
permissions = Permission.objects.filter(user=request.user)
group_permissions = Permission.objects.filter(group__user=request.user)
all_perms = []
for p in permissions:
all_perms.append(p)
for p in group_permissions:
all_perms.append(p)
return {
'Perms': str(all_perms),
}
ajouté aux modèles dans settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
BASE_DIR + '/templates/',
],
'APP_DIRS': True,
'OPTIONS': {
'debug' : DEBUG,
'context_processors': [
'django.template.context_processors.debug',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media',
'django.template.context_processors.static',
'itapp.context_processors.breadcrumb_history',
'itapp.context_processors.UserPerms',
],
},
},
]
Exemple d'utilisation:
<li><a href="{% url 'sites:site_detail_circuits' SiteID %}">Circuits</a>
{% if "Permission: sites | Circuit Data | Can add Circuit Data" in Perms %}
{% if PageType == 'circuits' %}
<ul>
<li><a href="{% url 'admin:sites_circuits_add' %}?site_data={{ SiteID }}">Add new circuit</a></li>
</ul>
{% endif %}
{% endif %}
</li>
qui a fonctionné, merci! – AlexW
est-il également possible de vérifier les groupes de cette façon? Je ne peux pas le voir sur la page référencée – AlexW
'{% si perms.app.perm_name%}' fonctionne de la même façon que ['user.has_perm'] (https://docs.djangoproject.com/fr/1.11/ref/ contrib/auth/# django.contrib.auth.models.User.has_perm) dans la vue - il renvoie 'True' si l'utilisateur est dans un groupe qui a cette permission. Il gère également le super-utilisateur et les indicateurs actifs de manière appropriée. – Alasdair