標籤:直接 mode imp rgs nal red django 項目 request
一、緩衝
緩衝是將一些常用的資料儲存記憶體或者memcache中,在一定的時間內有人來訪問這些資料時,則不再去執行資料庫及渲染等操作,而是直接從記憶體或memcache的緩衝中去取得資料,然後返回給使用者。
django中提供了6中緩衝,分別為:(1)開發人員調試緩衝;(2)記憶體緩衝;(3)檔案快取;(4)資料庫緩衝;(5)使用python-memcached模組的Memcache緩衝;(6)使用pylibmc模組的Memcache緩衝。其中經常使用緩衝為檔案快取和Memcache緩衝。
具體各種緩衝的使用配置請參考部落格:http://www.cnblogs.com/yuanchenqi/articles/8034442.html#_label2,如下介紹django中三種緩衝的應用執行個體:
1、全域使用緩衝
全域緩衝即指對整個項目中的視圖進行緩衝,像這種情況當然是利用中介軟體進行進行,中介軟體具體配置的方式如下:通過配置如下兩個中介軟體和緩衝失效時間,便可以使所有的視圖查詢資料都會在緩衝失效時間範圍內從緩衝中查取資料。
MIDDLEWARE_CLASSES = ( ‘django.middleware.cache.UpdateCacheMiddleware‘, # 所有中介軟體開始處 ................................................. ‘django.middleware.cache.FetchFromCacheMiddleware‘, #所有中介軟體結尾處 )CACHE_MIDDLEWARE_SECONDS=10 #用於設定緩衝的失效時間
2、視圖使用緩衝
視圖緩衝即是只對指定的視圖內的資料進行緩衝設定,主要配置的方式如下:通過給需要緩衝的視圖的加裝飾器@cache_page(緩衝時間)便可實現視圖的緩衝,如下例將獲得當前的目前時間在頁面顯示,如果是在緩衝失效的時間內進行第二次訪問此視圖,則頁面上前後顯示的時間是一樣的。
from django.views.decorators.cache import cache_pageimport time@cache_page(15) #緩衝失效時間15sdef index(request): t=time.time() return render(request,"index.html",locals())
3、視圖局部緩衝
視圖局部緩衝是指視圖中的某一條資料進行緩衝設定,如,重新整理頁面時,整個網頁有一部分實現緩衝,具體執行個體如下:由此可見視圖局部的緩衝實現主要是在html檔案中進行設定,如下執行個體,在有效緩衝時間範圍內兩次訪問此頁面,頁面的顯示的第二條時間不會發生變化。
視圖函數:
import timedef index(request): t=time.time() return render(request,"index.html",locals())
html檔案:
{% load cache %} #第一步<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <h3 style="color: green">不緩衝:{{ t }}</h3>{% cache 10 ‘name‘ %} #第二步:需要兩個參數,第一個為緩衝時間,第二個即為name <h3>緩衝:{{ t }}</h3>{% endcache %}</body></html>
二、訊號
訊號的實現的效果就是監聽指定的動作,當指定的動作發生後執行相應的操作,有點同回呼函數的意思。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 # 建立資料庫連接時,自動觸發
如果需要記錄項目中向資料庫添加資料的日誌,就可用到post_save訊號,一旦項目中有添加資料的操作時就會執行訊號對應的回呼函數。注意,訊號的設定一般配置在應用或者項目的init.py中,保證項目運行後,訊號被啟動。如下執行個體:
方式一:訊號與callback綁定關係
from django.db.models.signals import pre_save, post_savedef callback(sender,**kwargs): ‘‘‘
執行儲存日誌邏輯,sender
和kwargs參數有你想要的資料
‘‘‘ print(sender) print(kwargs)post_save.connect(callback)
方式二:給callback加裝飾器
from django.db.models.signals import post_savefrom django.dispatch import receiver@receiver(post_save)def callback(sender,**kwargs): print(sender) print(kwargs)
三、admin管理工具
詳細內容可以參考部落格:http://www.cnblogs.com/yuanchenqi/articles/8323452.html
python之路_day105_django之緩衝、訊號、admin