CSRF защита для просмотра с загрузкой API-запроса - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть это представление в моем приложении, которое вызывает API для загрузки PDF:

@login_required
def generateContractPdf(request):
   file_id = request.POST.get('contract')  
   contract_id = request.POST.get('contract')    
   payload = {"file_id": file_id}
   data = {"data": json.dumps(payload, default=str)}
   headers = {'content-type': 'application/json'}
   brokkr = os.environ.get("BROKKR_ADDRESS", default='localhost')
   response = requests.post('http://'+brokkr+':5000/contract', params=data, headers=headers)

   filename=str(contract_id)+".pdf"
   response = HttpResponse(response.content, content_type='application/pdf')
   response['Content-Disposition'] = 'attachment; filename="'+filename+'"'

   return response

Но я только что понял, что, если я не использую render (), CSRF не работает, так что это представление могут быть использованы.

Как я могу преобразовать его, чтобы сохранить защиту?

1 Ответ

0 голосов
/ 24 февраля 2020

Вы можете применить csrf_protect декоратор к вашему представлению для защиты CsrfViewMiddleware для представления.

from django.views.decorators.csrf import csrf_protect

@csrf_protect
def generateContractPdf(request):
    --- Your logic ---
...