django框架cookie和session用法实例详解


Posted in Python onDecember 10, 2019

本文实例讲述了django框架cookie和session用法。分享给大家供大家参考,具体如下:

首先知道http协议

http协议它是无状态的协议,验证的信息不会保留

基于请求响应,短连接

cookie

指一段小信息,内部是一组组的键值对,保存在客户端

访问一个地址时,服务器生成一个cookie,由浏览器保留在本地,再次访问地址时就会携带这个cookie,一般用于用户信息的验证

cookie的设置:

obj.set_cookie(key,value,...)

下面来看一个简单的例子

#设置cookie
def login(request):
 if request.method=="POST":
  user=request.POST.get("user")
  pwd=request.POST.get("pwd")
  user=UserInfo.objects.filter(user=user,pwd=pwd).first()
  if user:
   obj=HttpResponse("登陆成功")
   obj.set_cookie("is_login",True)
   return obj
 return render(request,"login.html")

#获取cookie并进行判断
def index(request):
 ret=request.COOKIES.get("is_login")
 if not ret:
  return redirect("/login/")
 return render(request,"index.html")

其他参数

参数:

key, 键
value='', 值
max_age=None, 超时时间
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=True 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

cookie的删除

obj.delete_cookie("is_login")

下面来看一个登陆和注销页面

def books(request):
 is_login=request.COOKIES.get("is_login")
 if not is_login:
  return_url=request.path_info #判断是否有cookies没有则记录到return_url
  if return_url:
   return redirect("{}?return_url={}".format("/login/",return_url)) #将return_url加到路径后面返回到login页面,等到用户验证登陆后直接跳转到这个页面
 book_list=Book.objects.all()
 return render(request,"books.html",locals())
def login(request):
 error_msg=''
 if request.method=="POST":
  user=request.POST.get("user")
  pwd=request.POST.get("pwd")
  user_au=UserInfo.objects.filter(user=user,pwd=pwd).first() #从数据库中验证用户
  if user_au:
   return_url=request.GET.get('return_url') 
   if return_url:










#判断是否有return_url
    ret=redirect(return_url)
   else:
    ret=HttpResponse("进入其他页面")    
   ret.set_cookie("is_login",True)      #验证成功则设置cookies
   return ret
  error_msg="用户名或者密码错误"
 return render(request,"login.html",locals())

def logout(request):
 ret=redirect("/login/")
 ret.delete_cookie('is_login')
 return ret

验证第一种情况

django框架cookie和session用法实例详解 ---------------------------》》》》》django框架cookie和session用法实例详解  

#####################################################################################################################################################################################

验证第二种情况

django框架cookie和session用法实例详解----------》》》》》django框架cookie和session用法实例详解------》》》django框架cookie和session用法实例详解

session

由于cookies保存在客户端上面,存在不安全因素,并且有长度限制---4096

进而引入了session

session的用法

# 获取、设置、删除Session中数据
request.session['k1'] #获取
request.session.get('k1',None) #获取
request.session['k1'] = 123 #设置
request.session.setdefault('k1',123) # 存在则不设置
del request.session['k1']

# 所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
# 会话session的key
request.session.session_key
# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
# 检查会话session的key在数据库中是否存在
request.session.exists("session_key")
# 删除当前会话的所有Session数据
request.session.delete() #删除reponse sessionid,用户已经访问不了了,但是可以看到 request sessionid
# 删除当前的会话数据并删除会话的Cookie。
request.session.flush() # reponse 和 request sessionid都看不到
 这用于确保前面的会话数据不可以再次被用户的浏览器访问
 例如,django.contrib.auth.logout() 函数中就会调用它。
# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
 * 如果value是个整数,session会在些秒数后失效。
 * 如果value是个datatime或timedelta,session就会在这个时间后失效。
 * 如果value是0,用户关闭浏览器session就会失效。
 * 如果value是None,session会依赖全局session失效策略。

下面来看一个例子

def books(request):
 # is_login=request.COOKIES.get("is_login")
 is_login=request.session.get("is_login")
 if not is_login:
  return_url=request.path_info
  if return_url:
   return redirect("{}?return_url={}".format("/login/",return_url))
 book_list=Book.objects.all()
 return render(request,"books.html",locals())
def login(request):
 error_msg=''
 if request.method=="POST":
  user=request.POST.get("user")
  pwd=request.POST.get("pwd")
  user_au=UserInfo.objects.filter(user=user,pwd=pwd).first()
  if user_au:
   return_url=request.GET.get('return_url')
   if return_url:
    ret=redirect(return_url)
   else:
    ret=HttpResponse("进入其他页面")
   # ret.set_cookie("is_login",True)
   request.session['is_login']=True
   return ret
  error_msg="用户名或者密码错误"
 return render(request,"login.html",locals())
def logout(request):
 ret=redirect("/login/")
 # ret.delete_cookie('is_login')
 request.session.delete() #删除Reponse sessionID
 # request.session.flush() #删除Reponse sessionID和Request sessionID
 return ret

设置了session之后,数据库会自动生成一个表,表名:django_session

django框架cookie和session用法实例详解

我们来查看session的默认设置

from django.conf import settings,global_settings
通过 global_settings查看到下面信息
############
# SESSIONS #
############

# Cache to store session data if using the cache session backend.
SESSION_CACHE_ALIAS = 'default'
# Cookie name. This can be whatever you want.
SESSION_COOKIE_NAME = 'sessionid'
# Age of cookie, in seconds (default: 2 weeks).
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
# A string like ".example.com", or None for standard domain cookie.
SESSION_COOKIE_DOMAIN = None
# Whether the session cookie should be secure (https:// only).
SESSION_COOKIE_SECURE = False
# The path of the session cookie.
SESSION_COOKIE_PATH = '/'
# Whether to use the non-RFC standard httpOnly flag (IE, FF3+, others)
SESSION_COOKIE_HTTPONLY = True
# Whether to save the session data on every request.
SESSION_SAVE_EVERY_REQUEST = False
# Whether a user's session cookie expires when the Web browser is closed.
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
# The module to store session data
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
# Directory to store session files if using the file session module. If None,
# the backend will use a sensible default.
SESSION_FILE_PATH = None
# class to serialize session data
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'

1. 数据库Session

SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)

2. 缓存Session

SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default'       # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

3. 文件Session

SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None         # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()

4. 缓存+数据库

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'  # 引擎

5. 加密Cookie Session

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎

其他公用设置项:

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框架的Python程序设计有所帮助。

Python 相关文章推荐
python检测服务器是否正常
Feb 16 Python
21行Python代码实现拼写检查器
Jan 25 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
详解Python装饰器
Mar 25 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
浅析python内置模块collections
Nov 15 Python
Python logging日志模块 配置文件方式
Jul 12 Python
python Xpath语法的使用
Nov 26 Python
python 基于opencv实现高斯平滑
Dec 18 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 #Python
opencv设置采集视频分辨率方式
Dec 10 #Python
django框架forms组件用法实例详解
Dec 10 #Python
django框架auth模块用法实例详解
Dec 10 #Python
django框架中间件原理与用法详解
Dec 10 #Python
Django2 连接MySQL及model测试实例分析
Dec 10 #Python
python实现将视频按帧读取到自定义目录
Dec 10 #Python
You might like
php定时执行任务设置详解
2015/02/06 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
js获取height和width的方法说明
2013/01/06 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
简单实现IONIC购物车功能
2017/01/10 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
深入解析Vue 组件命名那些事
2017/07/18 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
python中split方法用法分析
2015/04/17 Python
python实现在windows服务中新建进程的方法
2015/06/30 Python
python Django模板的使用方法
2016/01/14 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
Django继承自带user表并重写的例子
2019/11/18 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
中专毕业生自我鉴定范文
2013/11/09 职场文书
医院办公室主任职责
2013/12/29 职场文书
文秘大学生求职信
2014/02/25 职场文书
小学语文国培感言
2014/03/04 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
教师个人自我评价范文
2014/04/13 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
golang 比较浮点数的大小方式
2021/05/02 Golang