django----cookie与session 和 中间件
目录
cookie与session简介及操作
cookie
保存在客户端浏览器上的键值对
虽然cookie是保存在客户端浏览器上的键值对 但是是服务端设置的 浏览器有权禁止cookie的写入
django中操作cookie
# 小白必回三板斧
obj = HttpResponse()
return obj # 效果都是一样的
# 设置cookie
obj.set_cookie('key','value') # 告诉浏览器设置
# 获取cookie
request.COOKIES.get('key') # 获取浏览器携带过来的cookies
# cookie的骚操作
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('username')
if username == 'long' and password == '123':
# 登陆成功 设置cookie
obj = redirect('/home/')
obj.set_cookie('k1','long')
return obj
return render(request, 'test.html', locals())
# 校验用户是否登录
def home(requset):
if request.COOKIES.get('k1'):
return HttpResponse('登录成功')
return redirect('/login/')
cookie超时时间
# 如何设置cookie超时时间
obj.set_cookie('k1','v1', max_age=5) # 秒为单位
obj.set_cookie('k1','v1', expires=5) # 秒为单位
# 都是设置超时时间 并且都是秒为单位 区别: 给ie浏览器设置cookies设置超时时间 只能用 expires参数.
# 装饰器
from functools import wraps
def login_auth(func):
@wraps(func)
def inner(request,*args, **kwargs):
# 判断当前用户是否登录
if request.COOKIES.get('k1'):
res = func(request, *args, **kwargs)
return res
else:
current_url = request.path_info
return redirect('/login/?next=%s'%current_url)
return inner
request.path_info 只拿url
reque*st.get_full_path() 拿url 加get请求的部分
删除cookie
.....
obj = redirect('/login/')
obj.delete_cookie('k1')
return obj
session
保存在服务端上面的键值对
session的工作机制是需要依赖于cookie的
session操作
# 设置session
request.session['k1'] = 'v1'
# 获取session
request.session.get('k1')
# 拿到随机字符串
request.session.session_key()
# 存在则不设置
request.session.setdefault('k1',123)
# 检查会话session的key在数据库中是否存在
request.session.exists("session_key")
# 删除
request.session.delete()
request.session.flush() # 只删客户端
这用于确保前面的会话数据不可以再次被用户的浏览器访问
例如,django.contrib.auth.logout() 函数中就会调用它。
# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。
会自动将数据存在django_session表中 默认过期时间是 14 天
为了数据的安全 数据库中不会明文暴露用户信息 所以是密文
设置 key value发生了什么?
1.django内部自动帮你调用算法生成一个随机字符串
在django session添加数据 (数据也是加密的) >>> 随机字符串 加密后的数据 失效时间
将生产的随机字符串放回给客户端浏览器,
key是sessionidvalue是随机字符串sessionid:随机字符串
get(session)发生了什么?
1.django内部会自动去请求头里面获取cookie
2. 拿着`sessionid`对应的随机字符串去`django_session`表中一一比对
3. 如果对比上了 会将随机字符串对应的数据取出来 自动反入` request.session`中供你调用 如果没有就是一个空字典
django session 在创建数据的时候 是针对浏览器的 所以只会保存一条
token
在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。


django中间件
django请求生命周期

中间件
类似于django的保安 一共有 7 个中间件
并且支持用户自定义中间件 让后暴露给用户五个可以自定义的方法 随意创建一个py文件 填代码即可 写完后需要 注册 (****)
只要你想做一些网站的全局性功能 你都应该考虑使用django的中间件 比如: 全局的用户登录校验, 全局的用户访问频率校验, 全局的用户权限校验
需要掌握:
process_request 请求来的时候触发 参数 request
class SecurityMiddleware(MiddlewareMixin): # 他们都继承了 middleware
pass
from django.utils.deprecation import MiddlewareMixin # 模块的导入
# 写自己的类继承 Middleware
class MyMdd1(MiddlewareMixin):
def process_request(self, request):
print('xxx')
return HttpResponse('我是xxx的response') # 该方法一旦返回了httpresponse对象 那么请求会立刻停止往后走原路立刻返回
process_response 响应走的时候触发 参数 request response 且必须要返回response 他就是后端返回给前端的数据~
class MyMdd1(MiddlewareMixin):
def process_response(self, request, response):
print('test')
return response # 必须放回response 不返回直接报错!
# 请求来的时候是从上往下
# 响应走的时候是从下往上
需要了解:
process_views 参数: request view_name *args **kwargs 路由匹配成功之后 执行视图函数之前
def process_views(self, request, view_name, *args, **kwargs):
return HttpResponse('xx') # 如果返回 HttpResponse 会从头执行process_response
process_template_response 参数: request response 当你返回的对象中含有render属性的时候会自动触发
def process_template_response(self, request, response) # 如果形参中有response 就必须返回response
print('xxx')
return response
# 需要触发需要写个函数
def index(requset):
def render():
reutrn HttpResponse('xxx')
obj = HttpResponse('xxxx')
obj.render = render
return obj
process_exception 参数 : request exception 当视图函数有异常时会自动触发 顺序是 从下往上
def process_exception(self, requset, exception):
print(exception)
django----cookie与session 和 中间件的更多相关文章
- Django --- cookie与session,中间件
目录 1.cookie与session 1.cookie 2.session 2.中间件 1.中间件作用 2.用户可以自定义的五个方法 3.自定义中间件 1.cookie与session 1.cook ...
- day13 cookie与session和中间件
day13 cookie与session和中间件 今日内容概要 cookie与session简介 django操作cookie与session django中间件简介 如何自定义中间件 csrf跨站请 ...
- Django之cookie与session、中间件
目录 cookie与session 为什么会有cookie和session cookie 设置cookie 获取cookie 删除cookie 实例:cookie版登录校验 session 设置ses ...
- Django框架-cookie和session以及中间件
目录 一.cookie 和 session 1.为什么会有这些技术 2. cookie 2.1 Django如何设置cookie 2.2 Django如何获取cookie 2.3 Django如何设置 ...
- 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 ...
- cookie、session和中间件
目录 cookie和session cookie与session原理 cookie Google浏览器查看cookie Django操作cookie 获取cookie 设置cookie 删除cooki ...
- 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') ...
随机推荐
- 【Oracle】Oracle数据库基本指标查看
目录 1.查看表空间 2.查看用户 3.查看数据库内存 4.查看数据库版本 5.oracle归档情况 6.查看redo log日志位置 7.查看数据库的控制文件 8.查看RMAN的备份情况 9.FRA ...
- GeoServer 安装教程
准备内容 安装环境:win10*64位专业版 安装文件:geoserver-2.15.2 安装步骤 安装JDK 1.安装GeoServer是基于Java的环境,所以需要先装Jdk环境. 2.前往官网下 ...
- 2019-11-7:sql注入防御,webshell概念,学习笔记
sql注入防护GPC,magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特 ...
- 新闻实时分析系统 Spark2.X环境准备、编译部署及运行
1.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面, Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理 ...
- Dart Learn Notes 02
Functions Dart是一门面向对象的语言,所以即便是方法也是一个对象,它的类型是Function. 这就意味着方法可以指向变量,也可以作为方法中的参数供其他方法使用.甚至可以让 一个类作为一个 ...
- Virtualbox修改虚拟机分配内存的大小
起因:因为虚拟机刚开始分配的内存太小,导致太卡, 解决方法:修改虚拟机分配内存的大小 方法一:必须在关闭ubuntu的前提下进行,否则无法修改 点击设置 系统选项 主板中的内存大小 之后开启即可 方法 ...
- 程序员的算法课(16)-B+树在数据库索引中的作用
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...
- 【JavaEE】之MyBatis逆向工程的使用
MyBatis逆向工程可以方便的从数据库中将表自动映射到JAVA POJO类,并同时生成Mapper.xml和Mapper接口,方便实用.下面介绍一下逆向工程的使用方法. 使用逆向工程,我们最好是新建 ...
- VLAN实验5(在ensp上利用三层交换机实现VLAN间路由)
原理概述: VLAN将一个物理的LAN在逻辑上划分成多个广播域.VLAN内的主机间可以直接通信,而VLAN间不能直接互通. 在现实网络中,经常会遇到需耍跨VLAN相互访问的情况,工程师通常会选择一些方 ...
- base64转图片、图片转base64、图片拼接、加水印(水印角度可设置)
/** * @Description: 将base64编码字符串转换为图片 * @param imgStr * base64编码字符串 * @param path * 图片路径-具体到文件 * @re ...