好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解django传递临时数据的方法

把最近用到的临时数据传递总结下

有三种方法,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传递临时数据的方法的详细内容...

  阅读:42次