2017-06-20 7 views
1

私はDjango Restフレームワークには新しく、apiビュートークン認証に苦しんでいます。続き は、私は全体ではなく、ビュー上のビューの一部にtokenauthenticationを適用する必要が私のコードtokenauthenticationを適用するリクエストのタイプに基づいてAPIビューの一部にDjango Restフレームワークを追加

@api_view(['POST']) 
@authentication_classes((TokenAuthentication,)) 
@permission_classes((IsAuthenticated,)) 

    def create_user(request): 
     """ 
     API to add user 
     """ 
     if request.method == 'POST': 
      request_body = request.data['users'] 
      created_user_ids = [] 
      # Data must be provided and validated 
      validation = UserSerializer(data=request_body, many=True) 
      validation.is_valid(raise_exception=True) 
      created_user_ids.append(validation.save()) 

      return Response(
       data={'users': [{'id': user_id} for user_id in created_user_ids]}, 
       content_type='json', 
       status=status.HTTP_201_CREATED 
      ) 

です。 認証は、要求のタイプに基づいて行う必要があります。 例: タイプがPOSTの場合は、認証は必要ありませんが、要求がPUT、GET、PATCHなどのように入力された場合、同じビューに対してリクエストを認証する必要があります。

答えて

0

IsAuthenticatedのアクセス許可をPOSTの場合を除いて表示することをお勧めします。

私はCustom Permissionを作成することをお勧め:

class IsAuthenticatedOrPost(IsAuthenticated): 
    def has_permission(self, request, view): 
     if request.method == 'POST': 
      return True 
     return super().has_permission(request, view) 

そして、あなたの@permission_classesデコレータに代わりIsAuthenticatedのそのクラスを使用します。

関連する問題