CSRF 令牌丢失或不正确 - Django
CSRF token missing or incorrect - Django
我正在尝试构建一个 Django webapp 来测试我用 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)
此外,因为我的视图 returns 模板 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 token missing or incorrect.
我读了另一篇关于堆栈溢出的文章,关于在 render()
函数中不使用 request
作为参数,但我正在这样做。
怎么了?我该怎么做才能修复此错误?谢谢。
您需要将 {% 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>
它将以这种方式工作。
我正在尝试构建一个 Django webapp 来测试我用 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)
此外,因为我的视图 returns 模板 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 token missing or incorrect.
我读了另一篇关于堆栈溢出的文章,关于在 render()
函数中不使用 request
作为参数,但我正在这样做。
怎么了?我该怎么做才能修复此错误?谢谢。
您需要将 {% 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>
它将以这种方式工作。