Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Kemahiran pengurusan berbilang pengguna dalam rangka kerja Django (Bahagian 2)

Kemahiran pengurusan berbilang pengguna dalam rangka kerja Django (Bahagian 2)

王林
王林asal
2023-06-17 09:24:271576semak imbas

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.

  1. Gunakan sistem kebenaran Django sendiri

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):
    # 发布文章的逻辑
  1. Gunakan Django-guardian untuk meningkatkan pengurusan kebenaran

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)
  1. Hadkan pengguna daripada mengemas kini maklumat mereka sendiri

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn