第三百一十三节,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 ...
随机推荐
- BPMN2.0 规范
1 启动事件 每个流程总是以启动事件作为入口,启动事件在BPMN2.0 中以细线圆圈表示.分为三种类型 空启动事件 定时启动事件 异常启动事件 消息启动事件 启动事件都是等待第三方触发才可以启动. 定 ...
- mac下安装mysqlcient 报错
一.我在mac下pip3安装mysqlclient 报错: pip3 install mysqlclient Collecting mysqlclient Using cached mysqlclie ...
- selenium+phantomJS爬虫,适用于登陆限制强,点触验证码等一些场景
selenium是非常出名的自己主动化測试工具,多数场景是測试project师用来做自己主动化測试,可是相同selenium能够作为基本上模拟浏览器的工具,去爬取一些基于http request不能或 ...
- iOS学习笔记37-时间和日期计算
一.时间和日期计算 我们在应用开发中,时常须要和时间打交道,比方获取当前时间,获取两个时间点相隔的时间等等,在iOS开发中与时间相关的类有例如以下几个: 1. NSDate:表示一个绝对的时间点 2. ...
- 外网登陆SAP的两种方式
1.用SAP router实现从外网登录SAPserver(方式一) 自已搭建的局域网结构例如以下: SAPserverIP: 192.168.0.2, 路由器中设为DMZ区 在SAPserver上启 ...
- vim打造简易C语言编辑器(在用2016.7.10)
vim和C语言都需要长期的学习,才能够精通,我制作了这个简单的笔记,主要的作用是,不要在重复的,反复的找同一样东西了,积累是成功的关键. 1. 安装pathogen插件管理器. 在官网下载pathog ...
- Animator根运动清除刚体速率问题测试
在根运动打开时,施加AddForce,速率在后面几帧被清0了: 没有打开根运动AddForce的情况: unity论坛看了下,似乎有人遇到这个问题,而且无解.只能受力状态下关闭根运动 Q:Im wor ...
- 批处理学习笔记14 - 把所有.mp4文件全部拷贝进统一目录
今天下载了一套视频教程,结果发现不在同一个目录下,很乱.都放在不同文件夹下. 于是写了一个批处理来解决这个问题 @echo off for /r %%i in (*mp4) do ( copy %%i ...
- cocos2d-x -- removeChild
Test5::Test5() { CCSprite* sp1 = CCSprite::create(s_pPathSister1); CCSprite* sp2 = CCSprite::create( ...
- 每日英语:China Overtakes U.S. in Number of Diabetes Cases
China is now home to the world's largest diabetes population. The number of people who have diabetes ...