Django之组件--中间件
中间件
中间件是介于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之组件--中间件的更多相关文章
- Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)
Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造) 摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...
- 07 Django组件-中间件
中间件 方式一:函数式:中间件[middleware],也叫钩子方法[钩子函数],hook Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Djang ...
- Django中Middleware中间件
Django中Middleware中间件 1 Middleware中间件概述 django中间middleware实质就是一个类,django会根据自己的规则在合适的时机执行中间件相应的方法.实际上当 ...
- Django框架之中间件与Auth
Django框架之中间件与Auth模块一 cbv加装饰器 -先导入:from django.utils.decorators import method_decorator -1 可以在方法上加装饰器 ...
- Django中的中间件(middleware)
中间件: 在研究中间件的时候我们首先要知道 1 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Djang ...
- Django框架 之 中间件
Django框架 之 中间件 浏览目录 中间件介绍 自定义中间件 中间件的执行流程 中间件版登录验证 一.中间件介绍 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个 ...
- Django 中的中间件
Django 中的中间件 Django 中间件 中间件介绍 前戏 之前在判断登录的时候使用的是装饰器的功能,通过给视图函数加装饰器来增加判断是否登录的功能.但此方法的缺点是必须给每个需要判断登录的视 ...
- [Django高级之中间件、csrf跨站请求伪造]
[Django高级之中间件.csrf跨站请求伪造] Django中间件 什么是中间件? Middleware is a framework of hooks into Django's request ...
- django 缓存、中间件、信号、CSRF 详解
中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项 ...
随机推荐
- 大学jsp实验6session
1.session对象的使用 (1)设计一个简单的在线问卷调查程序,共有3个页面,分别是one.jsp.two.jsp.three.jsp. 其中,shiyan6_1_one.jsp页面效果如下图所示 ...
- 牛客小白月赛12 H(dfs序+线段树),F(分块思想+bit),J(二分)
H 华华和月月种树 链接:https://ac.nowcoder.com/acm/contest/392/H 思路:先得到整棵树最终的形态,在这棵树上进行三种操作,用dfs跑下,第二种操作就直接对最终 ...
- Hdoj 1213.How Many Tables 题解
Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. ...
- Android工程图片资源命名禁忌
Android工程中,res\drawable\ 文件夹下所有的图片资源文件命名,不允许: 1. 大写字母 从Eclipse的这个报错可以知道资源文件的命名规则. Invalid file name: ...
- ie烦人的bug篇
好多公司都不支持ie6了,基本都是ie8+,就连jq新版本也宣布放弃低版本ie,就不用说那些框架了,不过想用兼容ie的angularjs可以用我司徒大神写的avalon,个人感觉avalon也是比较好 ...
- Python中生成器generator和迭代器Iterator的使用方法
一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...
- Duplicate entry 'xxx' for key 'xxx'
插入数据的时候 报错,Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplic ...
- Spring Boot 日志配置方法(超详细)
默认日志 Logback : 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台.在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了. 从上图 ...
- 树结构关系的数据导出为excel
该文针对的是关于树结构的数据的导出,每一个节点都可以创建不定数的子节点,在选择好某个节点进行导出 时,会把该节点以及子节点的数据都导出来.导出后的excel的格式大概如下图的形式,这个是一个比较理想 ...
- 通过锁字符串达到控制并发的效果C#
lock锁的是地址 而.net有内部机制使得相同的字符串内存地址是相同的(new string)除外 下面上实验代码 using System; using System.Collections.Ge ...