Django フレームワークでのマルチユーザー管理スキル (パート 2)
前の記事では、Django フレームワークでマルチユーザー管理を実装する方法を紹介しました。この記事では、開発者がマルチユーザー シナリオをより適切に処理できるように、さらに多くのヒントとベスト プラクティスを引き続き紹介していきます。
Django は、ユーザー権限管理を簡単に実装できる組み込みの権限システムを提供します。 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"), ]
上記のコードは Post モデルを定義し、各記事には著者がいます。 Meta クラスには「can_publish」という名前の権限が定義されており、これはユーザーが記事を公開できることを意味します。
view 関数では、次のようにユーザーに特定の権限があるかどうかを確認できます:
from django.contrib.auth.decorators import permission_required @permission_required('blog.can_publish') def publish_post(request): # 发布文章的逻辑
Django の権限システムは組み込まれていますが、オブジェクトレベルの権限管理では使用するのが困難です。 Django-guardian は、オブジェクト レベルでのより詳細な権限制御を可能にするサードパーティ ライブラリです。 Django-guardian を使用するには、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')
上記のコードは Post モデルを定義し、各記事には著者がいます。同時に、特定の記事に対するユーザーの編集権限を表す PostPermission モデルが定義されます。 Django-guardian の API を使用すると、ユーザーに特定の記事を編集する権限を与えることができます。
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)
マルチユーザー アプリケーションの管理において、場合によっては、ユーザーが自分の情報のみを更新できるように制限する必要があります。たとえば、ソーシャル ネットワーキング サイトでは、ユーザーが自分の個人情報のみを更新し、他の人の情報を変更できないように制限する必要があります。権限チェックは view 関数で実装できます。
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: # 返回更新资料页面
上記のコードは、まずユーザーがログインしているかどうかをチェックし、次に主キーに基づいて更新するプロファイル インスタンスを取得します。ユーザーがプロファイル所有者であるかどうかを確認した後、そうでない場合は、エラー ページを表示します。所有者の場合は、更新ページをレンダリングします。
結論
この記事の導入を通じて、Django フレームワークでマルチユーザー シナリオをより適切に処理する方法を学びました。ユーザーのアクセス許可は、組み込みのアクセス許可システムを使用して簡単に管理でき、Django-guardian はより詳細なオブジェクト レベルのアクセス許可制御を実現できます。最後に、ユーザーが自分の情報を更新できないように制限すると、アプリケーションのセキュリティとユーザー エクスペリエンスが向上します。これらのヒントが Django 開発のインスピレーションになれば幸いです。
以上がDjango フレームワークにおけるマルチユーザー管理スキル (パート 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。