您的位置:首页 > 编程语言 > Go语言

31.Django缓存和信号

2018-02-13 00:44 281 查看

缓存

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回

Django中提供了6种缓存方式:

开发调试

内存

文件

数据库

Memcache缓存(python-memcached模块、pylibmc模块)

1.配置

from django.core.signals import request_finished
from django.core.signals import request_started
from django.core.signals import got_request_exception

from django.db.models.signals import class_prepared
from django.db.models.signals import pre_init, post_init
from django.db.models.signals import pre_save, post_save
from django.db.models.signals import pre_delete, post_delete
from django.db.models.signals import m2m_changed
from django.db.models.signals import pre_migrate, post_migrate

from django.test.signals import setting_changed
from django.test.signals import template_rendered

from django.db.backends.signals import connection_created

内置信号调用


内置信号调用方法

2.内置信号注册函数

对于内置的信号,使用时需要在信号中注册执行函数,当程序执行相应操作时,自动触发注册函数:

创建sg.py

# sg.py
from django.db.models.signals import pre_init

def f1(sender, **kwargs):
print("构造方法执行前")
print(sender, kwargs)

pre_init.connect(f1)
# django的modal执行其构造方法前,自动触发 可以为内置信号中的任意


__init__.py加载sg.py

import sg


views.py

from app01 import models
def signal(request):
obj1 = models.UserInfo.objects.create(user="root")
print('obj1')

obj2 = models.UserInfo.objects.create(user="root")
print('obj2')

return HttpResponse("OK")


结果:

构造方法执行前
obj1
构造方法执行前
obj2


3.自定义信号

定义信号

import django.dispatch
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])
# toppings,size  需要传入的参数


注册信号

def callback(sender, **kwargs):
print("callback")
print(sender,kwargs)

pizza_done.connect(callback)


触发信号

from 路径 import pizza_done

pizza_done.send(sender='seven',toppings=123, size=456)


由于内置信号的触发者已经集成到Django中,所以其会自动调用,而对于自定义信号则需要开发者在任意位置触发
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: