一、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>

最新文章

  1. 获取WOED和EXCEL的公用方法
  2. Nodejs&#183;构建web应用
  3. [转]ubuntu 12.04添加launcher方法
  4. 解决Linux下sqlplus中文乱码问题
  5. UVALive 3645 Objective: Berlin(最大流 :时序模型)
  6. app卡顿问题检测--KMCGeigerCounter
  7. effective C++ 读后笔记
  8. oracle-sql入门练习及答案
  9. 日志模块---logging
  10. python实现文件的复制
  11. 解密JavaScript闭包
  12. NodeJS websocket qr based on location
  13. python 利用turtle库绘制五角星
  14. C++学习(三十四)(C语言部分)之 链表
  15. 23种经典设计模式UML类图汇总
  16. Visual Basic了解
  17. 线程2--多线程NSThread
  18. springmvc 配置多个数据源,并动态切换
  19. March 26 2017 Week 13 Sunday
  20. 如何从ERP将Material的Batch信息下载到CRM并存储在settype COMM_PR_BATCH里

热门文章

  1. 【dp】Bone Collector II
  2. Missing radix parameter 错误的解决办法
  3. vscode在终端运行脚本时出现“因为在此系统上禁止运行脚本”
  4. Python 编程语言要掌握的技能之一:善用变量来改善代码质量
  5. cropperjs实践及中文文档(自译)
  6. 音视频入门-14-JPEG文件格式详解
  7. 并发编程--greenlet与gevent
  8. ctf中关于图片的隐写随笔(不全)
  9. php踩过的那些坑(2) strpos引发的血案
  10. css练习一