django csrf_token生成
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生成的更多相关文章
- JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决
JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...
- Django中生成PDF(一)
Django中生成PDF(一) 需求描述: 某网站与其用户达成一致的协议,每份协议中都有用户相关的独特信息,且还需要生成PDF并存档.PDF文件中需要有企业LOGO.文字描述等信息.其展现形式 ...
- Django 反向生成 从数据库生成Model
Django 反向生成 从数据库生成Model 使用Django生成Model python manage.py inspectdb或python manage.py inspectdb > m ...
- 数据库和Django model 生成和反向生成
Django 脚本生成数据表 建立映射关系 如果询问时区时间,选1 然后输入timezone.now() python manage.py makemigrations (如果有子应用的话子应用名称填 ...
- django migrate生成表结构DateTimeField 类型加了6位精度别的框架无法调用的问题?
背景介绍 django migrate 生成表结构时,对于DateTimeField 类型的处理是加了6位精度的,只用django处理是没有任何问题的,但是如何别的框架来读取这种字段会读取不到该字段值 ...
- Django中生成随机验证码(pillow模块的使用)
Django中生成随机验证码 1.html中a标签的设置 <img src="/get_validcode_img/" alt=""> 2.view ...
- day56:django:csrf_token&文件上传
目录 1.csrf介绍 2.django实现csrf_token认证 3.django实现文件上传 csrf介绍 什么是csrf? csrf:跨站请求伪造.攻击者通过HTTP请求将数据传送到服务器,从 ...
- [python]使用django快速生成自己的博客小站,含详细部署方法
前言 人生苦短,我用python 这是之前经常听到的一句笑谈.因为新公司很多业务是用的python语言,所以这几天也一直在学习python的一些东西. 作为一个之前一直java后端的开发人员,对比ja ...
- django 动态生成PDF文件
可以通过开源的Python PDF库ReportLab来实现PDF文件的动态生成. 一.安装ReportLab ReportLab库在PyPI上提供,可以使用pip来安装: $ pip install ...
随机推荐
- 【程序员联盟】官网上线啦!coderunity.com
内容简介 欢天喜地,[程序员联盟]官网上线咯(此处应该有鸡蛋丢过来...) [程序员联盟]官网 大家也许会问:“这几天小编都没出文章,跑哪里happy去啦?是不是偷懒去了?” 小编:“臣妾冤枉啊.” ...
- 在JBuilder8在使用ANT
在JBuilder8中使用ANT 作者:翁驰原 在JBuilder8中.Ap ...
- pragma message任务
pragma message它是用来告诉程序猿,在编译的程序信息.和outputdebugstr则是告诉程序猿.程序在执行时期的信息. 以下就以一个样例来解说pragma message. 配合#if ...
- 【Android进阶】URL与URI的区别
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源. 而URL是uniform resource locator,统一资源定位器,它是一种具 ...
- 读书时间《JavaScript高级程序设计》二:面向对象
接着上次的进度,开始看第6章. 第6章 面向对象的程序设计 理解对象 创建自定义对象最简单的方式就是创建一个 Object 的实例,然后为它添加属性和方法. var person = new Obje ...
- php阅读csv文件类
php处理csv文件类: http://www.php100.com/cover/php/540.html <?php define("CSV_Start", 0); def ...
- POJ 2226 Muddy Fields(最小顶点覆盖)
POJ 2226 Muddy Fields 题目链接 题意:给定一个图,要求用纸片去覆盖'*'的位置.纸片能够重叠.可是不能放到'.'的位置,为最少须要几个纸片 思路:二分图匹配求最小点覆盖.和放车那 ...
- 微服务API Gateway
翻译-微服务API Gateway 原文地址:http://microservices.io/patterns/apigateway.html,以下是使用google翻译对原文的翻译. 让我们想象一下 ...
- Android开发学习总结——Android开发的一些相关概念(转)
一.什么是3G.4G 1995年问世的第一代模拟制式手机(1G)只能进行语音通话. 1996到1997年出现的第二代GSM.CDMA等数字制式手机(2G)便增加了接收数据的功能 3G指的是第三代移 ...
- 4.帧循环(游戏循环),schedule
1 概述 游戏乃至图形界面的本质是不断地画图,然而画图并非任意的,不论什么游戏都须要遵循一定的规则来呈现出来,这些规则就体现为游戏逻辑.游戏逻辑会控制游戏内容,使其依据用户输入和时间流逝而改变. ...