一、Cookie的使用
1、设置Cookie
url.set_cookie("tile","zhanggen",expires=value,path='/' )
2、Cookie的参数
key 键
value='' 值
max_age=xx # 超时时间(默认单位秒)
expires=xx #超时时间
path='/' #Cookie生效的路径,/ 表示Cookie在根路径生效
domain=xx #Cookie生效的域名
secure=False #是否通过https传输
httponly=False #只能通过http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
3、设置Cookie并加密盐
url.set_signed_cookie(key,value,salt='加密盐',...)
4、获取Cookie
request.COOKIES.get('key')
5、获取Cookie并解密盐
request.get_signed_cookie('key',salt='加密盐')
二、session的使用
1、配置setting.py
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
2、设置session
request.session['key'] = value #设置session
request.session.setdefault('key',WT) # 存在key则不设置(当key不存在设置)
3、获取session
request.session['key'] #获取session
request.session.get('key',None) #获取session,key不存在则获取的值为Node
4、删除session
del request.session['key'] #删除键key的值
request.session.delete("session_key") # 删除当前用户的所有Session数据
request.session.clear() #删除所有的session
5、获取所有 键、值、键值对
request.session.keys() #获取所有session的键,
request.session.values() #获取所有session的值
request.session.items() #获取所有session的键值对
6、获取session的随机字符串
request.session.session_key
7、将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
8、检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key")
9、设置session的过期时间
request.session.set_expiry(value)
默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的
如果value是个整数,session会在些秒数后失效。
如果value是个datatime或timedelta,session就会在这个时间后失效。
如果value是0,用户关闭浏览器session就会失效。
如果value是None,session会依赖全局session失效策略。
三、session的存储引擎(在settings.py配置)
数据库(默认)
缓存
文件
缓存+数据库
加密cookie
1、DB
SESSION_ENGINE = 'django.contrib.sessions.backends.db' #引擎(默认)
2、cache
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
3、文件
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
4、缓存+数据库Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
5、加密cookie Session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
四、Django缓存(在settings.py配置)
1、开发调试
# 此为开始调试用,实际内部不做任何操作 # 配置如下: CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎 'TIMEOUT': 300, # 缓存超时时间(默认300,None表示永不过期,0表示立即过期) 'OPTIONS': { 'MAX_ENTRIES': 300, # 最大缓存个数(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) }, 'KEY_PREFIX': '', # 缓存key的前缀(默认空) 'VERSION': 1, # 缓存key的版本(默认1) 'KEY_FUNCTION': '函数名' # 生成key的函数(默认函数会生成为:【前缀:版本:key】) } } # 自定义key def make_key(key, key_prefix, version): return ':'.join([key_prefix, str(version), key])
2、内存
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', } }
3、文件
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', 'TIMEOUT': 60, #超时为60秒 'OPTIONS': { 'MAX_ENTRIES': 1000 #最大容量为1000个项目 } } }
4、数据库
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_cache_table', #缓存数据库表 } } #之后运行" python manage.py createcachetable "创建缓存表
5、Memcache缓存(python-memcached模块)
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '10.0.0.50:11211', '10.0.0.51:11211', ] } }
6、Memcache缓存(pylibmc模块)
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': [ '10.0.0.50:11211', '10.0.0.51:11211', ] } }
7、Memcache权重缓存
# python-memcached模块 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ ('10.0.0.50:11211',10), ('10.0.0.51:11211',20), ] } } # pylibmc模块 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': [ ('10.0.0.50:11211',10), ('10.0.0.51:11211',20), ] } }
8、Redis缓存(默认Django不支持redis,需要安装插件 pip install django-redis)
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://10.0.0.88:6379", "OPTIONS": { "DB": 0, "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": { "max_connections": 100, }, } } }
五、Django缓存应用
1、全站使用
MIDDLEWARE = [ 'django.middleware.cache.UpdateCacheMiddleware', # 其他中间件... 'django.middleware.cache.FetchFromCacheMiddleware', ] CACHE_MIDDLEWARE_ALIAS = "" CACHE_MIDDLEWARE_SECONDS = "" CACHE_MIDDLEWARE_KEY_PREFIX = ""
2、单独视图缓存
# 方式一 from django.views.decorators.cache import cache_page @cache_page(60 * 15) def my_view(request): ... # 方式二 from django.views.decorators.cache import cache_page urlpatterns = [ url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)), ]
3、局部视图使用
<html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>缓存</h1> {% cache 10 缓存key %} <h1>我是缓存</h1> {% endcache %} </body> </html>