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内部自动帮你调用算法生成一个随机字符串

  1. 在django session添加数据 (数据也是加密的) >>> 随机字符串 加密后的数据 失效时间

  2. 将生产的随机字符串放回给客户端浏览器, keysessionid value随机字符串 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 和 中间件的更多相关文章

  1. Django --- cookie与session,中间件

    目录 1.cookie与session 1.cookie 2.session 2.中间件 1.中间件作用 2.用户可以自定义的五个方法 3.自定义中间件 1.cookie与session 1.cook ...

  2. day13 cookie与session和中间件

    day13 cookie与session和中间件 今日内容概要 cookie与session简介 django操作cookie与session django中间件简介 如何自定义中间件 csrf跨站请 ...

  3. Django之cookie与session、中间件

    目录 cookie与session 为什么会有cookie和session cookie 设置cookie 获取cookie 删除cookie 实例:cookie版登录校验 session 设置ses ...

  4. Django框架-cookie和session以及中间件

    目录 一.cookie 和 session 1.为什么会有这些技术 2. cookie 2.1 Django如何设置cookie 2.2 Django如何获取cookie 2.3 Django如何设置 ...

  5. Django - Cookie、Session、自定义分页和Django分页器

    2. 今日内容 https://www.cnblogs.com/liwenzhou/p/8343243.html 1. Cookie和Session 1. Cookie 服务端: 1. 生成字符串 2 ...

  6. Django cookie、session使用

    一.cookie Cookie是key-value结构,类似于一个python中的字典.随着服务器端的响应发送给客户端浏览器.然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cook ...

  7. cookie、session和中间件

    目录 cookie和session cookie与session原理 cookie Google浏览器查看cookie Django操作cookie 获取cookie 设置cookie 删除cooki ...

  8. Python Web框架篇:Django cookie和session

    part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...

  9. python Django cookie和session

    在一个会话的多个请求中共享数据,这就是会话跟踪技术.例如在一个会话中的请求如下:  请求银行主页: 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参 ...

  10. falsk 与 django cookie和session存、取、删的区别

    falsk cookie的存取删需导入from flask import Flask,make_response,request# 存COOKIE的方法@app.route('/setcookie') ...

随机推荐

  1. 串烧 JavaCAS相关知识

    JMM与问题引入 为啥先说JMM,因为CAS的实现类中维护的变量都被volatile修饰, 这个volatile 是遵循JMM规范(不是百分百遵循,下文会说)实现的保证多线程并发访问某个变量实现线程安 ...

  2. JavaScript 关于setTimeout与setInterval的小研究

    说明 在开发功能"轨迹播放"时,遇到了一个情况. 原先同事已经开发了一版,这次有个新功能:点击线上任意一点后可以从点击处重新播放. 看了一下原来的版本,发现同时使用了setTime ...

  3. 使用node.js开发一个生成逐帧动画小工具

    在实际工作中我们已经下下来不下于一万个npm包了,像我们熟悉的 vue-cli,react-native-cli 等,只需要输入简单的命令 vue init webpack project,即可快速帮 ...

  4. Docker从门外到入门使用

    取材 第一本Docker书.原作者:James Turnbull 安装 这里只说明Windows环境的安装(Windows7以上) 使用Docker Toolbox工具即可:http://mirror ...

  5. css控制ul标签下的指定li标签样式

    ul li:first-child{ }  第一个ul li:last-child{ }   最后一个ul li:nth-child(4){ } 指定第几个,4就是代表第四个ul li:nth-chi ...

  6. 网页解析--BeautifulSoup练习

    # coding = utf-8 # BeautifulSoup 主要功能是解析提取HTML数据 # re lxml bs4 # pip install Beautifulsoup4 # from b ...

  7. 科学使用Log4View2

    目录 目录 前言 科学使用 编辑和调试程序集 调试程序集 编辑程序集 结语 推荐文献 目录 NLog日志框架使用探究-1 NLog日志框架使用探究-2 科学使用Log4View2 前言 这个标题很低调 ...

  8. oracle 触发器(自增写法)

    触发器trigger 触发器我们也可以认为是存储过程,是一种特殊的存储过程. 存储过程:有输入参数和输出参数,定义之后需要调用 触发器:没有输入参数和输出参数,定义之后无需调用,在适当的时候会自动执行 ...

  9. 【软件工具】easyExcel简明使用指南

    easyExcel简介 Java领域解析.生成Excel比较有名的框架有Apache poi.jxl等.但他们都存在一个严重的问题就是非常的耗内存.如果你的系统并发量不发的话可能还行,但是一旦并发上来 ...

  10. session与cookie的介绍和两者的区别之其相互的关系

    转:https://blog.csdn.net/weixin_37196194/article/details/55806366 本文分别对Cookie与Session做一个介绍和总结,并分别对两个知 ...