Python 403-CSRF令牌丢失或不正确
你好,我对Django有问题,我有一个错误: CSRF令牌丢失或不正确 我的代码是:Python 403-CSRF令牌丢失或不正确,python,django,Python,Django,你好,我对Django有问题,我有一个错误: CSRF令牌丢失或不正确 我的代码是: <h1>Registro de llamadas</h1> <form action="{% url 'registro:guardar' %}" method="post"> {% csrf_token %} Duracion: <input type="text" name="duracion" /> </br>
<h1>Registro de llamadas</h1>
<form action="{% url 'registro:guardar' %}" method="post">
{% csrf_token %}
Duracion: <input type="text" name="duracion" /> </br>
Tipo de llamada:
<select name="tipo" form="carform">
<option value="1">Local</option>
<option value="2">Nacional</option>
<option value="3">Internacional</option>
</select>
</br>
<input type="submit" value="Grabar" />
</form>
{% if llamadas %}
<ul>
{% for ll in llamadas %}
<li><a href="a">{{ ll.duracion }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No tenemos ninguna llamada</p>
{% endif %}
请帮忙,我搜索了其他问题,但没有解决我的问题
谢谢 更改视图.py:
from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import render
@csrf_exempt
def guardar(request,username=None, errmsg=None):
template = 'registro/index.html'
ctx = {}
render(request, template, ctx)
要使CSRF令牌正常工作,您需要在使用模板时包含一个
from django.shortcuts import render
def index(request):
return render(request, 'registro/index.html', {})
def guardar(request):
return render(request, 'registro/index.html', {})
为了避免额外的样板文件,django附带了一个快捷功能,在呈现模板时自动为您添加此功能。这是
若要使用此选项,请将视图更改为
from django.shortcuts import render
def guardar(request):
return render(request, 'registro/index.html', {})
有关Django文档的更多信息非常有用。问题在于
request
是该方法的第二个参数,但您将其作为第一个参数传递
您可以按如下方式修复视图:
def index(request):
template = loader.get_template('registro/index.html')
return HttpResponse(template.render(request=request))
def guardar(request):
template = loader.get_template('registro/index.html')
return HttpResponse(template.render(request=request))
正如Simon在回答中所建议的那样,使用render
快捷方式比手动加载和呈现模板更容易
from django.shortcuts import render
def index(request):
return render(request, 'registro/index.html', {})
def guardar(request):
return render(request, 'registro/index.html', {})
不,没有任何更改我编辑了该视图,请重新尝试。请不要推荐
render\u to\u response
,它已被render
淘汰多年。谢谢,我不知道它render
快捷方式使用模板名称(例如“registro/index.html”)。您有'django.middleware.csrf.CsrfViewMiddleware',
在您的中间件设置中?是的,我有CsrfViewMiddleware