zoukankan      html  css  js  c++  java
  • 关于django 内建缓存 信号 及自定义json的配置

    - 缓存
    
    把数据先保存在某个地方,下次再读取的时候不用再去原位置读取。
    
    - 配置
    CACHES = {
    'default': {
    'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    'LOCATION': 'unique-snowflake',
    'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
    'OPTIONS': {
    'MAX_ENTRIES': 300, # 最大缓存个数(默认300)
    'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
    },
    }
    }
    
    - redis 
    django-redis
    - 应用
    
    应用到视图上: 粒度适中
    from django.views.decorators.cache import cache_page
    
    
    @cache_page(15)
    def user_list(request):
    print('user_list')
    users = models.User.objects.all()
    return render(request, 'user_list.html', {'users': users})
    
    
    
    全站应用: 粒度最大
    MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',
    # 其他中间件...
    'django.middleware.cache.FetchFromCacheMiddleware',
    ]
    
    局部视图:粒度最细
    
    a. 引入TemplateTag
    
    {% load cache %}
    
    b. 使用缓存
    
    {% cache 5000 缓存key %}
    缓存内容
    {% endcache %}
    
    
    
    
    
    
    - 序列化
    json pickle
    
    - 自定义序列化
    
    class JsonCustomEncoder(json.JSONEncoder):
    
    def default(self, field):
    
    if isinstance(field, datetime):
    return field.strftime('%Y-%m-%d %H:%M:%S')
    elif isinstance(field, date):
    return field.strftime('%Y-%m-%d')
    else:
    return json.JSONEncoder.default(self, field)
    
    print(json.dumps(data,cls=JsonCustomEncoder))
    
    
    - 信号
    问题:
    数据库增加一条数据的时候,记录一条日志。
    
    内置信号	
    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 # 创建数据库连接时,自动触发
    
    
    注册信号
    # 方法一
    def callback(sender, **kwargs):
    print("xxoo_callback")
    print(sender, kwargs)
    
    
    post_save.connect(callback)
    
    
    # 方法二
    
    @receiver(post_save)
    def my_callback(sender, **kwargs):
    print("xxoo_callback")
    print(sender, kwargs)
    

      

  • 相关阅读:
    iOS
    关于HTTP协议学习(三)
    关于HTTP协议学习(二)
    关于HTTP协议学习(一)
    Swift之Swift编码规范
    老罗学习MVC之旅:MVC组件分析
    android 左右翻页
    android 检测网络是否可用
    android 在线升级借助开源中国App源码
    android 渐变展示启动屏
  • 原文地址:https://www.cnblogs.com/wszxdzd/p/10447133.html
Copyright © 2011-2022 走看看