中间件和Django缓存
中间件定义:
中间件是一个、一个的管道,如果相对任何所有的通过Django的请求进行管理都需要自定义中间件
中间件可以对进来的请求和出去的请求进行控制
中间件是一类。
看下面的代码在settings里中间件的类:
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
当有请求过来的时候,默认从上倒下执行!然后在返回的时候从下面在返回回去,如下图:
2、自定义中间件
中间件中可以定义四个方法,分别是:
- process_request(self,request)
- process_view(self, request, callback, callback_args, callback_kwargs)
- process_exception(self, request, exception)
- process_response(self, request, response)
process_exception 这个方法只有在出现错误的时候才会触发
先写一个自定义中间件,然后在看他的原理和源码:
2.1、自定义中间件
aaarticlea/png;base64,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" alt="" />\
class Testmiddle(object):
def process_request(self,request):
print 'Testmiddle process_request'
def process_view(self, request, callback, callback_args, callback_kwargs):
print 'Testmiddle process_view'
def process_exception(self, request, exception):
pass
def process_response(self, request, response):
print 'Testmiddle process_response'
return response class Nextmiddle(object):
def process_request(self,request):
print 'Nextmiddle process_request'
def process_view(self, request, callback, callback_args, callback_kwargs):
print 'Nextmiddle process_view'
def process_exception(self, request, exception):
pass
def process_response(self, request, response):
print 'Nextmiddle process_response'
return response
2.2、注册中间件
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'middleware.middle.Testmiddle',
'middleware.middle.Nextmiddle',
]
2.3、测试使用url和views
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$', views.index), ]
def index(request):
print 'This app01 Views.index'
return HttpResponse('OK')
2.4、查看输出结果:
'''
Testmiddle process_request
Nextmiddle process_request
Testmiddle process_view
Nextmiddle process_view
This app01 Views.index
Nextmiddle process_response
Testmiddle process_response
'''
从输出结果可以看出:
他是先执行Testmiddle 的request 方法又执行了Nextmiddle的 process_request方法。。。。
2.5、原理:
当请求进来了到达中间件
去settings里面找到MIDDLEWARE_CLASSES,MIDDLEWARE_CLASSES是一个元组
有4个列表:
process_request_lsit = []
process_view_list = []
process_response_list = []
然后他循环MIDDLEWARE_CLASSES这个类:
for 类 in MIDDLEWARE_CLASSES:
obj = 类()
if obj里有process_request方法:
process_request_lsit.append(obj.process_request)
然后循环后后执行:
for i in process_request_list:
i() #加括号执行方法 for i in process_view_list:
i()
............
3、中间件的流程梳理
首先看下自定义的中间件中的process_response方法他是有返回值的其他的是没有返回值的。这个return response是什么呢?
这个response就是咱们自定义的views.index返回的结果!
def process_response(self, request, response):
print 'Testmiddle process_response'
return response
如果在其他的没有返回值得,仅有process_response有返回值得话他的请求流程是这样的:
但是如果在process_request或者process_view又返回值得话那么流程就完全不一样了!
举例:如果有m1和m2两个中间件,如果我在m1中的request方法中设置了,如果访问为1.1.1.1那么返回要一个404,那么他的访问流程是这样的:
process_exception 什么时候触发呢?咱们定义的views.index出错的时候他就会捕捉到然后执行咱们定义的process_exception方法如下图:
Django缓存
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者Redis中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。
举个例子来说:如果访问量比较大的时候,有很多相同的操作比如:有时候请求的数据比如访问同一条数据,或者同一个页面的时候,其实是没必要的。
Django支持,mysql,Redis、Memecache、文件的方式做缓存,并且可以设置超时时间。
settings配置:
CACHES = {
'default': {
#定义已文件的方式进行cache
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
#cache文件的存放路径
'LOCATION': os.path.join(BASE_DIR, 'cache'),
#超时时间为600妙
'TIMEOUT': 600,
'OPTIONS': {
'MAX_ENTRIES': 1000
}
}
}
给请求应用,就是使用装饰器
from django.views.decorators.cache import cache_page #这里设置的是 60秒 * 15 ,15分钟之后
@cache_page(60 * 15)
def cache_page(request):
current = str(time.time())
return HttpResponse(current)
中间件和Django缓存的更多相关文章
- django 缓存、中间件、信号、CSRF 详解
中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项 ...
- Django缓存机制
缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增删改查,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的后台操作,都会消耗很多的服务 ...
- django缓存、信号、序列化
本篇导航: Django的缓存机制 Django的信号 Django的序列化 一.Django的缓存机制 1.缓存介绍 1)缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增, ...
- 版本控制,django缓存,跨域问题解决
复习 分页: 1. 简单分页 2. 偏移分页 3. 加密分页 解析器:客户处理前端提交来的数据 urlencode: body体中的数据格式: key=value& formdata编码:为区 ...
- Django 缓存
官方文档 缓存的出现就是为了减轻对数据库的压力和加快内存访问的速度.我们的访问请求最终都是返回一个大的字符串,缓存就是将这段字符串直接存储起来,下次你来了,不用经过view去数据库或者内存拿到数据再渲 ...
- 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...
- Django缓存设置
由于Django构建得是动态网站,每次客户端请求都要严重依赖数据库,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...
- Django缓存系统
在动态网站中,用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面. 这会消耗大量的资源,当访问用户量非常大时,就要考虑这个问题了. 缓存就是为了 ...
- Django - 缓存应用
Django缓存应用: https://www.cnblogs.com/zuoshoushizi/p/7850281.html https://www.cnblogs.com/alice-bj/p/9 ...
随机推荐
- ES(Elasticsearch)
基本概念 Elasticsearch是一个实时分布式搜索和分析引擎 支持: 全文搜索 结构化搜索 分析 可以这样进行描述: 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎 ...
- linux&Mysql
安装iptable yum install iptables-services --- 安装并解压相关文件到mysql /usr/local/mysql --- 配置 未完待续(由于阿里云已经安装好我 ...
- 说一说js中的闭包
不说官方给的定义,感觉自己刚开始看也不是很理解. 闭包 : 其实就是 该函数能使用函数外定义的变量. 为什么要使用闭包? 首先来说一下局部变量和全局变量的危害: 全局变量容易全局污染,局部变量又无法共 ...
- COPD——团队项目测试心得
写在前面: 测试结束了,也要和项目说拜拜了~这一学期时间飞快,痛并快乐着,想想人生如果是个软件,那我们用多长时间在做测试呢?恐怕是一辈子.很多人忙着追逐,却很少人能停下来审视自己,那些时常自省的,常能 ...
- 对低开销的静态组件使用v-once
<body> <div id="app"> <terms-of-service></terms-of-service> </d ...
- sse矩阵乘法 应该是1毫秒纯运算1000次
#include <intrin.h> #include <math.h> struct Vector4 { float x, y, z, w; }; struct Matri ...
- 小白的Redis学习(一)-SDS简单动态字符串
本文为读<Redis设计与实现>的记录.该书以Redis2.9讲解Redis相关内容.请注意版本差异. Redis使用C语言实现,他对C语言中的char类型数据进行封装,构建了一种简单动态 ...
- 斐讯K2 22.5.9固件刷华硕固件实测教程
斐讯K2最新的固件是V22.5.9.163这个版本是锁死了,不能刷机的,而且不能降级到原来的可以刷机的老版本固件,也就不能刷第三方固件了,怎么破呢?下面就教大家怎么降级刷机到V22.4.2.8固件. ...
- 小程序 map组件问题 cover-view问题
使用小程序的组件map时 在开发者工具上一切顺利 但是在真机预览时 发现地图的层级是最高的 任何标签都覆盖不了它 调整z-index值并没有什么效果 原因是 微信小程序的map.video.canva ...
- Beta冲刺 3
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10116813.html 作业博客:https://edu.cnblogs.com/campus ...