ユーザーモデルのRESTAPIには次の関数があります。 POSTリクエストのみにAllowAnyパーミッションを設定したい。誰かが私を助けてくれませんか。
class UserList(APIView):
"""Get and post users data."""
def get(self, request, format=None):
"""Get users."""
users = User.objects.all()
serialized_users = UserSerializer(users, many=True)
return Response(serialized_users.data)
def post(self, request, format=None):
"""Post users."""
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
IsPostOrIsAuthenticated
への無制限のアクセスを許可する カスタム権限クラスPOST
を書くことができますリクエストしますが、認証されたGET
リクエストのみを許可します。
カスタム権限IsPostOrIsAuthenticated
を実装するには、BasePermission
クラスをオーバーライドし、.has_permission(self, request, view)
メソッドを実装します。メソッドは、リクエストにアクセスを許可する必要がある場合はTrue
を返し、それ以外の場合はFalse
を返す必要があります。
from rest_framework import permissions
class IsPostOrIsAuthenticated(permissions.BasePermission):
def has_permission(self, request, view):
# allow all POST requests
if request.method == 'POST':
return True
# Otherwise, only allow authenticated requests
# Post Django 1.10, 'is_authenticated' is a read-only attribute
return request.user and request.user.is_authenticated
したがって、すべてのPOST
リクエストには無制限のアクセスが許可されます。その他のリクエストについては、認証が必要になります。
次に、このカスタムアクセス許可クラスをグローバル設定に含める必要があります。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'my_app.permissions.IsPostOrIsAuthenticated',
)
}
http://www.Django-rest-framework.org/api-guide/permissions/
上記のURLに従って、1つのカスタム権限クラスを作成する必要があります
class ExampleView(APIView):
permission_classes = (MyCustomAuthenticated,)
POSTおよびGETに基づいてMyCUstomAuthenticated内でAllowAnyまたはIsAuthenticatedを使用して、独自のロジックを記述します