Django 笔记缓存 信号
缓存
url:
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^foo/', views.foo),
]
views
from django.shortcuts import render,HttpResponse
from .models import *
from django.views.decorators.cache import cache_page
@cache_page(3)
def index(request):
import time
t=time.time()
book_list=Book.objects.all()
return render(request,'index.html',locals())
def foo(request):
import time
t=time.time()
return HttpResponse(t)
models
from django.db import models
class Book(models.Model):
title=models.CharField(max_length=32)
price=models.DecimalField(decimal_places=2,max_digits=32)
html
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>时间</h3>
{{ t }}
<h3>书籍</h3>
{% for book in book_list %}
<p>{{ book }}</p>
{% endfor %}
</body>
</html>
全站缓存
全局设置需更改中间件
'django.middleware.cache.UpdateCacheMiddleware', #必须设置在第一个位置
...其他中间件...
'django.middleware.cache.FetchFromCacheMiddleware',#必须设置在最后一个位置
CACHE_MIDDLEWARE_SECONDS = 3 #所有页面默认缓存时间,默认600
视图缓存
from django.views.decorators.cache import cache_page
@cache_page(3)
局部缓存
idnex.html
{% load cache %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>不缓存:时间</h3>
{{ t }}
<h3>缓存:时间</h3>
{% cache 10 '' %}
{{ t }}
{% endcache %}
<h3>书籍</h3>
{% for book in book_list %}
<p>{{ book }}</p>
{% endfor %}
</body>
</html>
可修改settings配置缓存:
默认是内存级别的缓存
信号
当某一个动作触发的时候,触发执行相应函数
需求 : 每生成一条记录,打印一条相应的日志记录
__init__.py:
from django.db.models.signals import pre_save, post_save
def callback(sender, **kwargs):
print(sender)
print(kwargs)
post_save.connect(callable) # post_save与callback绑定关系
views
def add(request):
book_obj=Book.objects.create(title='py',price=12)
return HttpResponse('ok')
输出为
<class 'app01.models.Book'>
{'signal': <django.db.models.signals.ModelSignal object at 0x00000221F7983B00>, 'instance': <Book: Book object>, 'created': True, 'update_fields': None, 'raw': False, 'using': 'default'}
信号的优点:解耦

浙公网安备 33010602011771号