Postman - Запрещено (CSRF-токен отсутствует или неверен.)
У меня возникли проблемы с началом работы с postman - я использовал его раньше с Spring, но это мой первый опыт работы с Django.
У меня есть рабочий веб-сайт, все URL работают нормально. Когда я отправляю запрос post в postman на страницу, которая имеет csrftoken, я вижу токен в разделе cookies в результатах, но получаю следующую ошибку в выводе сервера:
Forbidden (CSRF token missing or incorrect.): /contact/
У меня есть токен в разделе headers
Я попробовал довольно много различных решений из stack overflow, например, добавить:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
...
CSRF_COOKIE_SECURE=False#I am over the localhost with http
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
),
Вот как выглядит вид
def contact(request):
"""Renders the contact page."""
assert isinstance(request, HttpRequest)
if request.method == 'GET':
form = ContactForm()
else:
form = ContactForm(request.POST)
if form.is_valid():
... sending email ...
return redirect('contact')
return HttpResponse(status=303)
return render(
request,
'app/contact.html',
{
'title':'Contact Us',
'year':datetime.now().year,
'form': form,
}
)
вы можете получить токен csrf в html, имея это в шаблоне django jinja
{{csrf_token}}
Отрендерите страницу, и у вас будет это значение. Затем используйте это значение как часть данных вашего POST-запроса:
'csrfmiddlewaretoken' : <csrf_token_value>