デコレータは正常に動作していますが、ユーザーが必要なグループのいずれにも属していない場合、エラー メッセージを表示したいと思います (メッセージ フレームワークを使用したい)。デコレータは次のとおりです。
def group_required(*group_names):
"""Requires user membership in at least one of the groups passed in."""
def in_groups(user):
if user.is_authenticated():
if bool(user.groups.filter(name__in=group_names)) or user.is_superuser:
return True
return False
return user_passes_test(in_groups)
次のようなものを使用して呼び出します。
@require_http_methods(['GET'])
@group_required('supervisor')
def home_view(request):
return render(request, 'home.html')
このスニペットを使用してメッセージ フレームワークを使用しようとしましたが (これにはリクエストオブジェクトが必要なため)、メッセージ フレームワークミドルウェアがデコレータ内にインストールされていないように見えました。
私はそれが必要とするものは何でも喜んで変更します:)
アップデート:
私が探しているもの:
def group_required(request, *group_names):
"""Requires user membership in at least one of the groups passed in."""
def in_groups(user):
if user.is_authenticated():
if user.groups.filter(name__in=group_names).exists() or user.is_superuser:
return True
else:
# I'm getting:
# You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware
messages.add_message(request, messages.ERROR, 'Group is not allowed')
return False
return user_passes_test(in_groups, request)