2020年11月23日星期一

drf——django的缓存和信号

一、django缓存

1.缓存位置

缓存的地方:1 内存中2 文件中(硬盘上)3 数据库缓存(硬盘上)4 redis中(后期都用它,内存上,更快)5 通过配置,设置缓存位置 -以文件缓存为例,在settings.py中配置 CACHES = {  'default': {  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', #指定缓存使用的引擎  'LOCATION': '/var/tmp/django_cache',  #指定缓存的路径  'TIMEOUT':300,    #缓存超时时间(默认为300秒,None表示永不过期)  'OPTIONS':{  'MAX_ENTRIES': 300,   # 最大缓存记录的数量(默认300)  'CULL_FREQUENCY': 3,   # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)  }  } }

2.缓存粒度

#这里说的是前后端混合开发的缓存1 三种粒度:整站缓存,单页面缓存,局部缓存ps:时间越长级别越高,缓存就用级别高的2 单页面缓存(用的多) from django.views.decorators.cache import cache_page @cache_page(5) def index(request):  import time  ctime=time.time()  return render(request,'index.html',context={'ctime':ctime})3 页面中某个位置缓存(局部缓存) # 缓存3s钟。xxx是唯一key,唯一的 {% load cache %} {% cache 3 'xxx'%} 这一部分用缓存 时间为:{{ ctime }} {% endcache %}4 整站缓存(两个中间件)(用的少) # 在setting中配置 'django.middleware.cache.UpdateCacheMiddleware', #第一,重写了process_response '。。。', 'django.middleware.cache.FetchFromCacheMiddleware', #最后,重写了process_requset # 缓存过期时间 CACHE_MIDDLEWARE_SECONDS=5

3.前后端分离后缓存使用

1 查出一堆json格式数据,链表查了8个表 2 前后端分离以后, -只需要会如何是把字典,字符串,对象放到缓存中, -如何取出来4 具体使用#models.pyBook表并进行数据迁移#views.py----这个可以就是模板,哪里需要随便拿着用from django.core.cache import cacheclass BookView(APIView): def get(self, request):  res_data = cache.get('book_list_dix',)  if res_data: # 有缓存,直接返回   print('走了缓存')   return Response(res_data)  else: # 没有缓存,再走数据库   book_list = models.Book.objects.all()   ser = serializer.BookSer(book_list, many=True)   # 想把ser.data缓存起来   cache.set('book_list_dix', ser.data,100)   print('没走缓存')   return Response(ser.data)#serializer.pyfrom app01 import modelsfrom rest_framework import serializersclass BookSer(serializers.ModelSerializer): class Meta:  model=models.Book  fields='__all__'  #urls.pypath('books/', views.BookView.as_view()),5 cache可以缓存所有数据类型,包括自定义的类(pickle)

二、django信号

1 Django提供一种信号机制。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行2 Django内置信号 Model signals pre_init     # django的modal执行其构造方法前,自动触发 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   # 创建数据库连接时,自动触发 3 内置信号的使用(两种方式) # #1 导入内置信号  # from django.core.signals import request_started  # #2 写一个函数  # def aa(sender, **kwargs):  #  print(sender)  #  print(kwargs)  #  print('请求来了,我写日志了。。。')  #  #  # #3 跟内置信号绑定  # request_started.connect(aa)  # 方式二  from django.core.signals import request_started,request_finished  from django.dispatch import receiver  @receiver(request_finished) # 内置信号pre_save和my_callback函数绑定了  def my_callback(sender, **kwargs):   print("请zzou了,走了我") 4 信号的应用场景:  -记录日志(对象创建就写入日志)  -解耦合 

 









原文转载:http://www.shaoqun.com/a/492887.html

skyee:https://www.ikjzd.com/w/290

急速:https://www.ikjzd.com/w/1861

promotion:https://www.ikjzd.com/w/127


一、django缓存1.缓存位置缓存的地方:1内存中2文件中(硬盘上)3数据库缓存(硬盘上)4redis中(后期都用它,内存上,更快)5通过配置,设置缓存位置-以文件缓存为例,在settings.py中配置CACHES={'default':{'BACKEND':'django.core.cache.backends.filebased.FileBasedC
黄远:黄远
宝贝格子:宝贝格子
2020年做外贸,如何找到一个有"钱途"的好产品?:2020年做外贸,如何找到一个有"钱途"的好产品?
香港兰桂坊酒吧地址 :香港兰桂坊酒吧地址
深圳海上田园要门票吗?:深圳海上田园要门票吗?

没有评论:

发表评论