Mehrbenutzerverwaltungsfähigkeiten im Django-Framework (Teil 2)
Im vorherigen Artikel haben wir vorgestellt, wie man die Mehrbenutzerverwaltung im Django-Framework implementiert. In diesem Artikel werden weiterhin weitere Tipps und Best Practices vorgestellt, die Entwicklern dabei helfen, Mehrbenutzerszenarien besser zu bewältigen.
Django bietet ein integriertes Berechtigungssystem, mit dem sich die Benutzerberechtigungsverwaltung problemlos implementieren lässt. Definieren Sie das Berechtigungsmodell in models.py:
from django.contrib.auth.models import Permission, User class Post(models.Model): title = models.CharField(max_length=100) content = models.TextField() author = models.ForeignKey(User, on_delete=models.CASCADE) class Meta: permissions = [ ("can_publish", "Can publish posts"), ]
Der obige Code definiert ein Post-Modell und jeder Artikel hat einen Autor. In der Meta-Klasse ist eine Berechtigung mit dem Namen „can_publish“ definiert, was bedeutet, dass der Benutzer Artikel veröffentlichen kann.
In der Ansichtsfunktion können Sie wie folgt überprüfen, ob der Benutzer über eine bestimmte Berechtigung verfügt:
from django.contrib.auth.decorators import permission_required @permission_required('blog.can_publish') def publish_post(request): # 发布文章的逻辑
Djangos Berechtigungssystem ist integriert, aber es ist schwierig zu verwenden Berechtigungsverwaltung auf Objektebene. Django-guardian ist eine Bibliothek eines Drittanbieters, die eine detailliertere Berechtigungskontrolle auf Objektebene ermöglicht. Um Django-guardian verwenden zu können, müssen Sie in models.py ein Berechtigungsmodell definieren:
from django.contrib.auth.models import User from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.fields import GenericForeignKey class Post(models.Model): title = models.CharField(max_length=100) content = models.TextField() author = models.ForeignKey(User, on_delete=models.CASCADE) class PostPermission(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) post = models.ForeignKey(Post, on_delete=models.CASCADE) can_edit = models.BooleanField(default=False) content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type', 'object_id')
Der obige Code definiert ein Post-Modell und jeder Artikel hat einen Autor. Gleichzeitig wird ein PostPermission-Modell definiert, das die Bearbeitungsrechte des Benutzers für einen bestimmten Artikel darstellt. Mithilfe der API von Django-guardian können Benutzer die Berechtigung zum Bearbeiten eines bestimmten Artikels erhalten:
from django.contrib.auth.models import User from blog.models import Post, PostPermission from guardian.shortcuts import assign_perm user = User.objects.get(username='testuser') post = Post.objects.get(id=1) assign_perm('can_edit', user, post)
In Anwendungen, die mehrere Benutzer verwalten, ist es manchmal erforderlich, Benutzern die Aktualisierung ihrer eigenen Informationen zu beschränken Informationsinformationen. Beispielsweise muss eine Social-Networking-Site die Benutzer darauf beschränken, nur ihre eigenen persönlichen Daten zu aktualisieren und die Daten anderer Personen nicht zu ändern. Die Berechtigungsprüfung kann in der Ansichtsfunktion implementiert werden:
from django.contrib.auth.decorators import login_required from django.shortcuts import render, get_object_or_404 from blog.models import Profile @login_required def update_profile(request, pk): profile = get_object_or_404(Profile, pk=pk) if request.user != profile.user: return render(request, 'profile_error.html') if request.method == 'POST': # 更新用户资料逻辑 else: # 返回更新资料页面
Der obige Code prüft zunächst, ob der Benutzer angemeldet ist, und ruft dann die zu aktualisierende Profilinstanz basierend auf dem Primärschlüssel ab. Nachdem Sie überprüft haben, ob der Benutzer der Eigentümer des Profils ist, wird ggf. eine Fehlerseite angezeigt. Wenn es sich um den Eigentümer handelt, rendern Sie die Aktualisierungsseite.
Fazit
Durch die Einleitung dieses Artikels haben wir gelernt, wie wir Mehrbenutzerszenarien im Django-Framework besser handhaben können. Benutzerberechtigungen können mithilfe des integrierten Berechtigungssystems einfach verwaltet werden, während Django-Guardian eine detailliertere Berechtigungssteuerung auf Objektebene erreichen kann. Schließlich können die Anwendungssicherheit und das Benutzererlebnis verbessert werden, wenn Benutzer daran gehindert werden, ihre eigenen Informationen zu aktualisieren. Ich hoffe, diese Tipps werden Sie bei Ihrer Django-Entwicklung inspirieren.
Das obige ist der detaillierte Inhalt vonFähigkeiten zur Mehrbenutzerverwaltung im Django-Framework (Teil 2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!