CSRF-токен отсутствует или неверен - Django

Я пытаюсь создать Django webapp для тестирования функциональности конвертера Forex, который я установил с помощью pip. Я создал приложение с помощью django-startapp Converter и направил url /convert в представление convert_view().

Это мой views.py файл:

from django.shortcuts import render

from forex_python.converter import CurrencyRates

# Create your views here.

def convert_view(request):
    if request.method == "POST":
        c = CurrencyRates()
        print(c.convert('EUR', 'RON', request.POST.get('eur')))
    context = {}
    return render(request, "convert.html", context)

Также, поскольку мое представление возвращает шаблон convert.html, я создал там форму. Это мой convert.html:

{% csrf_token %}

<form action="." method="POST">
    <input type="text" name="eur" placeholder="EUR">
    <input type="submit">
</form>

Как вы можете видеть, это простая страница, внутри которой есть форма, перенаправляющая на ту же страницу и использующая POST для отправки данных. Она также использует тег {% csrf_token %}, так что проблем быть не должно.

Когда я перехожу на страницу /convert, все работает нормально. Я ввожу сумму денег, которую хочу перевести из EUR в RON, но когда я отправляю POST-запрос, меня перенаправляют на страницу ошибки, сообщая мне:

CSRF маркер отсутствует или неверен.

Я читал другую статью на stack overflow о том, что нельзя использовать request в качестве параметра в функции render(), но я это делаю.

Что не так? Что я могу сделать, чтобы исправить эту ошибку? Спасибо.

Вам нужно поместить {% csrf_token %} внутри тега <form> следующим образом:

<form action="." method="POST">
    {% csrf_token %}
    <input type="text" name="eur" placeholder="EUR">
    <input type="submit">
</form>

Пожалуйста, поместите {% csrf_token %} внутрь тега <form>. Это решит проблему.

{% csrf_token %} должен находиться внутри тега формы. как это

<form action="." method="POST">
{% csrf_token %}
       <input type="text" name="eur" placeholder="EUR">
       <input type="submit">
</form>

Причина этого в том, что {% csrf_token %} отображается вот так, а для того, чтобы ввод был отправлен вместе с формой, он должен находиться внутри элемента формы.

<input type="hidden" name="csrfmiddlewaretoken" value="0gdrskkUXOTenFZOWxhzQPZWavohLKrEaOm0aKj8KzOfeLFah9PihEdYG24Fl4F7">```

В вашем файле формы ошибка, ваш csrf_token должен быть внутри вашего тега, потому что django ожидает его вместе с данными формы, чтобы удостовериться, что то, что вы отправляете, безопасно. Попробуйте следующее

   `<form action="." method="POST">
          {% csrf_token %}
           <input type="text" name="eur" placeholder="EUR">
           <input type="submit">
     </form>`

Так и будет.

Вернуться на верх