Python第十九课Django缓存,信号,序列化,抽屉页面分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python第十九课Django缓存,信号,序列化,抽屉页面分析相关的知识,希望对你有一定的参考价值。

本节内容

  1. models操作

  2. Django的缓存
  3.  

  4.  

1.1 models操作

单表查询:

         curd(增删改查)

多表查询:

         # 一次性查出所有的数据,进行一次跨表查询  只能在有ForeignKey的表中正向使用

         select_realated():

                   进行一次跨表查询

                   user_list = Models.UserInfo.objetcts.all()

                   for row in user_list:

                            print(row.username,row.email,row.part_id,row.part.title)  # 如果像这样查询(row.part.title将会进行一次跨表查询)

                   user_list = Models.UserInfo.objetcts.all().select_realated(‘part‘) # 只会进行一次跨表查询

         # 进行两次单表查询 (进行多次单表查询,Django会自动进行关系关联)

         prefetch_realated():

                   user_list = Models.UserInfo.objetcts.all().prefetch_realated(‘part‘)

                   # 第一句 : Models.UserInfo.objetcts.all()

                   # 第二句 : Models.Part.objetcts.filter(id__in=[上一句查询数据的part_id列表])

                   for row in user_list:

                            print(row.username,row.email,row.part_id,row.part.title) # 使用方法和之前一样,

         # user_list = Models.UserInfo.objetcts.all().prefetch_realated(‘part‘,‘usertype‘,‘part__ut‘)

             # 第一句:Models.UserInfo.objetcts.all()

             # 第二句:Models.Part.objetcts.filter(id__in=part_id)

             # 第三句:Models.UserInfo.objetcts.filter(id__in=usertype_id)

其他:

         only为指定取的数据,

         defer为指定不取的数据

         通过这个方式取出的数据为queryset类型,如果要使用对象中其他没有查询的字段,多进行多余的sql查询

         models.UserInfo.objetcts.all().only(‘id‘,‘name‘)

         models.UserInfo.objetcts.all().defer(‘id‘,‘name‘)

1.2 缓存

  Django中提供六中缓存方式:

    1.开发调试       # 不缓存

    2.内存

    3.文件

    4.数据库

    5.Memcache缓存(python-memcache模块)

    6.Memcache缓存(pylibmc模块)

1.2.1 缓存的配置

a.开发调试缓存配置(settings中配置)

    # 此为开始调试用,实际内部不做任何操作
    # 配置:
        CACHES = {
            ‘default‘: {
                ‘BACKEND‘: ‘django.core.cache.backends.dummy.DummyCache‘,     # 引擎
                ‘TIMEOUT‘: 300,                                               # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
                ‘OPTIONS‘:{
                    ‘MAX_ENTRIES‘: 300,                                       # 最大缓存个数(默认300)
                    ‘CULL_FREQUENCY‘: 3,                                      # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
                },
                ‘KEY_PREFIX‘: ‘‘,                                             # 缓存key的前缀(默认空)
                ‘VERSION‘: 1,                                                 # 缓存key的版本(默认1)
                ‘KEY_FUNCTION‘ 函数名                                          # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
            }
        }


    # 自定义key
    def default_key_func(key, key_prefix, version):
        """
        Default function to generate keys.

        Constructs the key used by all other methods. By default it prepends
        the `key_prefix‘. KEY_FUNCTION can be used to specify an alternate
        function with custom key making behavior.
        """
        return ‘%s:%s:%s‘ % (key_prefix, version, key)

    def get_key_func(key_func):
        """
        Function to decide which key function to use.

        Defaults to ``default_key_func``.
        """
        if key_func is not None:
            if callable(key_func):
                return key_func
            else:
                return import_string(key_func)
        return default_key_func

  

 

 

史蒂夫

 

以上是关于Python第十九课Django缓存,信号,序列化,抽屉页面分析的主要内容,如果未能解决你的问题,请参考以下文章

第十九课

第十九课预习任务

重学java基础第十九课:helloWorld详解

第十九课

rhel7 学习第十九课

第十九课 pluginlib&Nodelet