django模板中生成csrf_token的不同方式

系统环境 CENTOS 6.4
python 2.7.6
django 1.7.1

当post提交表单的的时候,是需要 csrf_token的,

它需要把request也添加到模板中,第二到第四个例子,会生成 csrf_token

当你用post提交表单,但是没有csrf_token的时候,会提示下面的错误:

    Forbidden (403)
CSRF verification failed. Request aborted.

两种可选解决方式:

  • 注释 settings.py中的MIDDLEWARE_CLASSES 中的 'django.middleware.csrf.CsrfViewMiddleware',*
  • 在 HTML的 表单中添加{% csrf_token %}, 注意不是 {{ csrf_token }},

    {{ csrf_token}} 生成一个字符串,比如:lV1qtJ6GdSLChZLE6yYH37f10mN7Pjrd;

    {% csrf_token %} 是生成一个hidden的字段,比如<input type='hidden' name='csrfmiddlewaretoken' value='lV1qtJ6GdSLChZLE6yYH37f10mN7Pjrd' />

django的csrf middleware 是保护django免受csrf攻击的!

它需要把request也添加到模板中,第二到第四个例子,会生成 csrf_token

下面4个例子中,主要是为了展示什么情况,才有csrf_token,所以才使用了{{ csrf_token }}, 当表单中使用的时候,必须使用 {% csrf_token %}!!!

django的测试环境,是django tutorial中的mysite和polls

django-admin startproject mysite
cd mysite
python manage.py startapp polls

mysite/views.py

from django.http import HttpResponse
from django.shortcuts import render, render_to_response
from django.template import RequestContext, loader, Context def my_view(request):
t = loader.get_template('test.html')
c = Context({'name':'my_view'})
return HttpResponse(t.render(c),
content_type="text/html")
def my_view1(request):
t = loader.get_template('test.html')
c = RequestContext(request, {'name':'my_view1'})
return HttpResponse(t.render(c),
content_type="text/html") def my_view2(request):
return render_to_response('test.html', {'name':'my_view2'},
content_type="text/html",
context_instance=RequestContext(request),
) def my_view3(request):
return render(request, 'test.html', {"name":"my_view3"},
content_type="text/html")

模板test.html的内容:

test.html模板必须放在template目录中,而不可以在其子目录中

polls/templates/test.html

<html>
<body> <h1>{{ name }}</h1>
<h1>{{ csrf_token }}</h1> </body>
</html>

mysite 中 的 urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin urlpatterns = patterns('',
url(r'^polls/', include('polls.urls', namespace='polls')),
url(r'^admin/', include(admin.site.urls)),
)

polls 中的 urls.py

urlpatterns = patterns('',
url(r'^my_view/$', views.my_view, name='my_view'),
url(r'^my_view1/$', views.my_view1, name='my_view1'),
url(r'^my_view2/$', views.my_view2, name='my_view2'),
url(r'^my_view3/$', views.my_view3, name='my_view3'),
)

访问4个链接,得到下面的结果:

django csrf_token生成的更多相关文章

  1. JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决

    JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...

  2. Django中生成PDF(一)

    Django中生成PDF(一) 需求描述:     某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成PDF并存档.PDF文件中需要有企业LOGO.文字描述等信息.其展现形式 ...

  3. Django 反向生成 从数据库生成Model

    Django 反向生成 从数据库生成Model 使用Django生成Model python manage.py inspectdb或python manage.py inspectdb > m ...

  4. 数据库和Django model 生成和反向生成

    Django 脚本生成数据表 建立映射关系 如果询问时区时间,选1 然后输入timezone.now() python manage.py makemigrations (如果有子应用的话子应用名称填 ...

  5. django migrate生成表结构DateTimeField 类型加了6位精度别的框架无法调用的问题?

    背景介绍 django migrate 生成表结构时,对于DateTimeField 类型的处理是加了6位精度的,只用django处理是没有任何问题的,但是如何别的框架来读取这种字段会读取不到该字段值 ...

  6. Django中生成随机验证码(pillow模块的使用)

    Django中生成随机验证码 1.html中a标签的设置 <img src="/get_validcode_img/" alt=""> 2.view ...

  7. day56:django:csrf_token&文件上传

    目录 1.csrf介绍 2.django实现csrf_token认证 3.django实现文件上传 csrf介绍 什么是csrf? csrf:跨站请求伪造.攻击者通过HTTP请求将数据传送到服务器,从 ...

  8. [python]使用django快速生成自己的博客小站,含详细部署方法

    前言 人生苦短,我用python 这是之前经常听到的一句笑谈.因为新公司很多业务是用的python语言,所以这几天也一直在学习python的一些东西. 作为一个之前一直java后端的开发人员,对比ja ...

  9. django 动态生成PDF文件

    可以通过开源的Python PDF库ReportLab来实现PDF文件的动态生成. 一.安装ReportLab ReportLab库在PyPI上提供,可以使用pip来安装: $ pip install ...

随机推荐

  1. css--左右visibility建立 “collapse”值问题

    1.您可能已使用visibility一千次,最常用的是visible和hidden.它用来显示或隐藏元素. 有第三很少已使用的值它是collapse,在表格的行,列中使用有差异外,他和hidden的作 ...

  2. Unity判断网络连接类型

    使用NetworkReachability判断手机游戏当前的网络连接类型,是wifi还是234G using UnityEngine; using System.Collections; public ...

  3. hdu4858 项目管理 bestcoder round1 B

    唔..弱弱的暴力水果 0操作时,将v加到u上,能够直接把v加到u相连的点上,这样输出时直接输出要求点的值. 布这种话反正我是超时了.. #include<cstdio> #include& ...

  4. Velocity脚本新手教程

    从网络下的数据汇编 一.Velocity简介 Velocity它是Apache该公司的开源产品,它是一套基于Java语言模板引擎,背景可以非常灵活的数据与模板文件一起反对.他直言不讳地说:,人使用模板 ...

  5. 【C语言探索之旅】 第二部分第六课:创建你自己的变量类型

    内容简介 1.课程大纲 2.第二部分第六课: 创建你自己的变量类型 3.第二部分第七课预告:   文件读写 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...

  6. 声明式编程思想和EEPlat

    声明式编程定义 声明式编程(英语:Declarativeprogramming)它是一种编程范式.程相对立.它描写叙述目目标性质,让计算机明白目标,而非流程. 声明式编程不用告诉电脑问题领域.从而避免 ...

  7. iOS 中国排序

    这里分享一个中国某种方便的方法,我们放在一起的人脉资源后,方便的类别,使用自己的包, 此处所使用的方法贴,源代码可以在本文的结尾下载. 要记得加头文件 #import "NSArray+So ...

  8. ActivatedEventArgs.IsApplicationInstancePreserved 属性

    ActivatedEventArgs IsApplicationInstancePreserved 如果 ApplicationInstancePreserved 为 true,则表示该应用程序已休眠 ...

  9. 网络广告公司的恐慌 XSS广告终结者(html5新特性)

    人们在平时网络冲浪的时候,有时候会发现当前网站有很多莫名其妙的广告,这些广告会被导向到站外. 这些广告可能是你安装了一些免费网络软件后强制安装的浏览器插件导致的. 譬如chrome浏览器:

  10. 左右TS分析流

    字节.在TS流里能够填入非常多类型的数据.如视频.音频.自己定义信息等.他的包的结构为,包头为4个字节,负载为184个字节(这184个字节不一定都是有效数据.有一些可能为填充数据). 工作形式: 由于 ...