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. Arduino驱动ILI9341彩屏(一)——颜色问题

    最近在淘宝的店铺上淘到了一块ILI9341的彩色液晶屏,打算研究一下如何使用. 淘宝店铺购买屏幕之后有附源代码可供下载,代码质量惨不忍睹,各种缩进不规范就不说了,先拿来试一下吧. 这是淘宝店铺代码的核 ...

  2. C# 根据字符串生成二维码

    1.先下载NuGet包(ZXing.Net) 2.新建控制器及编写后台代码 using System; using System.Collections.Generic; using System.D ...

  3. NIO流的学习以及Buffer的相关操作

    NIO的使用 一).什么叫NIO? 定义:是一套新的Java I/O标准, 在java1.4中被纳入JDK中. 二).NIO的实现方法 NIO是基于块的, 以块为基本单位处理数据. 标准的I/O是基于 ...

  4. ftp用户和密码

    centos7 FTP修改密码: 1.查看ftp的用户:cat /etc/vsftpd/ftpusers 2.passwd ftp的用户 (输入两次) 3.重启ftp:service vsftpd r ...

  5. Install gitlab

    yum install -y curl policycoreutils-python openssh-server postfix wget wget https://mirrors.tuna.tsi ...

  6. EntityFramework Core 3.0查询

    前言 随着.NET Core 3.0的发布,EF Core 3.0也随之正式发布,关于这一块最近一段时间也没太多去关注,陆续会去对比之前版本有什么变化没有,本节我们来看下两个查询. 分组 我们知道在E ...

  7. 69道Spring面试题及答案

    目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spri ...

  8. c# 基于DataTable的Compute方法的扩展

    DataTable.Compute(String, String) 方法 定义 命名空间:System.Data 程序集:System.Data.dll, netstandard.dll, Syste ...

  9. .Net Core3.0 WEB API 中使用FluentValidation验证,实现批量注入

    为什么要使用FluentValidation 1.在日常的开发中,需要验证参数的合理性,不紧前端需要验证传毒的参数,后端也需要验证参数 2.在领域模型中也应该验证,做好防御性的编程是一种好的习惯(其实 ...

  10. Spring(Bean)3

    bean的继承<!-- bean 的继承 作为模板来使用. 可以通过abstract="true"来指定把该bean配置为·抽象的. 通过abstract="tru ...