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'}

信号的优点:解耦

posted @ 2018-01-23 15:49  0bug  阅读(95)  评论(0)    收藏  举报