【发布时间】:2012-03-01 13:42:17
【问题描述】:
两天时间在 Google、stackoverflow 和 docs.djangoproject.com 中寻找解决 CSRF 问题的方法。
免责声明,我是 Django 的初学者,并且正在阅读本书 django 的权威指南 - 正确的网络开发。 好吧,显然我搞错了 :-(
请参阅下面这样的尝试,看看您是否可以指出任何错误,因为我已经尝试了有关 stackoverflow 的所有建议,但还没有运气:
view.py:
from django.shortcuts import render_to_response
from django.template import RequestContext
def add_vehicle(request):
return render_to_response('vehicle.html', RequestContext(request, {}))
vehicle.html:
{% extends "base.html" %}
{% block title %}Vehicle Registration{% endblock %}
{% block content %}
<html>
<head>
</head>
<body>
<form action="/vehicle/" method="post"> {% csrf_token %}
<table width=100%>
<tr>
<td>Reg #:</td>
<td><input type="text" name="regnumber"></td>
<td></td>
</tr>
<tr>
<td>Model:</td>
<td><input type="text" name="model"></td>
<td></td>
</tr>
<tr>
<td>Manufacturer:</td>
<td><input type="text" name="manufacturer"></td>
<td></td>
</tr>
<tr>
<td>Year:</td>
<td><input type="text" name="year"></td>
<td></td>
</tr>
<tr>
<td>Chassis #:</td>
<td><input type="text" name="chasisnumber"></td>
<td></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Submit">
<input type="submit" value="Clear">
</td>
<td></td>
</tr>
</table>
</form>
</body>
</html>
{% endblock %}
我希望 stackoverflow 的代码不会太多。
现在,我不断收到 CSRF 令牌丢失或不正确。
请帮忙。
编辑(添加错误详情)
settings.py 如下所示:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
这是我打开 vehicle.html 页面时控制台显示的内容:
warnings.warn("A {% csrf_token %} was used in a template, but the context did not provide the value. This is usually caused by not using RequestContext.")
【问题讨论】:
-
-1:“我知道,以前有人问过!”但是您拒绝搜索或引用它?太粗鲁了。
-
抱歉显得粗鲁。但是我查看了所有提出的问题和提供的所有答案,并觉得在同一问题上添加另一个问题是错误的,但我别无选择。实际上,目的是告诉窥视者,我很欣赏这个问题是重复的,但对我的具体情况没有答案。我的坏
-
你有多个 Django 站点在 Apache 下的 mod_wsgi 中运行吗?
-
@S.Lott:没有。只有一个站点。我什至还没有设置Apache。使用 django 附带的默认 Web 服务器。谢谢。
-
还有两件事。 (1) 复制和粘贴代码时要非常小心。您的
MIDDLEWARE_CLASSES缺少一些引号。要么你的代码不好,要么你没有仔细复制和粘贴。 (2) 由于您在使用RequestContext时遇到问题,您需要查看docs.djangoproject.com/en/1.3/ref/templates/api/…。您发布的代码不与文档完全相同。