zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【Linux】创建不可修改文件
    【Linux】文件权限
    【shell】创建长目录,目录存在则忽略,缺失则创建
    【Linux】找出文件之间的差异
    Segment fault及LINUX core dump详解 (zz)
    Segment fault及LINUX core dump详解
    communication ports in DOS systems:
    Ubuntu 16.04 LTS (Xenial Xerus)
    C++ 常见崩溃问题分析
    PC-Lint安装配置与集成到VS2010
  • 原文地址:https://www.cnblogs.com/yinwenjie/p/11272288.html
Copyright © 2011-2022 走看看