环境如下:django 1.7.8 版本.

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

  1. 禁止访问 (403)
  2.  
  3. CSRF验证失败. 相应中断.
  4. Help
  5.  
  6. Reason given for failure:
  7.  
  8. CSRF token missing or incorrect.
  9.  
  10. 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:
  11.  
  12. Your browser is accepting cookies.
  13. The view function passes a request to the template's render method.
  14. In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
  15. 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.
  16.  
  17. 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.
  18.  
  19. You can customize this page using the CSRF_FAILURE_VIEW setting.

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

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

添加后的html代码如下.

  1. {% extends "base.html" %}
  2. {% block title %}
  3. hello
  4. {% endblock %}
  5. {% block content %}
  6. <div class="container">
  7.  
  8. <form class="form-signin" action="/login_webmail/" method='post'>{% csrf_token %}
  9. <h2 class="form-signin-heading">Please sign in</h2>
  10. <label class="sr-only" for="inputUserName">Email address/UserName</label>
  11. <input type="text" autofocus="" required="" placeholder="Email address/UserName" class="form-control" id="inputUserName" name="inputUserName">
  12. <label class="sr-only" for="inputPassword">Password</label>
  13. <input type="password" required="" placeholder="Password" class="form-control" id="inputPassword">
  14. <div class="checkbox">
  15. <label>
  16. <input type="checkbox" value="remember-me"> Remember me
  17. </label>
  18. </div>
  19. <button type="submit" class="btn btn-lg btn-primary btn-block">Sign in</button>
  20. </form>
  21.  
  22. </div> <!-- /container -->
  23.  
  24. {% endblock %}

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

根据官网的提示及百度.

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

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

  1. from django.http import HttpResponse
  2. import datetime
  3. from django.shortcuts import render_to_response
  4. #post
  5. from django.template import RequestContext
  6. #post
  7.  
  8. def webindex(request):
  9. return render_to_response('index.html',context_instance=RequestContext(request))

接收的views视图方法

  1. def login_webmail(request):
  2. if 'inputUserName' in request.POST:
  3. message = request.POST['inputUserName']
  4. else:
  5. message = "Not inputUserName"
  6. 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了.看来也是很简单的.新手可以参考.

---下面修改于2016-12-08好吧!要修改下上面的说法,好久以前的文章了,但还是要修改下,以免有再为此纠结的同学。

上面views的方法中,使用render_to_response的时候,仍可能会有问题的现象的话,使用下面的render则不会有问题,如:

  1. return render(request,'test.html',{'uname':request.user,'error':error,'jc':jc})

其它的不用修改,仅将render_to_response修改为render,并且返回的值也相应的修改下,则就可以了。

这样在from下面会有一个隐藏的input的标签:

个人总结下,注意settings中的引用,还有html文件表单后{% csrf_token %},及在views中使用render进行返回就可以了。如果再有问题,欢迎留言下面,小伙伴一起看一下。

django POST表单的使用的更多相关文章

  1. python运维开发(十九)----Django后台表单验证、session、cookie、model操作

    内容目录: Django后台表单验证 CSRF加密传输 session.cookie model数据库操作 Django后台Form表单验证 Django中Form一般有2种功能: 1.用于做用户提交 ...

  2. django form表单验证

    一. django form表单验证引入 有时时候我们需要使用get,post,put等方式在前台HTML页面提交一些数据到后台处理例 ; <!DOCTYPE html> <html ...

  3. django from表单验证

    django from表单验证   实现:表单验证 工程示例: urls.py 1 2 3 4 5 6 7 8 9 from django.conf.urls import url from djan ...

  4. django Form表单的使用

    Form django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form ...

  5. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

    一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...

  6. django创建表单以及表单数据类型和属性

    08.15自我总结 关于django的表单不同关系之间的创建 一.不同关系之间的创建 1.一对一 举例 母表:userinfo id name age 1 张三 12 2 李四 58 字表:priva ...

  7. Django form表单 组件

    目录 Django form表单 组件 Form 组件介绍 普通方式手写注册功能 使用form组件实现注册功能 Form 常用字段与插件 常用字段(必备) 字段参数(必备) 内置验证(必备) 自定义效 ...

  8. [转]django自定义表单提交

    原文网址:http://www.cnblogs.com/retop/p/4677148.html 注:本人使用的Django1.8.3版本进行测试 除了使用Django内置表单,有时往往我们需要自定义 ...

  9. Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)

    通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...

  10. 关于django post表单

    CSRF verification failed. Request aborted. 默认会出现该状况,解决办法: 1. 使用requestcontext from django.template i ...

随机推荐

  1. vue pros 子组件接收父组件传递的值

    1.子组件 ItemTemplate.vue <template> <div class="item"> <li v-for="pdata ...

  2. centos7里面docker不能下载本地源

    报这种错的 编辑这个文件 加上这一段内容 rstart重启,搞定.

  3. spring注解之@Lazy

    今天主要从以下几方面来介绍一下@Lazy注解 @Lazy注解是什么 @Lazy注解怎么使用 1,@Lazy注解是什么   @Lazy注解用于标识bean是否需要延迟加载,源码如下: @Target({ ...

  4. Loading Assets from AssetBundles

    [Loading Assets from AssetBundles] 1.LoadAsset GameObject gameObject = loadedAssetBundle.LoadAsset&l ...

  5. day12 装饰器的模版

    1.什么是装饰器 装饰器指的是为被装饰对象(别人)添加新功能的工具 装饰器本身可以是任意可调用对象 被装饰器对象也可以是任意可调用对象 2.为何要用装饰器 开放封闭原则:指的是对修改封闭,对扩展开放 ...

  6. Django model 中的 class Meta 详解

    Django model 中的 class Meta 详解 通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(mode ...

  7. preg_match一些问题

    <?php$string = 'The quick brown fox jumps over the lazy dog.';$patterns = array();$patterns[0] =  ...

  8. AI图谱

  9. fullCalendar插件基本使用

    效果图 html代码,需要引入jquery,layui,fullCalendar <!DOCTYPE html> <html lang="en"> < ...

  10. 线程 Thread Handler

    new Thread(new Runnable() { @Override public void run() { Message msg = new Message(); msg.what = 0; ...