djangoのviews.pyで、Adminにログインユーザを判定する方法
| 登録日 | :2024/01/21 11:26 |
|---|---|
| カテゴリ | :python django |
djangoで認証ユーザか否かで戻り値を調整したい。
認証判定する関数
Djangoのviews.pyで、Adminにログインしているユーザーを判定するには、user_passes_testデコレータを使用することができます。このデコレータは、指定したテスト関数がTrueを返す場合にビューを実行します。
以下は、user_passes_testデコレータを使用してAdminにログインしているかどうかを判定する例です:
from django.contrib.auth.decorators import user_passes_test
from django.shortcuts import render
def is_admin(user):
return user.is_authenticated and user.is_staff
@user_passes_test(is_admin)
def admin_view(request):
# ここにAdminユーザーのみがアクセスできるビューロジックを追加
return render(request, 'admin_template.html')
上記の例では、is_admin関数が user.is_authenticated(ユーザーが認証されているか)と user.is_staff(ユーザーがスタッフであるか=Admin権限を持っているか)の両方を満たす場合に True を返します。その後、@user_passes_test(is_admin)デコレータがこの条件を満たす場合にのみ admin_viewビューがアクセスできるようになります。
また、requestユーザの判定をしたいときは、以下のようにできます。
ユーザのステータスによって、querysetの戻り値を変更します。
class PostView(generic.ListView):
template_name = 'index.html'
model = Post
def get_queryset(self):
queryset = Post.objects.order_by('-created_at')
keyword = self.request.GET.get('keyword')
if self.request.user.is_authenticated and self.request.user.is_staff:
"""認証されかつStaff(管理者権限)の時は全て表示"""
queryset = queryset.filter(
Q(status__icontains=1) | Q(status__icontains=2)
)
else:
"""一般公開のみを表示"""
queryset = queryset.filter(Q(status__icontains=2))
if keyword:
queryset = queryset.filter(
Q(title__icontains=keyword) | Q(content__icontains=keyword)
)
return queryset