django POST表单的使用

环境如下:django 1.7.8 版本.

1.在POST表单的时候会出现这个错误提示.

django POST表单的使用

禁止访问 (403)



CSRF验证失败. 相应中断.

Help



Reason given for failure:



    CSRF token missing or incorrect.

    



In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. 
For POST forms, you need to ensure:
Your browser is accepting cookies. The view function passes a request to the template's render method. In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL. If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well
as those that accept the POST data. You
're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and
only the initial error message will be displayed.
You can customize this page using the CSRF_FAILURE_VIEW setting.

无耐.看上面的提示是防止CSRF.也就是安全方面的,防止跨站请求伪造.

根据上面的提示来.需要有{% csrf_token %},那就在from表单中添加下

添加后的html代码如下.

{% extends "base.html" %}

{% block title %}

    hello

{% endblock %}

{% block content %}

    <div class="container">



      <form class="form-signin" action="/login_webmail/" method='post'>{% csrf_token %}

        <h2 class="form-signin-heading">Please sign in</h2>

        <label class="sr-only" for="inputUserName">Email address/UserName</label>

        <input type="text" autofocus="" required="" placeholder="Email address/UserName" class="form-control" id="inputUserName" name="inputUserName">

        <label class="sr-only" for="inputPassword">Password</label>

        <input type="password" required="" placeholder="Password" class="form-control" id="inputPassword">

        <div class="checkbox">

          <label>

            <input type="checkbox" value="remember-me"> Remember me

          </label>

        </div>

        <button type="submit" class="btn btn-lg btn-primary btn-block">Sign in</button>

      </form>



    </div> <!-- /container -->



{% endblock %}

重点是from后面的{% csrf_token %}

根据官网的提示及百度.

views.py的代码更改如下,主要的是return render_to_response('index.html',context_instance=RequestContext(request))

后面的 **context_instance=RequestContext(request)**

 

from django.http import HttpResponse

import datetime

from django.shortcuts import render_to_response

#post

from django.template import RequestContext

#post



def webindex(request):

    return render_to_response('index.html',context_instance=RequestContext(request))    

 

接收的views视图方法

def login_webmail(request):

    if 'inputUserName' in request.POST:

        message = request.POST['inputUserName']

    else:

        message = "Not inputUserName"

    return render_to_response('test_post.html',{'test_post_name':message})

    

再测试.是否OK了.总结.只有两个步骤.

1.在from 表单中添加 {% csrf_token %}

2.在视图中添加 from django.template import RequestContext 导入项,并且在return 返回中添加context_instance=RequestContext(request)

然后就OK了.看来也是很简单的.新手可以参考.

 

你可能感兴趣的:(django)