一,缓存
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者memcache中之前缓存的内容拿到,并返回。
Django中提供了6种缓存方式:
1,配置
a、开发调试
<span style="color: #0000ff;">def<span style="color: #000000;"> default_key_func(key,key_prefix,version):
<span style="color: #800000;">"""<span style="color: #800000;">
Default function to generate keys.
Constructs the key used by all other methods. By default it prepends
the `key_prefix'. KEY_FUNCTION can be used to specify an alternate
function with custom key making behavior.
</span><span style="color: #800000;">"""</span>
<span style="color: #0000ff;">return</span> <span style="color: #800000;">'</span><span style="color: #800000;"><a href="/tag/s/" target="_blank" class="keywords">%s</a>:<a href="/tag/s/" target="_blank" class="keywords">%s</a>:<a href="/tag/s/" target="_blank" class="keywords">%s</a></span><span style="color: #800000;">'</span> %<span style="color: #000000;"> (key_prefix,version,key)
<span style="color: #0000ff;">def<span style="color: #000000;"> get_key_func(key_func):<span style="color: #800000;">"""<span style="color: #800000;">
Function to decide which key function to use.
Defaults to ``default_key_func``.
</span><span style="color: #800000;">"""</span>
<span style="color: #0000ff;">if</span> key_func <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">not</span><span style="color: #000000;"> None:
</span><span style="color: #0000ff;">if</span><span style="color: #000000;"> callable(key_func):
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> key_func
</span><span style="color: #0000ff;">else</span><span style="color: #000000;">:
</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> import_string(key_func)
</span><span style="color: #0000ff;">return</span> default_key_func</pre>
b、内存
c、文件
d、数据库
<span style="color: #008000;">#
<span style="color: #008000;"> 配置:CACHES =<span style="color: #000000;"> {
<span style="color: #800000;">'<span style="color: #800000;">default<span style="color: #800000;">'<span style="color: #000000;">: {
<span style="color: #800000;">'<span style="color: #800000;">BACKEND<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">django.core.cache.backends.db.DatabaseCache<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">LOCATION<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">my_cache_table<span style="color: #800000;">',<span style="color: #008000;">#<span style="color: #008000;"> 数据库表
<span style="color: #000000;"> }
}
<span style="color: #008000;">#<span style="color: #008000;"> 注:执行创建表命令 python manage.py createcachetable
e、Memcache缓存(python-memcached模块)
<span style="color: #800000;">'<span style="color: #800000;">default<span style="color: #800000;">'<span style="color: #000000;">: {
<span style="color: #800000;">'<span style="color: #800000;">BACKEND<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">django.core.cache.backends.memcached.MemcachedCache<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">LOCATION<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">unix:/tmp/memcached.sock<span style="color: #800000;">'<span style="color: #000000;">,}
}
CACHES
=<span style="color: #000000;"> {<span style="color: #800000;">'<span style="color: #800000;">default<span style="color: #800000;">'<span style="color: #000000;">: {
<span style="color: #800000;">'<span style="color: #800000;">BACKEND<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">django.core.cache.backends.memcached.MemcachedCache<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">LOCATION<span style="color: #800000;">'<span style="color: #000000;">: [
<span style="color: #800000;">'<span style="color: #800000;">172.19.26.240:11211<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">172.19.26.242:11211<span style="color: #800000;">'<span style="color: #000000;">,]
}
}
f、Memcache缓存(pylibmc模块)
<span style="color: #800000;">'<span style="color: #800000;">default<span style="color: #800000;">'<span style="color: #000000;">: {
<span style="color: #800000;">'<span style="color: #800000;">BACKEND<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">django.core.cache.backends.memcached.PylibmCCache<span style="color: #800000;">'<span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">LOCATION<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">/tmp/memcached.sock<span style="color: #800000;">'<span style="color: #000000;">,}
}
CACHES =<span style="color: #000000;"> {
<span style="color: #800000;">'<span style="color: #800000;">default<span style="color: #800000;">'<span style="color: #000000;">: {
<span style="color: #800000;">'<span style="color: #800000;">BACKEND<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">django.core.cache.backends.memcached.PylibmCCache<span style="color: #800000;">'<span style="color: #000000;">,]
}
}
2,应用
a. 全站使用
<span style="color: #800000;">'<span style="color: #800000;">django.middleware.cache.UpdateCacheMiddleware<span style="color: #800000;">',<span style="color: #008000;">#<span style="color: #008000;"> 最开始位置
<span style="color: #008000;">#<span style="color: #008000;"> 其他中间件...
<span style="color: #800000;">'<span style="color: #800000;">django.middleware.cache.FetchFromCacheMiddleware<span style="color: #800000;">',<span style="color: #008000;">#<span style="color: #008000;"> 最后位置
<span style="color: #000000;">]
CACHE_MIDDLEWARE_ALIAS = <span style="color: #800000;">""<span style="color: #000000;">
CACHE_MIDDLEWARE_SECONDS = <span style="color: #800000;">""<span style="color: #000000;">
CACHE_MIDDLEWARE_KEY_PREFIX = <span style="color: #800000;">""
b. 单独视图缓存
<span style="color: #0000ff;">def<span style="color: #000000;"> my_view(request):
... <span style="color: #008000;">#<span style="color: #008000;"> 方式二:
<span style="color: #0000ff;">from django.views.decorators.cache <span style="color: #0000ff;">import<span style="color: #000000;"> cache_page
urlpatterns =<span style="color: #000000;"> [
url(r<span style="color: #800000;">'<span style="color: #800000;">^foo/([0-9]{1,2})/$<span style="color: #800000;">',cache_page(60 * 15<span style="color: #000000;">)(my_view)),]
c、局部模板使用
{</span>% load cache %<span style="color: #000000;">}
b. 使用缓存
{</span>% cache 5000 缓存key %} <span style="color: #008000;">#</span><span style="color: #008000;"> 时间(秒)和key(key名字<a href="/tag/zidingyi/" target="_blank" class="keywords">自定义</a>)</span>
<span style="color: #000000;"> 缓存内容
{
二,序列化
关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。
1、serializers
data
= serializers.serialize(<span style="color: #800000;">"<span style="color: #800000;">json<span style="color: #800000;">",ret)2、json.dumps
ret = models.BookType.objects.all().values_list(<span style="color: #800000;">'<span style="color: #800000;">caption<span style="color: #800000;">'<span style="color: #000000;">)
ret=<span style="color: #000000;">list(ret)
result = json.dumps(ret)
由于json.dumps时无法处理datetime日期,所以可以通过自定义处理器来做扩展,如: