Cookie、Session、CBV加装饰器的三种方法

【0】cookie、session和Token的发展史

【1】Cookie的形式

  • 存储形式:k:v键值对
  • 存储位置:客户端
  • 缺点:不安全,信息可能会泄露

【2】session的形式

  • 标识符,表示我是当前用户加密出来的数据
  • 对敏感信息进行加密处理
    • 存储服务端
    • 标识符配合上你的加密串
  • 把某个数据的标识符+字符串全给服务端
    • 客户端存储格式
      • session_id:返回回来的标识符+加密串

【3】Cookie方法

        【3.1】设置Cookie

obj = HttpResponse('ok')obj.set_cookie('K','V')'''
HttpResponse:django的三板斧,返回的是字符串.set_cookie('k','v')  -------------  设置cookie  k:key值   v:value值设置cookie是不只是使用django三板斧中的HttpResponse,其余两个都能使用'''

        【3.2】cookie取值

request.COOKIES.get('k')

        【3.3】设置过期时间

obj.set_cookie('k','v',expires=3)obj.set_cookie('k','v',max_age=3)'''
expires:设置超时时间,单位为秒max_age:设置超时时间,单位为秒'''

        【3.4】删除cookie

def logout(request,*args,**kwargs):obj = redirect('/home/')obj.delete_cookie('sign')return obj

【4】Session

【4.1】session注意事项

  • session基于数据库表才能使用
    • 必须先迁移数据库,生层django_session表
  • session只对当次登录有效
    • 主动清除浏览器中本地存在的session
    • 验签发现,没有sessionid就会生成新的session
  • django_session表中的数据取决于浏览器
  • 同一个计算机(IP地址)上同一个浏览器只会有一条数据生效
  • 同一个计算机(IP地址)上多个浏览器会有多个数据生效
  • 当session过期的时候,可能会出现多条数据对应一个浏览器
    • 但是这些数据不会持久化存储,会被定时清理掉,可以手动清除也可以代码清除
  • 目的是为了节省服务器数据库资源

        【4.2】设置session

request.session['sign'] = 'user''''
sign  --------  k值user  --------  v值'''

        【4.3】session取值

sign = request.session.get('sign')

        【4.4】session设置过期时间

# 设置sessionrequest.session['key'] = 'value'# 设置过期时间request.session.set_expiry()'''
参数:1、整数:设置多少秒过期2、日期:设置到指定日期失效3、0:退出浏览器失效4、不写:失效时间取决于Django内部全局session失效的时间'''

        【4.5】清空session

def clear_session(request):request.session.delete()'''
request.session.delete(): 只删除服务端1、该方法用于删除当前用户的Session数据,但会保留Session的Key2、这意味着Session对象本身仍然存在,但其中的数据将被清空3、下次访问时,如果Session没有被重新填充,则会得到一个空的Session对象简而言之,就是使用request.session.delete()方法,会删除浏览器端的session,数据库中的数据不会被删除'''
def clear_session(request):request.session.flush()'''
request.session.flush():服务端和客户端都删除该方法用于完全删除当前用户的Session,包括Session对象和所有相关数据下次访问时,将创建一个新的空Session对象简而言之,就是删除了浏览器端和数据库中的session '''

        【4.6】保存session

        

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,默认修改之后才保存(默认)

【5】CBV加装饰器的三种方法

from django.utils.decorators import method_decorator# 方式二:放在类视图上面 (放的装饰器函数,name指定你的视图函数里面的方法)
# @method_decorator(login_auth, name='get')
# @method_decorator(login_auth, name='post')
class UserView(View):# 方式三 : dispactch 方法加装饰器 : 本视图函数内所有的视图都需要走装饰器@method_decorator(login_auth)def dispatch(self, request, *args, **kwargs):# Try to dispatch to the right method; if a method doesn't exist,# defer to the error handler. Also defer to the error handler if the# request method isn't on the approved list.if request.method.lower() in self.http_method_names:handler = getattr(self, request.method.lower(), self.http_method_not_allowed)else:handler = self.http_method_not_allowedreturn handler(request, *args, **kwargs)# 方式一:加在视图函数上面# @method_decorator(login_auth)def get(self, request, *args, **kwargs):return HttpResponse("这是home页面")

         【5.1】补充

CSRF Token相关装饰器在CBV只能加到dispatch方法上

或者加在视图类上然后name参数指定为dispatch方法。

 

备注:

csrf_protect ----------无论settings.py文件中的中间件中的csrf有没有被注释掉都会报错

        1、为当前函数强制设置防跨站请求伪造功能

        2、即便settings中没有设置中间件

 

        

from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decoratorclass HomeView(View):@method_decorator(csrf_exempt)def dispatch(self, request, *args, **kwargs):return super(HomeView, self).dispatch(request, *args, **kwargs)def get(self, request):return render(request, "home.html")def post(self, request):print("Home View POST method...")return redirect("/index/")

 


csrf_exempt  ---------- settings.py文件中的中间件中的csrf没有注释掉也不会报错

        1、取消当前函数防跨站请求伪造功能

        2、即便settings中设置了全局中间件

 

        

from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator@method_decorator(csrf_exempt, name='dispatch')
class HomeView(View):def dispatch(self, request, *args, **kwargs):return super(HomeView, self).dispatch(request, *args, **kwargs)def get(self, request):return render(request, "home.html")def post(self, request):print("Home View POST method...")return redirect("/index/")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/208496.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马React18: Redux

黑马React: Redux Date: November 19, 2023 Sum: Redux基础、Redux工具、调试、美团案例 Redux介绍 Redux 是React最常用的集中状态管理工具,类似于Vue中的Pinia(Vuex),可以独立于框架运行 作用:通过集中管理的方式管…

5-7求三种数的和

#include<stdio.h> int main(){double sum10;double sum20;double sum30;double sum;int i;for(i1;i<100;i){sum1sum1i;}printf("sum1结果是&#xff1a;%15.6f\n",sum1);for(i1;i<50;i){sum2sum2i*i;}printf("sum2结果是&#xff1a;%15.6f\n"…

BLE通用广播包

文章目录 1、蓝牙广播数据格式2、扫描响应数据 1、蓝牙广播数据格式 蓝牙广播包的最大长度是37个字节&#xff0c;其中设备地址占用了6个字节&#xff0c;只有31个字节是可用的。这31个可用的字节又按照一定的格式来组织&#xff0c;被分割为n个AD Structure。如下图所示&…

【libGDX】使用Mesh绘制矩形

1 前言 使用Mesh绘制三角形 中介绍了绘制三角形的方法&#xff0c;本文将介绍绘制正方形的方法。 libGDX 以点、线段、三角形为图元&#xff0c;没有提供绘制矩形内部的接口。要绘制矩形内部&#xff0c;必须通过三角形拼接而成&#xff0c;如下图&#xff0c;是通过GL_TRIANGL…

排序算法:归并排序、快速排序、堆排序

归并排序 要将一个数组排序&#xff0c;可以先将它分成两半分别排序&#xff0c;然后再将结果合并&#xff08;归并&#xff09;起来。这里的分成的两半&#xff0c;每部分可以使用其他排序算法&#xff0c;也可以仍然使用归并排序&#xff08;递归&#xff09;。 我看《算法》…

Windows、VMware问题集合

Windows、VMware问题集合 一. Windows11安装VMware17提升虚拟机性能1. 桌面右击图标点击属性——>兼容性&#xff0c;找到“以管理员身份运行此程序”勾选&#xff0c;最后点击确定即可。2. 关闭win11的内核隔离功能。 二. VMware虚拟机报错&#xff08;虚拟化性能计数器需要…

【华为网络-配置-021】- MSTP 多实例配置及安全保护等

要求&#xff1a; 1、vlan 10 从红色链路转发。 2、vlan 20 从黄色链路转发。 一、基础配置 [SW1]vlan batch 10 20 [SW1]interface GigabitEthernet 0/0/1 [SW1-GigabitEthernet0/0/1]port link-type trunk [SW1-GigabitEthernet0/0/1]port trunk allow-pass vlan all [SW…

Cent OS 8.2 安装 自定义硬盘 固定IP VMware

时间&#xff1a;20231122 环境&#xff1a;win11 、VMware 16 pro、Cent OS 8.2 说明&#xff1a;自定义安装方法、自定义硬盘分区、固定IP且能联网 1、使用自定义的方式安装虚拟机 此处选择典型&#xff0c;则会自动安装系统&#xff0c;无法自定义硬件以及配置信息 选择…

Java架构师软件架构开发

目录 1 基于架构的软件开发导论2 ABSD架构方法论3 ABSD方法论具体实现4 ABSD金融业案例5 基于特定领域的软件架构开发导论6 DSSA领域分析7 DSSA领域设计和实现8 DSSA国际电商平台架构案例9 架构思维方法论概述10 AT方法论和案例想学习架构师构建流程请跳转:Java架构师系统架构…

单链表——OJ题(一)

目录 ​一.前言 二.移除链表元素 三.返回链表中间节点 四.链表中倒数第K个节点 五.合并两个有序链表 六.反转链表 七.链表分割 八.链表的回文结构 九.相交链表 十.环形链表 十一.环形链表&#xff08;二&#xff09; ​六.结语 一.前言 本文主要对平时的链表OJ进行…

音频采集的相关基础知识

本文引注: https://zhuanlan.zhihu.com/p/652629744 1.麦克风的种类 (1)模拟麦克风 ECM麦克风&#xff1a;驻极体电容麦克风(ECM)&#xff0c;典型的汽车ECM麦克风是一种将ECM单元与小型放大器电路整合在单个外壳中的装置。放大器提供一个模拟信号&#xff0c;其电压电平允许…

Ps:背景橡皮擦工具抠图实例

背景橡皮擦工具 Background Eraser Tool由于是一个破坏性的工具&#xff08;直接删除像素&#xff09;而少被人使用。 其实&#xff0c;它不仅是一个功能强大的抠图工具&#xff0c;也是可以转换为非破坏性运用的。 原图&#xff08;注&#xff1a;图片来自网络&#xff09; 效…