AoA公司 我是Django的新手,我试图从POST获取数据,但是没有设置错误CSRF cookie,我试图通过google在google和stackoverflow上找到解决方案,但是失败了
这是密码
from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context
from django.template import RequestContext
from django.core.context_processors import csrf
from django.shortcuts import render_to_response
def search_Post(request):
if request.method == 'POST':
c = {}
c.update(csrf(request))
# ... view code here
return render_to_response("search.html", c)
def search_Page(request):
name='Awais you have visited my website :P'
t = get_template('search.html')
html = t.render(Context({'name':name}))
return HttpResponse(html)
<p>
{{ name }}
<form method="POST" action="/save/">
{% csrf_token %}
<textarea name="content" rows="20" cols="60">{{content}}</textarea><br>
<input type="submit" value="Save Page"/>
</form>
<div> Cant figure out any solution! :( </div>
</p>
url(r'^home/$', 'contacts.views.home_Page'),
url(r'^save/$', 'contacts.views.search_Post'),
url(r'^edit/$', 'contacts.views.edit_Page'),
url(r'^search/$', 'contacts.views.search_Page'),
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.csrf',
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.request',
'django.contrib.messages.context_processors.messages'
)
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',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
从修复HTML开始(您忘记了=):
另外:
您使用这两种方法将CSRF令牌传递给模板处理器
和请求上下文,只要一个就足够了,see docs。但你用错了地方,因为你是在满足“邮政”的要求。当浏览器填写表单并希望获得结果时,通常会发送这些请求。
浏览器呈现home.html,向服务器发送GET请求,服务器由
你的代码的一部分。在那里,你不能使用任何手段传递csrf令牌。因此,当调用模板处理器
get_template().render()
时,is的上下文中没有标记,因此只需忽略模板中的{%csrf_token%}代码。因此,您要么在t.render(…)视图中使用RequestContext
,要么将c
dict传递给您。您可以在浏览器窗口中检查生成的表单。
更新
在
seetings.py
中,在'django.core.context_processors.csrf'
之后添加一个逗号,现在的方式是,它只是连接字符串。应该是:
我也遇到了同样的问题,通过将ensure_csrf_cookie decorator添加到您的视图中解决了这个问题:
它将在浏览器cookie中设置csrftoken,您可以这样制作ajax
相关问题 更多 >
编程相关推荐