0

视图.py

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")

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 %}

网址.py

from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
    url(r'^home/$', 'blog.views.home'),
)

^^这是我的文件。问题是提交表单后出现的错误:

Forbidden (403)
CSRF verification failed. Request aborted.

我不确定我忘记或错过了什么。我猜它在视图函数中的某个地方。有人可以指出我缺少的一点吗?

谢谢你的帮助。

4

1 回答 1

1

您需要使用 aRequestContext或返回您创建的上下文c.update(csrf(request))

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

  1. 使用 RequestContext,它始终使用“django.core.context_processors.csrf”(无论您的 TEMPLATE_CONTEXT_PROCESSORS 设置如何)。如果您正在使用通用视图或贡献应用程序,那么您已经被覆盖,因为这些应用程序始终使用 RequestContext。

  2. 手动导入并使用处理器生成 CSRF 令牌并将其添加到模板上下文中。例如...

return render_to_response("login_home.html",
    {"username":username, "password":password}
    context_instance=RequestContext(request))
于 2013-11-02T21:42:14.763 回答