2016-12-29 9 views
0

Я пытаюсь исключить проверку CSRF для представления, которое обрабатывает запрос POST API REST, но я все еще получаю ошибку 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

Проверка CSRF не подходит для просмотра send_money_api(...). Просто добавьте декоратор @csrf_exempt над вторым видом.

Смежные вопросы