第三百一十三节,Django框架,Session
第三百一十三节,Django框架,Session
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:
1、数据库(默认)
2、缓存
3、文件
4、缓存+数据库
5、加密cookie
1、数据库Session,保存在数据库
Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
全局配置Session
Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
a. 配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)数据库保存session引擎
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,默认修改之后才保存(默认),默认就好
使用Session
from django.shortcuts import render
from app1.models import * #导入数据库操作模块
from app1.biaodan import * #导入自定义表单验证模块
#逻辑处理模块
def special(request):
request.session['k1'] = 123 #设置session
print(request.session['k1']) #获取session
return render(request, 'app1/index.html')
获取、设置、删除Session中指定数据
request.session['k1'] 获取Session中数据,不存在报错
request.session.get('k1',None) 获取Session中数据,不存在返回None
request.session['k1'] = 123 设置Session中数据,存在覆盖
request.session.setdefault('k1',123) 设置Session中数据,存在不设置
del request.session['k1'] 删除Session中指定数据
from django.shortcuts import render
from app1.models import * #导入数据库操作模块
from app1.biaodan import * #导入自定义表单验证模块
#逻辑处理模块
def special(request):
request.session['k1'] = 123 #设置session
print(request.session['k1']) #获取session
del request.session['k1']
return render(request, 'app1/index.html')
获取Session中所有 键、值、键值对
request.session.keys()获取Session中所有的键
request.session.values()获取Session中所有的值
request.session.items()获取Session中所有的键值对
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
from django.shortcuts import render
from app1.models import * #导入数据库操作模块
from app1.biaodan import * #导入自定义表单验证模块
#逻辑处理模块
def special(request):
request.session['k1'] = 123 #设置session
request.session['k2'] = 456 # 设置session
request.session['k3'] = 789 # 设置session
# print(request.session['k1']) #获取session #
print(request.session.keys())
print(request.session.values())
print(request.session.items()) return render(request, 'app1/index.html')
获取用户session的随机字符串,也就是session名称
request.session.session_key获取用户session的随机字符串,也就是session名称
from django.shortcuts import render
from app1.models import * #导入数据库操作模块
from app1.biaodan import * #导入自定义表单验证模块
#逻辑处理模块
def special(request):
request.session['k1'] = 123 #设置session
request.session['k2'] = 456 # 设置session
request.session['k3'] = 789 # 设置session
# print(request.session['k1']) #获取session print(request.session.session_key) return render(request, 'app1/index.html')
将所有Session失效日期小于当前日期的数据在数据库删除,也就是在数据库删除过期的Session数据
request.session.clear_expired()
from django.shortcuts import render
from app1.models import * #导入数据库操作模块
from app1.biaodan import * #导入自定义表单验证模块
#逻辑处理模块
def special(request):
# request.session['k1'] = 123 #设置session
# request.session['k2'] = 456 # 设置session
# request.session['k3'] = 789 # 设置session
# print(request.session['k1']) #获取session request.session.clear_expired() return render(request, 'app1/index.html')
request.session.exists("获取当前随机字符串")检查 用户session的随机字符串 在数据库中是否
from django.shortcuts import render
from app1.models import * #导入数据库操作模块
from app1.biaodan import * #导入自定义表单验证模块
#逻辑处理模块
def special(request):
request.session['k1'] = 123 #设置session a = request.session.session_key
print(request.session.exists(a)) return render(request, 'app1/index.html')
request.session.delete("获取当前用户随机字符串")删除当前用户的所有Session数据
from django.shortcuts import render
from app1.models import * #导入数据库操作模块
from app1.biaodan import * #导入自定义表单验证模块
#逻辑处理模块
def special(request):
request.session['k1'] = 123 #设置session a = request.session.session_key
request.session.delete(a) return render(request, 'app1/index.html')
request.session.set_expiry(value)设置session失效时间
* 如果value是个整数,session会在value秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。
2、缓存Session,保存在服务器内存
a. 配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎,表示保存在内存
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(default默认内存缓存,也可以是memcache,如果是memcache这里设置memcache缓存配置名称),此处别名依赖缓存的设置,见缓存章节
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,默认修改之后才保存
使用同上
3、文件Session,保存在文件里
a. 配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎,文件保存引擎
SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
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,默认修改之后才保存
使用同上
4、缓存+数据库Session,缓存和数据库都保存
用户首次将Session保存到数据库,并保存一份到缓存,第二次到缓存里拿,如果缓存里没有,在到数据库拿又保存到缓存
数据库用于做持久化,缓存用于提高效率
a. 配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
使用同上
5、加密cookie Session,Session以cookie方式加密后保存在客户端
a. 配置 settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
登录认证小列子
def login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
if username == "zhangsan" and password == "":
request.session["IS_LOGIN"] = True #创建session
return redirect("/app01/home/")
return render(request,"app01/login.html") def home(request):
islogin = request.session.get("IS_LOGIN",False)
if islogin:#如果用户已登录
return render(request,"app01/menus.html")
else:
return redirect("/app01/login/") def logout(request):#退出
try:
del request.session['IS_LOGIN']
except KeyError:
pass
return redirect("/app01/login/")
Session,保存在Redis
首先安装Redis软件,然后安装第三方插件django-redis模块
需要在全部配置里,将缓存配置和Session配置都要配置上
#缓存配置
# 自定义缓存key
def default_key_func(key, key_prefix, version):
return '%s:%s:%s' % (key_prefix, version, key)
# 配置:
CACHES = {
'default': {
'BACKEND': "django_redis.cache.RedisCache", #配置文件引擎
'LOCATION': "redis://127.0.0.1:6379", #配置文件缓存路径 'TIMEOUT': 300, # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期)如果使用中没设置,这里启用
'OPTIONS': {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
'MAX_ENTRIES': 300, # 最大缓存个数(默认300)
'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3,删除百分之3)
},
'KEY_PREFIX': 'jxiou', # 缓存key的前缀(默认空)
'VERSION': 1, # 缓存key的版本(默认1),设置后缓存key会是,KEY_PREFIX前缀加VERSION版本
# 'KEY_FUNCTION': default_key_func # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
}
}
#配置Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎,表示保存在内存
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(default默认内存缓存,也可以是memcache,如果是memcache这里设置memcache缓存配置名称),此处别名依赖缓存的设置,见缓存章节 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,默认修改之后才保存
应用同上
第三百一十三节,Django框架,Session的更多相关文章
- 第三百一十二节,Django框架,Cookie
第三百一十二节,Django框架,Cookie 注意:获取Cookie是在请求对象里处理,设置Cookie是在响应对象里处理 普通Cookieset_cookie()设置普通cookie 参数: ke ...
- 第三百一十九节,Django框架,文件上传
第三百一十九节,Django框架,文件上传 1.自定义上传[推荐] 请求对象.FILES.get()获取上传文件的对象上传对象.name获取上传文件名称上传对象.chunks()获取上传数据包,字节码 ...
- 第三百一十八节,Django框架,信号
第三百一十八节,Django框架,信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 也就是当程序有指定动作时, ...
- 第三百一十六节,Django框架,中间件
第三百一十六节,Django框架,中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间 ...
- 第三百一十五节,Django框架,CSRF跨站请求伪造
第三百一十五节,Django框架,CSRF跨站请求伪造 全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...
- 第三百一十四节,Django框架,自定义分页
第三百一十四节,Django框架,自定义分页 自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring impo ...
- 第三百一十节,Django框架,模板语言
第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...
- 第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别
第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别 第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://gith ...
- Python学习(三十)—— Django框架简介
转载自:http://www.cnblogs.com/liwenzhou/p/8296964.html Django框架简介 一.MVC框架和MTV框架(了解即可) MVC,全名是Model View ...
随机推荐
- RichTextBox指定全部文字显示不同颜色及部分文字高亮颜色显示
指定全部显示不同颜色: public void SetTextContent(string text, ColorEnum color) { Font font = , FontStyle.Bold) ...
- Nodejs 使用 Chrome DevTools 调试 --inspect-brk
参考链接: https://cnodejs.org/topic/5a9661ff71327bb413bbff5b https://github.com/nswbmw/node-in-debugging ...
- 从一到面试题了解js异步机制:setTimeout 和 Pronmise
1.毫无疑问setTimeout是最晚输出的 2.请无视undefined,这是浏览器的返回值. 3.new Promise中并不是异步,而.then()后才是异步.
- [原创]JAVA技巧:去除ArrayList<Object>里面的重复记录
简单说明 ArrayList中保存的是某种类型的对象,如User,现在需要将对象属性userid重复的都去掉,使userid唯一,要如何处理? 实现步骤 代码如下方所示,实现一个Comparator的 ...
- MongoDB查询指定字段(field)返回指定字段的方法
使用MongoDB的时候需要只查询指定的字段进行返回,也就是类似mysql里面的 SELECT id,name,age 这样而不是SELECT *.在MongoDB里面映射(projection)声明 ...
- go系列之数组
数组 数组是同一类型元素的集合.例如,整数集合 5,8,9,79,76 形成一个数组.Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组.(译者注:当然,如果是 interface{} ...
- 【转】sql server存储过程中SELECT 与 SET 对变量赋值的区别
转自:http://www.cnblogs.com/micheng11/archive/2008/07/08/1237905.html SQL Server 中对已经定义的变量赋值的方式用两种,分别是 ...
- unity3D角色代码控制问题
///////////////2015/07/06//////// ///////////////by xbw////////////// //////////////环境 unity4.6.1// ...
- vim设置文本宽度
'textwidth' 'tw' number (default 0) local to buffer ...
- 判断js对象是否拥有某一个属性的js代码
js对象是否拥有某一个属性的判断方法有很多. 本文分享一个简单的方法,如下: <script> /** * 判断js对象是否具有某属性 * by www.jbxue.com */ var ...