2016-12-29 9 views
0

Ich versuche, CSRF-Validierung für eine Ansicht, die eine REST-API-POST-Anfrage behandelt, aber ich bekomme immer noch eine CSRF verification failed Fehler.@csrf_exempt funktioniert nicht für den Rest api

Ich habe versucht, die Lösung in this question gegeben und es hat nicht funktioniert.

Mein Code:

sendmoney REST API Ansicht:

@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 Methode:

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"} 

Fehler

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

Warum nicht '@ csrf_exempt' auf' send_money_api' auch? – Jedi

+0

Ich dachte, weil es keine Ansicht war, aber danke, es funktionierte –

+1

Anführen der Dokumente: * Eine Ansichtsfunktion, oder Ansicht für kurze, ist einfach eine Python-Funktion, die eine Webanforderung annimmt und eine Antwort zurückgibt. * – Jedi

Antwort

1

Die CSRF-Validierung schlägt für die Ansicht send_money_api(...) fehl. Fügen Sie einfach den @csrf_exempt Dekorateur über die zweite Ansicht hinzu.