首先,我转到localhost:8000查看以下页面:
</div>
< form id="SignUpForm" name="form_signupform" method="post" action="hello/" >
{% csrf_token %}
< fieldset class="roundedCorners" style = "display: table;" >
< legend align="center"><em>Sign Up</em></legend>
< p></p>
< p style="display: block;">
etc.
在localhost:8000上,使用views.py中的函数提供上述页面视图:
def login(request):
c = {}
c = {'query': 'abcd.com'}
response = render_to_response('index.html', c,context_instance=RequestContext(request))
return response
在这里,在提供的页面源代码中,我可以看到如下的csrf值:
< form id="SignUpForm" name="form_signupform" method="post" action="hello/" >
< input type='hidden' name='csrfmiddlewaretoken'
value='rjbU4k8DY3EEBWVhlsgIYU3gEu4x3ctM' / >
< fieldset class="roundedCorners" style = "display: table;" >
< legend align="center"><em>Sign Up</em></legend>
< p >< /p >
< p style="display: block;">
etc.
按下提交按钮时,会调用另一个视图。在views.py
:
def hello(request):
if request.method == "POST":
return HttpResponseRedirect("genResp1.html")
else:
return HttpResponseRedirect("genResp2.html")
但是,按下提交按钮后,我收到以下错误:
Forbidden (403)
CSRF verification failed. Request aborted.
...
...
Help
Reason given for failure:
CSRF cookie not set.
::我已经咨询了a)django docs,b)stackoverflow.com,c)google等等。我已经尝试了所有可能的排列组合代码......但是恐怖从未改变过......(我可以设置cookie调用set_cookie函数...工作正常...但csrf cookie无法设置...为什么?)请不要搜索网络和写入解决方案。我已经搜索了最近6天。我已经尝试了所有形式的视图功能。其中一个是上面的。如果您已经完成了CSRF自己的工作并且正在运行,那么请写下你怎么做...(我使用的是python 3.4和django 1.7)
答案 0 :(得分:1)
通过将Asset
设置为CSRF_COOKIE_SECURE
来解决问题,因为我在开发计算机上没有使用HTTPS:
修改了包含以下行的文件False
:
settings.py
将其更改为:
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
答案 1 :(得分:0)
# CSRF_COOKIE_NAME = 'csrfmiddlewaretoken'
# CSRF_COOKIE_DOMAIN = 'localhost:8000' # your domain name
# CSRF_COOKIE_SECURE = False
# CSRF_COOKIE_HTTPONLY = False
# CSRF_COOKIE_AGE = None
# CSRF_COOKIE_USED = True
# CSRF_COOKIE_PATH = 'C:\\Users\\me\\Desktop\\cookFol'
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
...看到我注释掉那些并且它有效...... 上面的代码是一样的,可能是那些设置定制中有任何不匹配...