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项 ...
随机推荐
- Python代码编写规范
Python代码编写规范 编码: a) 如无特殊情况,文件一律使用UTF-8编码 b) 如无需特殊情况,文件头部必须加入#-*-coding:utf-8-*- 缩进 a) 统一 ...
- 【luogu3733】【HAOI2017】 八纵八横 (线段树分治+线性基)
Descroption 原题链接 给你一个\(n\)个点的图,有重边有自环保证连通,最开始有\(m\)条固定的边,要求你支持加边删边改边(均不涉及最初的\(m\)条边),每一次操作都求出图中经过\(1 ...
- 自学Python4.4-装饰器的进阶
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...
- [TJOI2012]桥(最短路+线段树)
有n个岛屿, m座桥,每座桥连通两座岛屿,桥上会有一些敌人,玩家只有消灭了桥上的敌人才能通过,与此同时桥上的敌人会对玩家造成一定伤害.而且会有一个大Boss镇守一座桥,以玩家目前的能力,是不可能通过的 ...
- 牛客练习赛28 B数据结构(线段树)
链接:https://www.nowcoder.com/acm/contest/200/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- A1021. Deepest Root
A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...
- java锁——wait,notify,synchronized
背景:这篇博客用来总结java锁相关的知识点,平时还是要自己多加练习 wait 和 notify以及notifyAll (1).方法介绍1.wait.notify以及notifyAll都是Object ...
- RabbitMQ入门-竞争消费者模式
上一篇讲了个 哈喽World,现在来看看如果存在多个消费者的情况. 生产者: package com.example.demo; import com.rabbitmq.client.Channel; ...
- id选择器为变量时
使用angularjs或者freemarker的同学基本都接触过一个问题:当使用list遍历数组值显示在页面,并要对所显示的数值进行操作时,如何选取数值所在标签? 以下是一个把地址id转为中文地址的函 ...
- Go结构体
当我们要表示同一种数据类型时候,可以用到数组,切片和字典. 当我们要表示不同的数据类型呢?这时候就要用到结构体了 一:定义struct 关键字 type 和 struct 来定义结构体 type st ...