Невозможно определить этот вариант. Проверка CSRF отлично работает во всех моих шаблонах Django. Здесь я пытаюсь отправить сообщение с клиента python, используя методы, которые я нашел в других сообщениях. Вызов client.get (url) предоставляет токен (например, отладчик показывает: client.cookies ['csrftoken'] = 'POqMV69MUPzey0nyLmifBglFDfBGDuo9'), но request.post() терпит неудачу с ошибкой 403, проверка CSRF не удалась. Что происходит?Проверка CSRF не выполняется на request.post()
Мои Джанго вид (с некоторой фиктивной вещи в методах):
class CameraUpload(View):
template_name = "account/templates/upload.html"
def get(self, request):
dummy = VideoForm()
return render(request, self.template_name, {'form': dummy})
def post(self, request):
dummy = VideoForm()
return render(request, self.template_name, {'form': dummy})
И клиент, который пытается сделать пост:
import requests
url = 'http://127.0.0.1:8000/account/camera_upload/'
client = requests.session()
client.get(url)
csrftoken = client.cookies['csrftoken']
payload = {
'csrfmiddlewaretoken': csrftoken,
'tag': '69'
}
r = requests.post(url, data=payload)
EDIT:
попытался добавить referer согласно this link, поэтому код теперь выглядит так:
r = requests.post(url, data=payload, headers=dict(Referer=url))
но такой же проблема есть.
у вас есть дополнительные предисловие слэш в вашем URL ака '/' Вы, вероятно, следует удалить, что –
, что слэш должен быть там. Удаление этого объекта приводит к следующей ошибке: «Вы вызываете этот URL через POST, но URL-адрес не заканчивается косой чертой, и у вас установлен APPEND_SLASH. Django не может перенаправлять URL-адрес косой черты при сохранении данных POST ...» – Gadzooks34
ну тогда следующий вопрос будет, почему у вас установлен 'APPEND_SLASH'? дополнительная косая черта обычно может повредить вещи особенно на переднем конце (javascript и т. д.) .. но я предполагаю, что, поскольку у вас есть это как настройка, это нормально? однако, не лучшая практика. моя догадка о том, что является неправильным, каждый раз, когда вы делаете запрос, устанавливаете файл cookie/сертификат, поэтому отправка одного из предыдущего запроса испортила следующий запрос .. но я не знаю, что предусмотрено. –