from django.shortcuts import render_to_response
from django.core.context_processors import csrf
def home(request):
c = {}
c.update(csrf(request))
if request.method == "POST":
username = request.POST.get("username", '')
password = request.POST.get("password", '')
return render_to_response("login_home.html", {"username":username, "password":password})
else:
return render_to_response("login_home.html")
{% extends "base.html" %}
{% block page %}
{{ name }}
<form action = "/blog/home/" method = "POST">{% csrf_token %}
<input type = "text" name = "username" placeholder = "username">
<input type = "text" name = "password" placeholder = "password">
<input type = "submit">
</form>
{{ username }}
{{ password }}
{% endblock %}
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^home/$', 'blog.views.home'),
)
^^这是我的档案。问题是我提交表格后得到的错误:
Forbidden (403)
CSRF verification failed. Request aborted.
我不确定我忘记或遗失的是什么。我猜它在视图功能的某个地方。有人能指出我失踪了吗?
感谢您的帮助。
答案 0 :(得分:1)
您需要使用RequestContext
或使用c.update(csrf(request))
返回您创建的上下文:
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
使用RequestContext,它始终使用'django.core.context_processors.csrf'(无论您的TEMPLATE_CONTEXT_PROCESSORS设置如何)。如果您使用的是通用视图或contrib应用程序,则您已经被覆盖,因为这些应用程序始终使用RequestContext。
- 醇>
手动导入并使用处理器生成CSRF令牌并将其添加到模板上下文中。 e.g ....
return render_to_response("login_home.html",
{"username":username, "password":password}
context_instance=RequestContext(request))