


Système d'authentification des utilisateurs Django (3) groupes et autorisations
Le système d'autorisation de Django est très simple, il peut accorder des autorisations à des utilisateurs ou à des utilisateurs en groupe.
Le backend d'administration de Django utilise ce système d'autorisation, mais il peut également être utilisé dans votre propre code.
L'objet utilisateur a deux champs ManyToManyField, groupes et user_permissions
groups = models.ManyToManyField(Group, verbose_name=_('groups'),
blank=True, help_text=_ ( 'Les groupes auxquels cet utilisateur appartient. name="user_set", Related_query_name="user")
user_permissions = models.ManyToManyField(Permission,
verbose_name=_('autorisations utilisateur') , blank=True,
help_text=_('Autorisations spécifiques pour cet utilisateur.'),
Related_name= "user_set", Related_query_name="user")
Vous pouvez y accéder comme les autres modèles Django :
myuser.groups add(group, group, ...)
myuser.groups.remove(group, group, .. .)myuser.groups.clear()
myuser.user_permissions = [permission_list]
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, autorisation, ...)
myuser.user_permissions.clear()
Autorisations
class Permission(models.Model):
""" Le système d'autorisations fournit un moyen d'attribuer des autorisations à des
utilisateurs et groupes d'utilisateurs spécifiques.
Le système d'autorisation est utilisé par le site d'administration de Django, mais peut également être
utile dans votre propre code. Le site d'administration de Django utilise les autorisations comme suit :
- Les limites d'autorisation "ajouter". la possibilité de l'utilisateur d'afficher le formulaire "ajouter"
et d'ajouter un objet.
- L'autorisation "supprimer" limite la possibilité de supprimer un objet.
Les autorisations sont définies globalement par type d'objet. , pas par objet spécifique
instance. Il est possible de dire "Mary peut changer les actualités", mais il n'est
actuellement pas possible de dire "Mary peut changer les actualités, mais seulement celles
celles qu'elle a créées elle-même. " ou "Mary ne peut modifier que les actualités qui ont un
certain statut ou une certaine date de publication."
Trois autorisations de base -- ajouter, modifier et supprimer -- sont automatiquement
créées pour chaque modèle Django .
"""
name = models.CharField(_( 'name'), max_length=255)
content_type = models.ForeignKey(ContentType)
codename = models.CharField(_(' codename'), max_length=100)
objects = PermissionManager()
class Meta:
verbose_name = _('permission')
verbose_name_plural = _('permissions')
unique_together = (('content_type', 'codename'),)
order ing = ('content_type__app_label', 'content_type__model',
six. Text_type (self.Content_type.app_label),
Six.text_type ( Self.Content_type),
SIX.Text_type (Self.Name))
DEF Natural_key (Self):
Return ( self.codename,) self.content_type.natural_key()
natural_key .dependencies = ['contenttypes.contenttype']
champs champs
nom : obligatoire. 50 caractères ou moins, par exemple, « Can Vote »
content_type : obligatoire, une référence à la table de base de données django_content_type, qui contient des enregistrements pour chaque modèle de l'application.
nom de code : obligatoire, 100 caractères ou moins, par exemple "can_vote".
Si vous souhaitez créer des autorisations pour un modèle :
à partir de django.db importer des modèles
class Vote(models.Model):
...
class Meta :
permissions = (("can_vote", "Can Vote"),)
Si ce modèle est dans l'application foo, les autorisations sont exprimées sous la forme 'foo. can_vote' , vérifiez si un utilisateur dispose des autorisations myuser.has_perm('foo.can_vote')
Autorisations par défaut autorisations par défaut
Si django.contrib.auth a été configuré dans INSTALLED_APPS, il sera garanti. Chaque modèle Django dans les applications installées crée 3 autorisations par défaut : ajouter, modifier et supprimer.
Ces autorisations sont créées la première fois que vous exécutez manage.py migrate (syncdb avant 1.7). À ce moment-là, tous les modèles auront des autorisations établies. Les nouveaux modèles créés après cela disposeront de ces autorisations par défaut créées lors de la nouvelle exécution de manage.py migrate. Ces autorisations correspondent aux comportements de création, de suppression et de modification dans l'interface de gestion de l'administrateur.
Supposons que vous ayez une application foo avec une barre de modèle, vous pouvez utiliser la méthode suivante pour tester les autorisations de base :
ajouter : user.has_perm('foo.add_bar')
change : user.has_perm('foo.change_bar')
delete : user.has_perm('foo.delete_bar')
Le modèle d'autorisation n'est généralement pas utilisé directement.
Groupes
Le groupe existe également en tant que modèle :
@python_2_unicode_compatible
class Group(models.Model):
"""
Les groupes sont une manière générique de catégoriser les utilisateurs pour appliquer des autorisations, ou
une autre étiquette, à ces utilisateurs. Un utilisateur peut appartenir à n'importe quel nombre de
groupes.
Un utilisateur d'un groupe possède automatiquement tous les éléments. autorisations accordées à ce
groupe. Par exemple, si le groupe Éditeurs du site dispose de l'autorisation
can_edit_home_page, tout utilisateur de ce groupe aura cette autorisation.
Au-delà des autorisations, les groupes sont un moyen pratique de le faire. catégorisez les utilisateurs pour
leur appliquer une étiquette ou une fonctionnalité étendue. Par exemple, vous
pouvez créer un groupe « Utilisateurs spéciaux » et vous pouvez écrire du code qui
fera des choses spéciales à ces utilisateurs -. - comme leur donner accès à une
partie réservée aux membres de votre site, ou leur envoyer des e-mails
réservés aux membres.
"""
name = models.CharField(_(' name '), max_length=80, unique=True)
permissions = models.ManyToManyField(Permission,
verbose_name=_('permissions'), blank=True)
objects = GroupManager()
class Meta :
verbose_name = _('group')
verbose_name_plural = _('groups')
def __str__(self):
return self.name
def natural_key(self):
return (self.name,)
fields :
name : obligatoire, 80 caractères ou moins, par exemple, « Utilisateurs géniaux ».
permissions:ManyToManyField à Permission
group.permissions = [permission_list]
group.permissions.add(permission, permission, ...)
group.permissions.remove( permission, permission, ...)
group.permissions.clear()
Création d'autorisations par programmation
En plus d'utiliser la méta modèle pour créer des autorisations, vous pouvez également utiliser code créer directement.
Par exemple, créez une autorisation can_publish pour le modèle BlogPost dans l'application myapp :
from myapp.models import BlogPost
from django.contrib.auth.models import Group, Permission
depuis django.contrib.contenttypes.models importez ContentType
content_type = ContentType.objects.get_for_model(BlogPost)
permission = Permission.objects.create(codename='can_publish',
name= 'Peut publier des messages',
Content_type = Content_type)
les autorisations peuvent être accordées à un objet utilisateur via ses user_permissions ou à un groupe via son attribut Permissions.
Mise en cache des autorisations
Les autorisations de l'utilisateur peuvent être mises en cache lorsqu'elles sont cochées. Si une nouvelle autorisation est accordée à un utilisateur, elle ne sera pas vérifiée si elle est vérifiée immédiatement. Le moyen le plus simple consiste à récupérer l’objet User.
depuis django.contrib.auth.models import Permission, User
depuis django.shortcuts import get_object_or_404
def user_gains_perms(request, user_id):
user = get_object_or_404(User, pk=user_id) )
#La vérification des autorisations mettra en cache l'ensemble d'autorisations actuel
user.has_perm('myapp.change_bar')
permission = Permission.objects.get(codename='change_bar')
user .user_permissions.add(permission)
# Vérifier l'ensemble de cache d'autorisations
user.has_perm('myapp.change_bar') # False
# Demander une nouvelle instance
user = get_object_or_404( Utilisateur, pk=user_id)
# Le cache des autorisations est repeuplé à partir de la base de données
user.has_perm('myapp.change_bar') # True
...
Décorateur d'autorisations
permission_required(perm[, login_url=None, raise_exception=False])
Vérifie si l'utilisateur dispose d'une certaine autorisation, similaire à @login_required()
de django.contrib.auth.decorators import permission_required
@permission_required('polls.can_vote', login_url='/loginpage/')
def my_view(request):
…
Autorisations dans le modèle
Les autorisations de l'utilisateur sont stockées dans la variable du modèle {{ perms }}, qui est une instance de django.contrib.auth.context_processors.PermWrapper.
{{ perms.foo }}
L'attribut unique ci-dessus est le proxy de User.has_module_perms. Si l'utilisateur dispose d'une autorisation dans foo, elle est True
{{ perms.foo.can_vote }}
La requête d'attribut à deux niveaux ci-dessus est le proxy de User.has_perm, Vrai si l'utilisateur dispose de l'autorisation foo.can_vote.
Par exemple :
{% if perms.foo %}
Vous êtes autorisé à faire quelque chose dans l'application foo.
{ % if perms.foo.can_vote %}
p>Vous pouvez conduire !
{% endif %}
{% else %}
Vous n'êtes pas autorisé à faire quoi que ce soit dans l'application foo.< /p>
{% endif %}
ou :
{% if 'foo' en perms %}
{% if 'foo.can_vote' en perms %} Pour plus de contenu connexe, veuillez consulter le site Web PHP en chinois (www .php.cn) !

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Étapes pour vérifier la version de Django : 1. Ouvrez un terminal ou une fenêtre d'invite de commande ; 2. Assurez-vous que Django n'est pas installé, vous pouvez utiliser l'outil de gestion de packages pour l'installer et entrer la commande pip install django 3 ; . Une fois l'installation terminée, vous pouvez utiliser python -m django --version pour vérifier la version de Django.

Django et Flask sont tous deux leaders dans les frameworks Web Python, et ils ont tous deux leurs propres avantages et scénarios applicables. Cet article procédera à une analyse comparative de ces deux frameworks et fournira des exemples de code spécifiques. Introduction au développement Django est un framework Web complet, son objectif principal est de développer rapidement des applications Web complexes. Django fournit de nombreuses fonctions intégrées, telles que ORM (Object Relational Mapping), formulaires, authentification, backend de gestion, etc. Ces fonctionnalités permettent à Django de gérer de grandes

Django est un framework de développement complet qui couvre tous les aspects du cycle de vie du développement Web. Actuellement, ce framework est l’un des frameworks Web les plus populaires au monde. Si vous envisagez d'utiliser Django pour créer vos propres applications Web, vous devez alors comprendre les avantages et les inconvénients du framework Django. Voici tout ce que vous devez savoir, y compris des exemples de code spécifiques. Avantages de Django : 1. Développement rapide : Djang peut développer rapidement des applications Web. Il fournit une bibliothèque riche et interne

Comment vérifier la version de Django : 1. Pour vérifier via la ligne de commande, entrez la commande "python -m django --version" dans la fenêtre du terminal ou de la ligne de commande. 2. Pour vérifier dans l'environnement interactif Python, entrez "import django ; print(django. get_version())" code ; 3. Vérifiez le fichier de paramètres du projet Django et recherchez une liste nommée INSTALLED_APPS, qui contient des informations sur les applications installées.

Les différences sont : 1. Série Django 1.x : Il s'agit d'une première version de Django, comprenant les versions 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8 et 1.9. Ces versions fournissent principalement des fonctions de développement Web de base ; 2. Série Django 2.x : Il s'agit de la version intermédiaire de Django, comprenant les versions 2.0, 2.1, 2.2 et autres. 3. Série Django 3.x : Il s'agit de la dernière version ; série de Django, y compris les versions 3.0, 3, etc.

Comment mettre à niveau la version de Django : étapes et considérations, exemples de code spécifiques requis Introduction : Django est un puissant framework Web Python qui est continuellement mis à jour et mis à niveau pour offrir de meilleures performances et plus de fonctionnalités. Cependant, pour les développeurs utilisant des versions plus anciennes de Django, la mise à niveau de Django peut rencontrer certains défis. Cet article présentera les étapes et les précautions à suivre pour mettre à niveau la version de Django et fournira des exemples de code spécifiques. 1. Sauvegardez les fichiers du projet avant de mettre à niveau Djan

Django est le back-end. Détails : Bien que Django soit avant tout un framework backend, il est étroitement lié au développement front-end. Grâce à des fonctionnalités telles que le moteur de modèles de Django, la gestion de fichiers statiques et l'API RESTful, les développeurs front-end peuvent collaborer avec les développeurs back-end pour créer des applications Web puissantes et évolutives.

Django, Flask et FastAPI : quel framework convient aux débutants ? Introduction : Dans le domaine du développement d'applications Web, il existe de nombreux excellents frameworks Python parmi lesquels choisir. Cet article se concentrera sur les trois frameworks les plus populaires, Django, Flask et FastAPI. Nous évaluerons leurs fonctionnalités et discuterons du framework le mieux adapté aux débutants. Parallèlement, nous fournirons également quelques exemples de code spécifiques pour aider les débutants à mieux comprendre ces frameworks. 1. Django : Django
