CBVでは、のself.requestとしてリクエストにアクセスできます。したがって、プロファイル属性をself.request.user.profile.attribute
として簡単に確認できます。要求引数プラス引数を受け付け、HTTPレスポンスを返すメソッド - CBVにおけるdispatch(request, *args, **kwargs)
方法(説明を参照)
ビューのビューの一部もあります。 デフォルトの実装では、HTTPメソッドを検査し、HTTPメソッドに一致するメソッドに委任しようとします。 GETはget()、投稿するPOST()などに委任されます。
私の意見では、ディスパッチ方法でユーザーのアクセス許可を検証できます。たとえば、あなたが属性プロファイルによってユーザーを検証することができ、次のいずれか
def dispatch(self, request, *args, **kwargs):
"""Return 403 if flag is not set in a user profile. """
if not request.user.profile.has_flag:
return HttpResponseForbidden()
return super().dispatch(request, *args, **kwargs)
やユーザー権限によって:
def dispatch(self, request, *args, **kwargs):
"""Return 403 if user does not have specific permission. """
if not request.user.has_perm('client_permission.client_edit'):
return HttpResponseForbidden()
return super().dispatch(request, *args, **kwargs)
あなたがいない要求ユーザが、クライアント自体を検証したい場合は取得中にあなたがクライアントのアクセス許可を確認することができ対象:https://docs.djangoproject.com/en/1.11/ref/class-based-views/base/#django.views.generic.base.View.dispatch
:
from django.core.exceptions import PermissionDenied
def get_object(self, *args, **kwargs):
client = super().get_object(*args, **kwargs)
if not client.profile.has_flag:
# The PermissionDenied exception is raised
# when a user does not have permission
# to perform the action requested.
raise PermissionDenied
return client
あなたがここに発送方法についての詳細を読むことができます
Django Rest Frameworkを使用して権限をチェックするタスクがある場合は、permission_classes(http://www.django-rest-framework.org/api-guide/permissions/を参照)を使用することもできます。あなたがやるべきことはすべて、独自のパーミッションクラスを定義することです:
from rest_framework.permissions import BasePermission
class UserHasFlag(BasePermission):
"""Check that user has a flag set in a profile. """
def has_permission(self, request, view):
return request.user.profile.has_flag
あなたのビューは次のように見ていることでしょう://ドキュメント:
from rest_framework.permissions import IsAuthenticated
class ClientUpdateView(UpdateView):
permission_classes = (IsAuthenticated, UserHasFlag)
model = Client
template_name = "clients/update.html"
pk_url_kwarg = 'client_id'
fields = [
'first_name',
'last_name',
'email',
'phone',
'phone_2',
'address',
]
は[ 'UserPassesTestMixin'](HTTPSを見てください.djangoproject.com/ja/1.11/topics/auth/default /#django.contrib.auth.mixins。UserPassesTestMixin) – Alasdair
ありがとう!それは完璧に動作しますが、権限を持っていなければユーザーをリダイレクトできますが、一部のビューでは、ユーザーが認証されているかどうかを最初に確認し、ログインページに送信しない場合は認証します属性をアクティブにしているかどうかをチェックします(ホームに送信せずにメッセージを表示する場合)。あなたはCBVでこれを行うための何らかの方法を知っていますか?再度、感謝します! – marcosgue
ユーザーがログインしているかどうかに応じて、 'get_login_url'メソッドをオーバーライドして別のURLを返すことができます。 – Alasdair