Django --- cookie与session,中间件
1.cookie与session
1.cookie
1.什么是cookie
因为HTTP协议是无状态的,所以为了保存客户端的用户状态,在客户端就是用cookie来保存用户的状态
注意:cookie是保存在客户端的校验
2.cookie的特性
- 是保存在客户端浏览器上的键值对
- cookie的值可以通过自己来设置,也可以通过服务端来设置
- 浏览器有权禁止cookie的写入
3.django如何操作cookie
在使用小白必会三板斧的时候,不能直接使用,需要进行一下转化,但是使用的方式还是一样的
obj = HttpResponse() # 利用obj对象你才可以操作cookie
return obj
obj = render()
return obj
obj = redirect()
return obj
4.如何设置cookie
1.设置cookie值
obj.set_cookie('k1','v1') # 对浏览器中的cookie进行设置
2.获取cookie值
request.COOKIE.get('k1') # 获取浏览器携带过来的cookie值
3.设置cookie的超时时间
obj.set_cookie('k1','v1',max_age=3)
obj.set_cookie('k1','v1',expires=3)
两者的区别:
1.相同点:两个参数都是设置时间的,并且都是以秒为单位
2.不同点:IE只能使用expires设置超时时间,
4.删除cookie
obj.delete_cookie('k1')
2.session
因为前端的校验太过于简单,所以为了安全,使用后端校验,这样的可以保证数据的安全,也可以对用户的登录进行设置。session也可以存数据“。
注意:session是在服务端的,数据在服务端按照键值对的行式进行保存,session的工作需要依赖于cookie。
django中的session是针对浏览器的
session可以放在任意能够作为数据库的地方:文件,内存,缓存,配置文件。
1.设置session
在django中设置session的时候需要注意的是,数据库中一定要有django_session表,如果没有的话执行数据库迁移命令
>>> python manage.py makemigrations
>>> python manage.py migrate
2.session默认时间
session默认的失效时间是14天,也就是两周
3.设置session值
1.添加session
request.session['k1'] = 'v1'
这一步的操作执行的事情:
1.django会自动生成一个随机的字符串
2.django将发送过去的数据键值对也进行加密
3.将产生的随机字符串返回给客户端浏览器,让浏览器保存,是再cookie中保存的,方式是sessionid:随机字符串
2.获取session
request.session.get('k1')
这一步的操作执行的事情
1.django内部会自动去请求头里面获取cookie
2.拿着sessionid所对应的随机字符串去django_session表中一一对比
3.如果比对上了,会将随机字符串对应的数据获取出来,自动放入request.session中供程序员调用,如果没有值就返回一个空字典
3.删除session
request.session.delete() # 会将客户端与服务端的数据全部删除
request.session.flush() # 客户端删除,服务端保留
4.设置失效时间
# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。
5.其他功能
# 获取、设置、删除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.session_key
# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
# 检查会话session的key在数据库中是否存在
request.session.exists("session_key")
# 删除当前会话的所有Session数据
request.session.delete()
# 删除当前的会话数据并删除会话的Cookie。
request.session.flush()
这用于确保前面的会话数据不可以再次被用户的浏览器访问
例如,django.contrib.auth.logout() 函数中就会调用它。
总结:cookie与session就是为了存储数据的,可以帮助保存用户的状态,cookie再客户端,session在服务端。
2.中间件
django 默认有五个中间件,并且支持用户自定义中间件,暴漏给用户五个可以自定义的五个方法
1.中间件作用
想要做一些网站的全局性功能,都可以考虑使用django的中间件
1.全局的用户登录校验
2.全局的用户访问频率校验
3.全局的用户权限校验
包含全局的都可以使用中间件完成操作
2.用户可以自定义的五个方法
方法一
process_request # 请求来的时候触发
1.请求来的时候会按照settings配置文件中从上往下的顺序,依次执行每一个中间件内部定义的process_request方法,如果中间件内部没有该方法,直接跳过执行下一个中间件
2.该方法一旦返回了HttpResponse对象,呢么请求会立刻停止往后走,原路返回
方法二
process_response # 请求响应的时候触发
1.响应的时候会按照settings配置文件中从下往上的顺序,依次执行每一个中间件内部定义的process_response方法
2.该方法有两个形参(request,response),并且必须返回response形参,不返回直接报错
3.该方法返回什么(HttpResponsed对象),前端就能获得什么
总结:当process_request方法直接返回HttpResponse对象之后,会直接从当前中间件里面的process_response往回走,没有执行的中间件都不会再执行
方法三
process_view # 路由匹配成功之后,执行视图函数之前触发
1.路由匹配成功执行视图函数之前触发
2.如果该方法返回了HttpResponse对象,呢么会从下往上依次经过每一个中间件里的process_response
方法四
process_templates_response #
1.当你返回的对象中含有render属性指向的是一个render方法的时候才会触发,从下往上顺序
方法五
process_exception # 当视图函数中出现错误的时候会自动触发
1.当时图函数中出现错误,会自动触发,顺序是从上往下
上面这五个方法,会在特定的阶段自动触发
3.自定义中间件
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,render,redirect
class MyMdd1(MiddlewareMixin):
def process_request(self,request):
print('我是第一个中间件里面的process_request方法')
# return HttpResponse("我是中间件一里面的")
def process_response(self,request,response):
"""
:param request:
:param response: 就是后端返回给前端的数据
:return:
"""
print('我是第一个中间件里面的process_response方法')
return response
# return HttpResponse("我是中间件一里面的")
def process_view(self,request,view_name,*args,**kwargs):
print(view_name)
print(args)
print(kwargs)
print('我是第一个中间件里面的process_view方法')
# return HttpResponse("我是中间件一里面的process_view")
def process_exception(self,request,exception):
print('我是第一个中间件里面的process_exception')
print(exception)
def process_template_response(self, request, response):
print('我是第一个中间件里面的奇葩方法')
return response
class MyMdd2(MiddlewareMixin):
def process_request(self,request):
print('我是第二个中间件里面的process_request方法')
# return HttpResponse('我是中间件二里面的')
def process_response(self,request,response):
"""
:param request:
:param response: 就是后端返回给前端的数据
:return:
"""
print('我是第二个中间件里面的process_response方法')
return response
# return HttpResponse("我是中间件二里面的")
def process_view(self,request,view_name,*args,**kwargs):
print(view_name)
print(args)
print(kwargs)
print('我是第二个中间件里面的process_view方法')
# return HttpResponse("我是中间件二里面的process_view")
def process_exception(self, request, exception):
print('我是第二个中间件里面的process_exception')
print(exception)
def process_template_response(self, request, response):
print('我是第二个中间件里面的奇葩方法')
return response
注意点:
1.新建一个文件夹,新建一个文件写中间件
2.需要在settings中进行配置,按照规定的格式进行配置
3.中间件中执行的顺序是从上往下,回去的时候是从下网上
4.写自定义中间件的时候要继承类:MiddlewareMixin
5.上面的五点按照方法的行式写在新建的类中,在特殊情况下会自动触发
Django --- cookie与session,中间件的更多相关文章
- django 2 ORM操作 ORM进阶 cookie和session 中间件
ORM操作 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- Django - Cookie、Session、自定义分页和Django分页器
2. 今日内容 https://www.cnblogs.com/liwenzhou/p/8343243.html 1. Cookie和Session 1. Cookie 服务端: 1. 生成字符串 2 ...
- Django cookie、session使用
一.cookie Cookie是key-value结构,类似于一个python中的字典.随着服务器端的响应发送给客户端浏览器.然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cook ...
- Python Web框架篇:Django cookie和session
part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...
- python Django cookie和session
在一个会话的多个请求中共享数据,这就是会话跟踪技术.例如在一个会话中的请求如下: 请求银行主页: 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参 ...
- falsk 与 django cookie和session存、取、删的区别
falsk cookie的存取删需导入from flask import Flask,make_response,request# 存COOKIE的方法@app.route('/setcookie') ...
- django cookie与session组件
本文目录 1 会话跟踪技术 2 cookie介绍 Django中操作Cookie Session Django中Session相关方法 Django中的Session配置 CBV中加装饰器 回到目录 ...
- django cookie and session
cookie和session 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作 ...
- django cookie、session
Cookie.Session简介: Cookie.Session是一种会话跟踪技术,因为http请求都是无协议的,无法记录上一次请求的状态,所以需要cookie来完成会话跟踪,Seesion的底层是由 ...
随机推荐
- linux线程间同步方式总结梳理
线程间一般无需特别的手段进行通信,由于线程间能够共享数据结构,也就是一个全局变量能够被两个线程同时使用.只是要注意的是线程间须要做好同步! 使用多线程的理由: 1. 一个是和进程相比,它是一种非常&q ...
- TCP协议的11种状态及其变化过程?传输的内容又是什么?
在TCP的11种状态变迁中,我们需要用到TCP头部的三个标志位: 1.SYN,SYN=1表示这是一个连接请求报文或者连接接受报文 2.ACK,ACK=1,表示确认号生效 3.FIN,FIN=1表示发送 ...
- 解决计算精度问题:BigDecimal
BigDecimal类 BigDecimal所在包:java.math,不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成 ...
- 长乐培训Day4
T1 矩阵 题目 [题目描述] 从前有个 n×m 的矩阵,初始时每个位置均为 0.你需要依次执行 q 个操作,每个操作会指定一行或一列,然后将该行或该列的所有元素全部赋为一个相同的值. 输出操作完成后 ...
- Python开发【源码剖析】 List对象
前言 本文探讨的Python版本为2.7.16,可从官网上下载,把压缩包Python-2.7.16.tgz解压到本地即可 需要基本C语言的知识(要看的懂) PyListObject对象 PyListO ...
- proxy_banner
- MySQL Group Replication的安装部署
一.简介 这次给大家介绍下MySQL官方最新版本5.7.17中GA的新功能 Group Replication . Group Replication是一种可用于实现容错系统的技术.复制组是一组通过消 ...
- bootstrap-datetimepicker 日期控件起始时间和结束时间
项目中经常会用到起止时间,如下图: 需要引用以下几个文件: <link href="~/lib/bootstrap/dist/css/bootstrap.min.css" r ...
- Java对list进行分页,subList()方法实现分页
/** * 自定义List分页工具 * @author hanwl */ public class PageUtil { /** * 开始分页 * @param list * @param pageN ...
- spring boot打包,依赖、配置文件分离,拷贝启动脚本
一.最终打包的目录结构 二.项目结构 三.开始 1.最终打包的目录,可根据自己需要修改. <properties> <mzservice.path>${project.buil ...