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

系统环境 CENTOS 6.4
python 2.7.6
django 1.7.1

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

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

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

  1. Forbidden (403)
  2. 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

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

mysite/views.py

  1. from django.http import HttpResponse
  2. from django.shortcuts import render, render_to_response
  3. from django.template import RequestContext, loader, Context
  4. def my_view(request):
  5. t = loader.get_template('test.html')
  6. c = Context({'name':'my_view'})
  7. return HttpResponse(t.render(c),
  8. content_type="text/html")
  9. def my_view1(request):
  10. t = loader.get_template('test.html')
  11. c = RequestContext(request, {'name':'my_view1'})
  12. return HttpResponse(t.render(c),
  13. content_type="text/html")
  14. def my_view2(request):
  15. return render_to_response('test.html', {'name':'my_view2'},
  16. content_type="text/html",
  17. context_instance=RequestContext(request),
  18. )
  19. def my_view3(request):
  20. return render(request, 'test.html', {"name":"my_view3"},
  21. content_type="text/html")

模板test.html的内容:

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

polls/templates/test.html

  1. <html>
  2. <body>
  3. <h1>{{ name }}</h1>
  4. <h1>{{ csrf_token }}</h1>
  5. </body>
  6. </html>

mysite 中 的 urls.py

  1. from django.conf.urls import patterns, include, url
  2. from django.contrib import admin
  3. urlpatterns = patterns('',
  4. url(r'^polls/', include('polls.urls', namespace='polls')),
  5. url(r'^admin/', include(admin.site.urls)),
  6. )

polls 中的 urls.py

  1. urlpatterns = patterns('',
  2. url(r'^my_view/$', views.my_view, name='my_view'),
  3. url(r'^my_view1/$', views.my_view1, name='my_view1'),
  4. url(r'^my_view2/$', views.my_view2, name='my_view2'),
  5. url(r'^my_view3/$', views.my_view3, name='my_view3'),
  6. )

访问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. cocos2dx --- Widget 载入中 CCNode

    如果说. Widget 有addChild()   与 addNode()  两个方法. 如今我要载入一个粒子特效进去,下图: Widget* layout = dynamic_cast<Wid ...

  2. 【iOS】随机三角瓷砖布局算法

    你已经看够iOS鉴于这些默认的正方形块,整齐地显示? 本篇给出一个随机算法设计的三角布局的瓷砖和实施. 这样的规则,并提出妥协随机排列间.它看起来很凌乱,不会有一个新事物. 重点是设计和实施,以实现布 ...

  3. DocFX

    微软开源全新的文档生成工具DocFX 微软放弃Sandcastle有些年头了,微软最近开源了全新的文档生成工具DocFX,目前支持C#和VB,类似JSDoc或Sphinx,可以从源代码中提取注释生成文 ...

  4. [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇)

    原文:[原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) .NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) 前言:接着上篇来. 系列文章链接: [ ...

  5. python学习——编码

    为了将各种不同的语言都包括在同一的字符集中,满足国际间的信息交流国际上制定了UNICODE字符集. 通过使用UNICODE字符集能够满足跨语言的文字处理,有效的避免乱码产生. 用法:在脚本中添加下面代 ...

  6. 复制(6)——分发者(Distributor)

    如简介中提到,分发者(Distributor)是SQLServer 复制过程的核心组件.因为它是控制和执行实际的数据移动的过程,并且存放了发布(Publications)和订阅(Subscriptio ...

  7. outlook 当关闭时最小化到任务栏完美的解决方案

    近期使用Outlook,但很发现easy退出关闭.不能达到最小化封. 在网上找了很长时间也用outlook on the desktop插件,但该插件安装后的执行错误和被遗弃. 最后,我发现了一个叫k ...

  8. oracle record is locked by another user

    这个问题的根源先说说:午后更改数据库表,保存更改后,却没有提交完整.突然,去什么地方调试,拔掉网线,然后插上网线,这个出现record is locked by another user错误.网上找原 ...

  9. opengl编程指南

    第一章 opengl简单介绍 1.1 什么是opengl opengl是图形硬件的一种软件接口.        1>渲染(rendering)是计算机依据模型创建图像的过程. 2>模型(m ...

  10. UVA714- Copying Books(最大最小化)

    意甲冠军:k手稿的部分成m部分,使每一个和最小 思路:典型最大值最小化问题,使用贪心+二分. 贪心的是每次尽量将元素往右边划分,二分查找最小的x满足m个连续的子序列和S(i)都不超过x. 由于输出的原 ...