我正在尝试创建一个基于 Django 分类广告应用程序的 Django 应用程序,但在尝试提交表单时出现错误:CSRF verification failed. Request aborted. Reason given for failure: CSRF token missing or incorrect.
我确实有一个表格中的{% csrf_token %}
:
<form method="post" action="{% url classifieds.views.create.checkout ad.pk %}">
{% csrf_token %}
<table>
{{ form }}
<tr>
<th><label>Total:</label></th>
<td><div id="total">Choose options above</div></td>
</tr>
</table>
</form>
我也在使用from django.template import RequestContext
我还在MIDDLEWARE_CLASSES中'django.middleware.csrf.CsrfViewMiddleware',
settings.py
在正确提交表单时,我还会缺少什么?
该函数如下所示:
def checkout(request, adId):
ad = get_object_or_404(Ad, pk=adId)
if request.method == 'POST':
form = CheckoutForm(request.POST)
if form.is_valid():
...
payment.save()
if django_settings.DEBUG:
paypal_form = PayPalPaymentsForm(initial=paypal_values).sandbox()
else:
paypal_form = PayPalPaymentsForm(initial=paypal_values).render()
return render_to_response('classifieds/paypal.html', {'form': paypal_form}, context_instance=RequestContext(request))
else:
form = CheckoutForm()
return render_to_response('classifieds/checkout.html', {'ad': ad, 'form': form}, context_instance=RequestContext(request))
感谢您的建议。
您是否使用了正确的RequestContext
,我不确定问题是否如此,但您也可以检查一下。如何使用它的步骤 3
在相应的视图函数中,确保正在使用"django.core.context_processors.csrf"上下文处理器。通常,这可以通过以下两种方式之一完成:
使用
- RequestContext,它始终使用"django.core.context_processors.csrf"(无论您的TEMPLATE_CONTEXT_PROCESSORS设置如何)。如果您使用的是通用视图或 contrib 应用程序,则您已经包含在内,因为这些应用程序在整个过程中都使用 RequestContext