Python 26 Django缓存

一、缓存

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)

猜你喜欢

转载自www.cnblogs.com/yinwenjie/p/11272288.html