跨站请求伪造:

一、简介

django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

全局:

中间件 django.middleware.csrf.CsrfViewMiddleware

局部:

@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。

@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

注:from django.views.decorators.csrf import csrf_exempt,csrf_protect

二、应用

1、普通表单

veiw中设置返回值:

return render_to_response('Account/Login.html',data,context_instance=RequestContext(request))

或者

return render(request, 'xxx.html', data)

html中设置Token:

{% csrf_token %}

2、Ajax

对于传统的form,可以通过表单的方式将token再次发送到服务端,而对于ajax的话,使用如下方式。

view.py

from django.template.context import RequestContext

# Create your views here.

def test(request):

if request.method == 'POST':

print request.POST

return HttpResponse('ok')

return render_to_response('app01/test.html',context_instance=RequestContext(request))

Text.html

1

2

3

4

5

6

7

8 {% csrf_token %}9

10

11

12

13

14

15 varcsrftoken=$.cookie('csrftoken');16

17 functioncsrfSafeMethod(method) {18 //these HTTP methods do not require CSRF protection

19 return(/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));20 }21 $.ajaxSetup({22 beforeSend:function(xhr, settings) {23 if(!csrfSafeMethod(settings.type)&& !this.crossDomain) {24 xhr.setRequestHeader("X-CSRFToken", csrftoken);25 }26 }27 });28 functionDo(){29

30 $.ajax({31 url:"/app01/test/",32 data:{id:1},33 type:'POST',34 success:function(data){35 console.log(data);36 }37 });38

39 }40

41

42

python写数据库中间件_python 20 day form、model多对多操作、sql、中间件相关推荐

  1. python写数据库校验_python 验证 sqlite数据库隔离级别

    sqlite3支持三种数据库锁级别,也叫隔离级别.下面代码中我们对数据库中task表进行更新,然后由另一个线程读取这个表的数据 import logging import sqlite3 import ...

  2. python写数据库校验_Python:生成验证码并插入到数据库!

    1import pymysql 2import uuid 3 4codeList = dict() // 声明一个字典 5 6i = 1 // 为了保证字典 key 的唯一性而声明 7 8// 封装函 ...

  3. 怎么用python写数据库_Python实现数据库编程方法详解

    本文实例讲述了Python实现数据库编程方法.分享给大家供大家参考.具体分析如下: 用PYTHON语言进行数据库编程, 至少有六种方法可供采用. 我在实际项目中采用,不但功能强大,而且方便快捷.以下是 ...

  4. python写数据库中间件_python3开发进阶-Django框架的中间件的五种用法和逻辑过程...

    阅读目录 一.什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. 每个中间件组件都 ...

  5. python生成数据库指令_Python学习—数据库操作

    python2中操作数据库:MySQLdb python3中操作数据库:pymysql python接连数据库 1.创建数据库连接: mysql.connect()函数 2.执行数据库操作: 执行数据 ...

  6. python 通用数据库类型_Python开发基础之Python常用的数据类型

    博文大纲 一.Python介绍 二.Python的变量 三.Python常用的数据类型 1.数字 2.字符串 3.元组 4.列表 5.字典 一.Python介绍 Python是一种动态解释型的编程语言 ...

  7. python处理数据库数据类型_python 导入表格数据库数据类型

    Django 博客开发教程 3 - 创建 Django 博客的数据库模型 设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个 ...

  8. 用python写一个通讯录_python写一个通讯录

    闲着没事,用python写一个模拟通讯录,要求要实现常用的通讯录的功能,基本流程如下 ​ 接下来就按照这个流程实现各个模块的功能 1. 定义一个类,并初始化 def __init__(self): w ...

  9. python写安卓游戏_python写lol游戏脚本(用python开发安卓脚本)

    python写lol游戏脚本 俾格米人和搅拌机的引擎. python-ogre和panda3d是用c/c编写的,但只提供了一个python接口. 你好,蟒蛇可以在Android上工作. 因为你可以在A ...

  10. python写了代码_Python写代码的用法建议

    1.Mutable and immutable types Python有两种内置或用户定义的类型 可变类型是允许就地修改内容的类型.典型的可变列表是列表和词典:所有列表都有变异方法,如 list.a ...

最新文章

  1. 吴恩达推荐笔记:22 张图总结深度学习全部知识
  2. JavaScript 日期联动选择器
  3. Jetson TX1使用usb camera采集图像 (1)
  4. DL之RNN:基于RNN实现模仿贴吧留言
  5. spring mvc+spring + hibernate 整合(二)
  6. 首届中国高校计算机大赛-人工智能创意赛启动,百度加盟全面赋能
  7. VTK:可视化之ProjectSphere
  8. 第十四章:详解Jenkins节点配置
  9. Java基础17:Java IO流总结
  10. 利用计算机语言实现ID3算法,机器学习之决策树学习-id3算法-原理分析及c语言代码实现.pdf...
  11. java中 15db9742_请问我这个报错[I@15db9742是怎么回事啊?
  12. nodejs安装服务器系统,window下,nodejs安装http-server,并开启HTTP服务器
  13. 成绩的案例java_java-成绩案例
  14. 使用fastadmin的页面跳转模板
  15. 马上上线!谷歌与苹果联手抗疫,打造基于蓝牙设备的接触史回溯 | 凌云时刻...
  16. hevc参考代码matlab版,HEVC部分源码剖析
  17. java中this和this()区别
  18. uniApp H5微信网页授权,微信支付
  19. python怎么变白-Python将png透明变为白色并保存为jpg图片
  20. ue小知识点 动画蓝图 ABP的 begin、init和Character的posses的先后

热门文章

  1. 网页设计制作CSS实现隔行换色两种方法
  2. Hibernate存取JSON数据
  3. 磁盘类型 GetDriveType
  4. UITableViewCell 添加 checkbox 多选
  5. vue slot插槽_Vue之路 | 08vue插槽slot使用
  6. vue 组件 not defined_Vue、Spring Boot开发小而完整的Web前后端分离项目实战10
  7. HTML和CSS面试题第35题
  8. Javascript基础知识笔记一
  9. C# winfrom 添加Log4Net日志库
  10. -bash:ls:command not found,执行命令总是报找不到