Kemahiran pengurusan berbilang pengguna dalam rangka kerja Django (Bahagian 2)
Dalam artikel sebelumnya, kami memperkenalkan cara untuk melaksanakan pengurusan berbilang pengguna dalam rangka kerja Django. Artikel ini akan terus berkongsi lebih banyak petua dan amalan terbaik untuk membantu pembangun mengendalikan senario berbilang pengguna dengan lebih baik.
Django menyediakan sistem kebenaran terbina dalam yang boleh melaksanakan pengurusan kebenaran pengguna dengan mudah. Tentukan model kebenaran dalam 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"), ]
Kod di atas mentakrifkan model Post dan setiap artikel mempunyai pengarang. Kebenaran ditakrifkan dalam kelas Meta, dinamakan "can_publish", yang bermaksud bahawa pengguna boleh menerbitkan artikel.
Dalam fungsi paparan, anda boleh menyemak sama ada pengguna mempunyai kebenaran tertentu seperti ini:
from django.contrib.auth.decorators import permission_required @permission_required('blog.can_publish') def publish_post(request): # 发布文章的逻辑
Sistem kebenaran Django Walaupun terbina dalam, ia adalah sukar untuk digunakan dengan pengurusan kebenaran peringkat objek. Django-guardian ialah perpustakaan pihak ketiga yang membolehkan kawalan kebenaran yang lebih terperinci pada peringkat objek. Untuk menggunakan Django-guardian, anda perlu mentakrifkan model kebenaran dalam models.py:
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')
Kod di atas mentakrifkan model Post dan setiap artikel mempunyai pengarang. Pada masa yang sama, model PostPermission ditakrifkan untuk mewakili kebenaran mengedit pengguna untuk artikel tertentu. Menggunakan API Django-guardian, pengguna boleh diberi kebenaran untuk mengedit artikel tertentu:
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)
Dalam menguruskan aplikasi berbilang pengguna , kadangkala perlu mengehadkan pengguna untuk hanya mengemas kini maklumat mereka sendiri. Sebagai contoh, tapak rangkaian sosial perlu mengehadkan pengguna untuk hanya mengemas kini maklumat peribadi mereka sendiri dan tidak mengubah suai maklumat orang lain. Semakan kebenaran boleh dilaksanakan dalam fungsi paparan:
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: # 返回更新资料页面
Kod di atas mula-mula menyemak sama ada pengguna telah log masuk, dan kemudian mendapatkan contoh profil untuk dikemas kini berdasarkan kunci utama. Selepas menyemak sama ada pengguna adalah pemilik profil, jika tidak, berikan halaman ralat. Jika ia adalah pemilik, berikan halaman kemas kini.
Kesimpulan
Melalui pengenalan artikel ini, kami telah mempelajari cara mengendalikan senario berbilang pengguna dengan lebih baik dalam rangka kerja Django. Kebenaran pengguna boleh diurus dengan mudah menggunakan sistem kebenaran terbina dalam, manakala Django-guardian boleh mencapai kawalan kebenaran peringkat objek yang lebih halus. Akhir sekali, mengehadkan pengguna daripada mengemas kini maklumat mereka sendiri boleh meningkatkan keselamatan aplikasi dan pengalaman pengguna. Saya harap petua ini akan memberi inspirasi kepada anda dalam pembangunan Django anda.
Atas ialah kandungan terperinci Kemahiran pengurusan berbilang pengguna dalam rangka kerja Django (Bahagian 2). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!