一、缓存
1、配置
CACHES = { 'default' = { 'BACKEND': 'django.core.cache.backend.locmem.LocMemCache', # 这是保存到内存中 'LOCATION': 'unique-snowflake', # 这是唯一标识 'TIMEOUT': 300, # 超时时间,默认300,None为永不过期,0表示立即过期 'OPTIONS': { 'MAX_ENTRIES': 300, # 最大缓存个数,默认300 'CULL_FREQUENCY': 3, # 缓存到达最大个数后,剔除的比例,即三分之一 } } }
CACHES = { 'default' = { 'BACKEND': 'django.core.cache.backend.filebased.FileBasedCache', # 这是保存到文件中 'LOCATION': 'E://xxx', # 这是保存的路径 'TIMEOUT': 300, # 超时时间,默认300,None为永不过期,0表示立即过期 'OPTIONS': { 'MAX_ENTRIES': 300, # 最大缓存个数,默认300 'CULL_FREQUENCY': 3, # 缓存到达最大个数后,剔除的比例,即三分之一 } } }
CACHES = { 'default' = { 'BACKEND': 'django.core.cache.backend.dummy.DummyCache', # 这里表示不作任何缓存,只是占位,方便开发调试 'LOCATION': 'unique-snowflake', # 这是唯一标识 'TIMEOUT': 300, # 超时时间,默认300,None为永不过期,0表示立即过期 'OPTIONS': { 'MAX_ENTRIES': 300, # 最大缓存个数,默认300 'CULL_FREQUENCY': 3, # 缓存到达最大个数后,剔除的比例,即三分之一 } } }
2、应用
① 单个缓存
from django.views.decorators.cache import cache_page @cache_page(15) # 在十五秒内再次访问,不会打印111,即使数据库更新,也不会在该时间内刷新页面数据 def user_list(request): print("111") return render(request, 'xx.html')
② 全站缓存
# 获取缓存需要在最后一个request_process中获取,因为前面的中间件可能会对数据进行一些操作或者校验,比如csrf。因此,需要把获取缓存的中间件放在中间件配置的最后 # 存放缓存需要在最后一个process_response中存放,因为前面的中间件可能会对数据进行一些处理。因此需要把存放缓存的中间件放在中间件配置的开头 MIDDLEWARE = { 'django.middleware.cache.UpdateCacheMiddleware', # 其他中间件 'django.middleware.cache.FetchCacheMiddleware', } CACHE_MIDDLEWARE_SECONDS = 300 # 超时时间,默认300
③ 局部缓存
{% load cache %}
{% cache 100 'xx' %} 传入一个超时时间,一个键名
放一些数据
{% endcache %}
二、序列化
序列化就是将数据转化成可识别、可传输的字符串格式
json默认不能序列化时间对象,但是可以自定义类来实现对时间对象的序列化。
import json class JsonCustomerEncoder(json.Encoder): def default(self, field): if isinstance(field, datetime): return field.strftime("%Y-%m-%h %H-%M-%S") elif isinstance(field, date): return dield.strftime("%Y-%m-%h") else: return json.JsonEncoder.default(self, field) json.dumps(date, cls=JsonCustomerEncoder)