2016-12-29 2 views
0

REST API POST 요청을 처리하는 뷰에 대해 CSRF 유효성 검사를 면제하려하지만 여전히 CSRF verification failed 오류가 발생합니다.@csrf_exempt가 나머지 api에 대해 작동하지 않습니다.

나는 this question 주어진 솔루션을 시도하고 작동하지 않았다.

내 코드 :

sendmoney REST API를보기 :

@api_view(["POST"])                   
@authentication_classes([TokenAuthentication,])            
@permission_classes([IsAuthenticated, ])              
@csrf_exempt                     
def send_money(request):                  
    if request.method == "POST":                
     data = JSONParser().parse(request)             
     success = send_money_api(request, data)            
     if success["status"]:                 
      return Response(status=status.HTTP_202_ACCEPTED)         
     else:                     
      return Response({"error": success["errors"]}, status=status.HTTP_400_BAD_REQUEST) 

send_money_api 방법 :

def send_money_api(request, data): 
    if data["amount"] and data["to"]: 
     wallet = Wallet.objects.get(username=request.user.username) 
     users = User.objects.all() 
     users_names = [] 
     for user in users: 
      users_names.append(user) 
     if int(data["amount"]) > int(wallet.amount): 
      return {"status": False, "errors": "Withdraw amount greater than balance"} 
     elif data["to"] == "ravinkohli" and data["to"] == request.user.username and data["to"] not in users_names: 
      return {"status": False, "errors": "Invalid recipient"} 
     else: 
      wallet.subtract_money(data["amount"]) 
      wallet.save() 
      transaction = Transaction(from_name=request.user.username, wallet_id=wallet, date=datetime.datetime.now(), 
             to=data['to'], amount=data["amount"]) 
      transaction.save() 
      return {"status": True} 
    else: 
     return {"status": False, "errors": "Missing content"} 

오류

Forbidden (403) 
CSRF verification failed. Request aborted. 
You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties. 
If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for 'same-origin' requests. 
,
+1

'@ csrf_exempt'도'send_money_api '에 없습니까? – Jedi

+0

보기가 아니기 때문에보기가 아니지만 작동했습니다. –

+1

문서 인용하기 : *보기 기능 또는 간단히보기는 단순히 웹 요청을 받아 응답을 반환하는 Python 함수입니다. – Jedi

답변

1

send_money_api(...)보기에 대해 CSRF 유효성 검사가 실패합니다. 두 번째보기 위에 @csrf_exempt 데코레이터를 추가하기 만하면됩니다.