中间件

中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能

自定义中间件:

1 写一个类,继承MiddlewareMixin,
2 在类中写方法:
process_request
3 在settings中配置
from django.utils.deprecation import MiddlewareMixin
class CORSMiddle(MiddlewareMixin):
def process_response(self,request,response):
# 从什么地址跨
response['Access-Control-Allow-Origin'] = 'http://127.0.0.1:8001'
# 非简单请求,
if request.method == 'OPTIONS':
# 如果是put和delete方法,重新再发一次请求
response['Access-Control-Allow-Methods'] = 'PUT,DELETE'
response['Access-Control-Allow-Headers']='Content-Type'
return response mid.py

自定义跨域

自定义中间件的5个方法:

  process_request(self,request)

-执行顺序,settings中中间件自上而下执行
-请求来的时候会执行它
-request对象,就是本次请求的request对象,对它处理后,视图函数拿到的就是处理后的request对象
-可以拿到所有request请求内容!

  process_view(self, request, callback, callback_args, callback_kwargs)

-callback是视图函数,callback_args, callback_kwargs是视图函数的参数
-可以调用callback方法

  process_template_response(self,request,response)(忘掉)

-只有视图函数返回的对象中有render方法的时候,才会执行
process_exception(self, request, exception)
-视图函数出错,会执行它

  process_response(self, request, response)

-执行顺序,settings中中间件自下而上执行
-响应走的时候,会执行它
-request对象,就是本次请求的request对象,response是响应对象(HttpResponse的对象)
-如果process_request方法返回HttpResponse的对象,请求直接返回,按中间件方法执行顺序往回走
-必须return返回
-

csrf中间件:

  xss攻击/csrf跨站请求伪造

在不注释csrf中间件的情况下,在ajax提交数据的时候,必须将写在浏览器的key和value带回去,不然会被django框架禁止。
'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()

在csrf不注释的情况下用ajax完成post请求:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/static/jquery-3.3.1.js"></script>
</head>
<body>
{% csrf_token %}
<p>姓名:<input type="text" id="name"></p> <p>密码:<input type="password" id="pwd"></p>
<p>信息:<input type="text" id="info"></p>
<p>
<button id="submit">提交</button>
</p> </body>
<script>
$('#submit').click(function () {
$.ajax({ url: '/test_ajax/',
type: 'post',
data: {
name: $('#name').val(),
pwd: $('#pwd').val()
'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()
},
success: function (data) {
$('#info').val(data)
console.log(data)
}
}
)
})
</script>
</html> 前台

前台

def test_ajax(request):
if request.method == 'GET':
return render(request,'testajax.html')
name = request.POST.get('name')
pwd = request.POST.get('pwd')
if name =='chuck' and pwd == "": return HttpResponse('登陆成功')

后台

Django之组件--中间件的更多相关文章

  1. Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)

    Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造)   摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...

  2. 07 Django组件-中间件

    中间件 方式一:函数式:中间件[middleware],也叫钩子方法[钩子函数],hook Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Djang ...

  3. Django中Middleware中间件

    Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...

  4. Django框架之中间件与Auth

    Django框架之中间件与Auth模块一 cbv加装饰器 -先导入:from django.utils.decorators import method_decorator -1 可以在方法上加装饰器 ...

  5. Django中的中间件(middleware)

    中间件: 在研究中间件的时候我们首先要知道 1 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Djang ...

  6. Django框架 之 中间件

    Django框架 之 中间件 浏览目录 中间件介绍 自定义中间件 中间件的执行流程 中间件版登录验证 一.中间件介绍 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个 ...

  7. Django 中的中间件

    Django 中的中间件 Django  中间件 中间件介绍 前戏 之前在判断登录的时候使用的是装饰器的功能,通过给视图函数加装饰器来增加判断是否登录的功能.但此方法的缺点是必须给每个需要判断登录的视 ...

  8. [Django高级之中间件、csrf跨站请求伪造]

    [Django高级之中间件.csrf跨站请求伪造] Django中间件 什么是中间件? Middleware is a framework of hooks into Django's request ...

  9. django 缓存、中间件、信号、CSRF 详解

    中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项 ...

随机推荐

  1. 大学jsp实验6session

    1.session对象的使用 (1)设计一个简单的在线问卷调查程序,共有3个页面,分别是one.jsp.two.jsp.three.jsp. 其中,shiyan6_1_one.jsp页面效果如下图所示 ...

  2. 牛客小白月赛12 H(dfs序+线段树),F(分块思想+bit),J(二分)

    H 华华和月月种树 链接:https://ac.nowcoder.com/acm/contest/392/H 思路:先得到整棵树最终的形态,在这棵树上进行三种操作,用dfs跑下,第二种操作就直接对最终 ...

  3. Hdoj 1213.How Many Tables 题解

    Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. ...

  4. Android工程图片资源命名禁忌

    Android工程中,res\drawable\ 文件夹下所有的图片资源文件命名,不允许: 1. 大写字母 从Eclipse的这个报错可以知道资源文件的命名规则. Invalid file name: ...

  5. ie烦人的bug篇

    好多公司都不支持ie6了,基本都是ie8+,就连jq新版本也宣布放弃低版本ie,就不用说那些框架了,不过想用兼容ie的angularjs可以用我司徒大神写的avalon,个人感觉avalon也是比较好 ...

  6. Python中生成器generator和迭代器Iterator的使用方法

    一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...

  7. Duplicate entry 'xxx' for key 'xxx'

    插入数据的时候 报错,Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplic ...

  8. Spring Boot 日志配置方法(超详细)

    默认日志 Logback : 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台.在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了. 从上图 ...

  9. 树结构关系的数据导出为excel

    该文针对的是关于树结构的数据的导出,每一个节点都可以创建不定数的子节点,在选择好某个节点进行导出 时,会把该节点以及子节点的数据都导出来.导出后的excel的格式大概如下图的形式,这个是一个比较理想 ...

  10. 通过锁字符串达到控制并发的效果C#

    lock锁的是地址 而.net有内部机制使得相同的字符串内存地址是相同的(new string)除外 下面上实验代码 using System; using System.Collections.Ge ...