403 CSRF令牌丢失或在

2024-09-28 22:02:30 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,Django有问题,我有一个错误:

CSRF令牌丢失或不正确。在

我的代码是:

 <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我有:

^{pr2}$

请帮忙,我找了其他问题,但没有解决我的问题。在

谢谢!在


Tags: namebrforminputvaluetypedeul
3条回答

问题是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快捷方式比手动加载和呈现模板更容易。在

^{pr2}$

要使CSRF令牌正常工作,您需要在使用模板时包含一个^{}。在

为了避免额外的样板,django附带了一个快捷方式函数,它在呈现模板时自动为您添加这个功能。这是^{}。在

用这个改变你的观点。在

from django.shortcuts import render

def guardar(request):
    return render(request, 'registro/index.html', {})

关于更多信息,Django文档的this page非常有用。在

改变你的视图.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)

相关问题 更多 >