有三种方法,http://HdhCmsTestwiki/422.html" target="_blank">cookie,session,cache
先说下对我来说会怎么选,cookie会用理解就行,我不常用,因为用户会关闭cookie,而且需要随着HttpResponse传递,有局限性
session的话也是,在配置时就不选择根据cookie,按照系统默认的数据库就好了
cache放到内存里,用起来方便也简单,就是占内存....,也可以放到库里,根据实际情况考虑吧
下面就是这三种方法的配置和使用了
一: cookie
获取cookie
HttpRequest.COOKIES
返回一个标准的字典
包含所有的cookie,键值都是str
存储cookie
HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)
max_age 以秒为单位设置保存的时长,当为None时,时长与客户端同步
domain 设置一个跨域的cookie
domain=".lawrence测试数据" 将设置一个HdhCmsTestlawrence测试数据、blogs.lawrence测试数据 和calendars.lawrence测试数据 都可读的Cookie。否则,Cookie 将只能被设置它的域读取。
可以写成domian=[],不会报错,但是没有测试是否真的可以跨站
httponly=False 当设置为True时阻止客户端的js读取cookie
删除操作
delete_cookie(key, path='/', domain=None)
删除key指定的cookie,当该cookie不存在时什么也不会发生
当set_cookie指定了path与domain时删除时应保持一致,否则不会删除
其他内容
因为是一个标准的字典,所以request.COOKIES['key']='value'也可以把内容放到cookie里,但是在传递给下个view的时候值就丢失了
在一个view中设置的cookie需要传递到下个view才能使用,如:
view1: res = HttpResponseRedirect(revers("namespace:name") res.set_cookie('key_set', 'value_set_view1', 60) # 在这里是没办法获取不到现在的这个cookie print(request.COOKIES) # 直接设置COOKIES COOKIES['key_dict'] = 'values_dict' # 这里可以看到上面设置的内容 print(request.COOKIES) return res view2: 假设上面的Response就是指向这里的 print(request.COOKIES) # 这里可以看到上面通过set设置的 key_set ,但是通过字典设置的key_dict就没有了
}
}
}
在url中指定如何缓存
当需要访问/cache/与/nocache/时,同样指向一个页面,但是一个缓存一个不缓存
可以在url上指定哪个页面缓存,而不是在view上
url(r'^cache/$', cache_page(60 * 15)(my_view), name='cache'),
url(r’^nocache/$',my_view, name='nocache'),
模板缓存
{% load cache %}
{% cache 时长(秒) 名字 %}
{% endcache 名字 %}
更灵活的使用缓存
在views中导入 django.core.cache 的 caches
cad = caches[‘default’] # 这里的名字与CACHES中的配置一样
cas = caches[‘special_cache’]
常用的方法
cad.set(‘key’,’value’,时长) 不设时长则取默认值或自定义值
cad.get(‘key’) key 不存在返回None,也可以指定默认值get(‘key’,’默认值’),没有key则返回’默认值’
cad.add(‘key’,’value’) 当key不存在时增加key-value,当key已存在时不做操作,value还是之前的值
set_many({‘key1’:’v1’,’k2’:’v2’})
get_many([‘key1’,’key2’..]) 获取列表中的键的值 返回值为标准字典
delete(‘key’)
delete_many([‘key1’,’key2’]) 当key不存在时
clear() 删除全部缓存
close() 关闭缓存
cad.incr(‘key’,value) 相当于cad[‘key’]+=value 当然,只是相当于,不能这么做
由于底层使用的是new_value = value + delta
,那么.当value是’a’,也是可以的,只要是可以使用+的就可以
cad.decr(‘key’,value) 减 ,同上
缓存版本: VERSION 可以传入同样的键,却保存不一样的值,通过version来实现
cad.set(‘key1’,’valu’,version=3) 将key1设为version3,
ca.set('aa','dd',version=3)
ca.set(‘aa','e',version=4)
print(ca.get(‘aa’,version=3)) #=> dd
print(ca.get(‘aa’,version=4)) #=> e
incr_version(‘key’,value) 同样的,value支持+-即可
decr_version(‘key’,value)
但是不推荐直接使用str等,更不推荐使用自己的类
但当确实需要使用自定义的类来填充version时,需要重写的方法有(python3.x)
str
add
sub
以上就是详解django传递临时数据的方法的详细内容,更多请关注Gxl网其它相关文章!
查看更多关于详解django传递临时数据的方法的详细内容...