Python 26 Django缓存、序列化、信号、debug工具

一、缓存

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)

三、信号

信号是django给开发者预留的一些操作,遍布在django的请求生命周期中,可以在触发信号的时候进行一些自定义操作。

Model signals
   pre_init                    # django的model执行其构造方法前,自动触发
   post_init                   # django的modal执行其构造方法后,自动触发
   pre_save                    # django的modal对象保存前,自动触发
   post_save                   # django的modal对象保存后,自动触发
   pre_delete                  # django的modal对象删除前,自动触发
   post_delete                 # django的modal对象删除后,自动触发
   m2m_changed                 # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
   class_prepared              # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发
Management signals
   pre_migrate                 # 执行migrate命令前,自动触发
   post_migrate                # 执行migrate命令后,自动触发
   Request/response signals
   request_started             # 请求到来前,自动触发
   request_finished            # 请求结束后,自动触发
   got_request_exception       # 请求异常后,自动触发
Test signals
   setting_changed             # 使用test测试修改配置文件时,自动触发
   template_rendered           # 使用test测试渲染模板时,自动触发
Database Wrappers
   connection_created          # 创建数据库连接时,自动触发

使用:

在__init__中写

from django.dispatch import receiver
from django.db.models.signals import post_save

# 方式一
def callback(sender, **kwargs):
    print(sender)
post_save.connect(callback)
# 方式二 @recevier(post_save) def callback(sender, **kwargs): print(sender)

四、debug工具django-debug-toolbar

django-debug-toolbar 是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息。

pip3 install django-debug-toolbar

1、在settings.py中

INSTALLED_APPS = [
    'debug_toolbar',
]

# 配置中间件
MIDDLEWARE = [
'debug_toolbar.middleware.DebugToolbarMiddleware',
]

# 配置jquery
DEBUG_TOOLBAR_CONFIG = {
"JQUERY_URL": '//cdn.bootcss.com/jquery/2.2.4/jquery.min.js',
}
INTERNAL_IPS = [‘127.0.0.1’, ]  # 如果是本机调试

2、在urls.py中

from django.conf import settings
from django.conf.urls import include, url

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        url(r'^__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns
原文地址:https://www.cnblogs.com/yinwenjie/p/11272288.html