当前位置: 首页 > news >正文

第62天:django学习(十一)

cookie和session

发展史

        一开始,只有一个页面,没有登录功能,大家看到东西都一样。

        时代发展,出现了需要登录注册的网站,要有一门技术存储我们的登录信息,于是cookie诞生了。

        cookie:

- 存储形式:k:v键值对

- 存储位置:客户端

- 不安全,信息可能会泄露

        时代再度发展,需要有一门新的安全的技术,于是有了session。

        session:

- 标识符,来表示我是当前用户加密出来的数据

- 对敏感信息进行加密处理

        - 存储服务端    

        - 标识符配合上你的加密串

- 把我的标识符+ 字符串全给客户端

        - 客户端存储格式    

        - session_id:返回回来的表示符+加密串

django操作cookies

        设置cookie
def login(request, *args, **kwargs):if request.method == 'POST':username = request.POST.get("username")password = request.POST.get("password")if username == "kevin" and password == "123":obj = HttpResponse("ok")obj.set_cookie('sign', 'user')return objelse:return redirect('/login/')return render(request, 'login.html')
        取值cookie验证
def home(request, *args, **kwargs):sign = request.COOKIES.get('sign')if sign and sign == 'user':return HttpResponse("这是home页面")else:return redirect('/login/')
        设置过期时间
obj.set_cookie('sign', 'user', expires=3)
obj.set_cookie('sign', 'user', max_age=3)
        删除cookie
def logout(request, *args, **kwargs):obj = redirect('/home/')# 设置超时时间 5s 到期obj.delete_cookie('sign')return obj

django操作session

        设置session
request.session['sign'] = 'user'
        取值session
def login(request, *args, **kwargs):# next_url = request.get_full_path()# print(next_url) # /login/?next_url=/home/if request.method == 'POST':username = request.POST.get("username")password = request.POST.get("password")if username == "dream" and password == "521":# next_url = request.GET.get('next_url')# print(next_url) # /home/request.session['sign'] = 'user'obj = redirect('/home/')# 设置过期时间# obj.set_cookie('sign', 'user', expires=3)# obj.set_cookie('sign', 'user', max_age=3)return objelse:return redirect('/login/')return render(request, 'login.html')
​
​
def login_auth(func):def inner(request, *args, **kwargs):# print(request.path_info) #  /home/# print(request.get_full_path()) # /home/?username=111next_url = request.get_full_path()  # /home/# print(next_url)# /home/sign = request.session.get('sign')# print(sign) # userif sign and sign == 'user':res = func(request, *args, **kwargs)return reselse:return redirect(f'/login/?next_url={next_url}')
​return inner
​
​
@login_auth
def home(request, *args, **kwargs):return HttpResponse("这是home页面")

        注:

- session基于数据库表才能使用的  - 必须先迁移数据库,生成 django_session 表

- session只对当次登录有效  

- 主动清除浏览器中本地存在的session  

- 验签发现,没有sessionid就会自动生成新的session

- `django_sessoin`表中的数据条数取决于浏览器

- 同一个计算机(IP地址)上同一个浏览器只会有一条数据生效

- 同一个计算机(IP地址)上多个浏览器会有多个数据生效

- 当session过期的时候,可能会出现多条数据对应一个浏览器

- 但是这些数据不会持久化存储,会被定时清理掉,可以手动清除也可以代码清除

- 目的是为了节省服务器数据库资源

        设置session过期时间
request.session['sign'] = 'user'
request.session.set_expiry(0)
        删除cookie
# 删除session
request.session.delete()
# 把浏览器和数据库里面的session全部清除掉
request.session.flush()

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页面")
​def post(self):...

相关文章:

第62天:django学习(十一)

cookie和session 发展史 一开始,只有一个页面,没有登录功能,大家看到东西都一样。 时代发展,出现了需要登录注册的网站,要有一门技术存储我们的登录信息,于是cookie诞生了。 cookie: - 存储形式:k:v键值对…...

Rust测试字符串的移动,Move

代码创建了一个结构体,结构体有test1 字符串,还有指向字符串的指针。一共创建了两个。 然后我们使用swap 函数 交换两个结构体内存的内容。 最后如上图。相同的地址,变成了另外结构体的内容。注意看指针部分,还是指向原来的地址…...

vue+electron问题汇总

1. Vue_Bug Failed to fetch extension, trying 4 more times 描述:项目启动时报错 解决:注释图片中内容 2. Module not found: Error: Can’t resolve ‘fs’ in 描述:项目启动报错 解决:vue.config.js中添加图中数据 3.导入…...

Linux中的网络时间服务器

本章主要介绍网络时间的服务器 使用chrony配置时间服务器配置chrony客户端服务器同步时间 1.1 时间同步的重要性 一些服务对时间要求非常严格,例如如图所示的由三台服务器搭建的ceph集群 这三台服务器的时间必须保持一致,如果不一致,就会显…...

fastadmin打印页面

如下图选中订单号进行打印 html中增加代码 <div id"toolbar" class"toolbar"><a href"javascript:;" class"btn btn-primary btn-refresh" title"{:__(Refresh)}" ><i class"fa fa-refresh">&l…...

Java 将word转为PDF的三种方式和处理在服务器上下载后乱码的格式

我这边是因为业务需要将之前导出的word文档转换为PDF文件&#xff0c;然后页面预览下载这样的情况。之前导出word文档又不是我做的&#xff0c;所以为了不影响业务&#xff0c;只是将最后在输出流时转换成了PDF&#xff0c;当时本地调用没什么问题&#xff0c;一切正常&#xf…...

C\C++ 获取最值

C C 语言的不同类型的最值可以在 limits.h 头文件里找到定义 #include <limits.h>int main() {printf("%d", INT_MAX); // 整数最大值printf("%d", INT_MIN); // 整数最小值 } C C 有模板&#xff0c;可以通过替换下面的 int 和 double&#xff…...

机器学习之无监督学习:九大聚类算法

今天&#xff0c;和大家分享一下机器学习之无监督学习中的常见的聚类方法。 今天&#xff0c;和大家分享一下机器学习之无监督学习中的常见的聚类方法。 在无监督学习中&#xff0c;我们的数据并不带有任何标签&#xff0c;因此在无监督学习中要做的就是将这一系列无标签的数…...

Linux高级管理-搭建网站服务

在Ihternet 网络环境中&#xff0c;Web 服务无疑是最为流行的应用系统。有了Web站点&#xff0c;企业可以充分 展示自己的产品&#xff0c;宣传企业形象。Web站点还为企业提供了与客户交流、电子商务交易平台等丰富 的网络应用。部署与维护Web 服务是运维工程师必须掌握的一个技…...

Windows 系统,TortoiseSVN 无法修改 Log 信息解决方法

使用SVN提交版本信息时&#xff0c;注释内容写的不全。通过右键TortoiseSVN的Show log看到提交的的注释&#xff0c;右键看到Edit log message的选项&#xff0c;然而提交后却给出错误提示&#xff1a; Repository has not been enabled to accept revision propchanges; ask …...

编译 Android gradle-4.6-all.zip 报错问题记录

编译 Android gradle-4.6-all.zip 报错问题记录 方法一&#xff1a;替换资源&#xff1a;方法二&#xff1a;修改源方法三&#xff1a;修改版本 编译时候无法下载 gradle-4.6-all Downloading https://services.gradle.org/distributions/gradle-4.6-all.zip 方法一&#xf…...

Linux系统调试课:Valgrind 内存调试

文章目录 一、为什么要学会Valgrind二、什么是内存泄露三、Valgrind的移植四、Valgrind相关参数沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Valgrind 是一个开源的内存调试和性能分析工具,用于帮助开发者找出程序中的内存错误,如内存泄漏、使用未初始化的内存、非…...

python主流开发工具排名,python开发工具有哪些

本篇文章给大家谈谈python的开发工具软件有哪些&#xff0c;以及python主流开发工具排名&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 python中用到哪些软件 一、Python代码编辑器1、sublime Textsublime Text是一款非常流行的代码编辑器&#xff0c;支持P…...

Spring Boot Async:从入门到精通,原理详解与最佳实践

Spring Boot 的异步功能&#xff08;Async&#xff09;允许我们将某些任务异步执行&#xff0c;而不会阻塞主线程。这对于处理耗时的操作非常有用&#xff0c;如发送电子邮件、生成报表、调用外部 API 等。通过异步处理&#xff0c;我们可以释放主线程&#xff0c;让它继续处理…...

oracle 19c创建db_link名称带.com域名问题处理

文章目录 一、修改PDB的global_name二、重启数据库实例三、修改domain后重试 一、修改PDB的global_name SYSorcl1>sho pdbsCON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ----------2 PDB$SEED …...

银行卡二要素API的应用案例:从在线购物到金融投资

引言 随着互联网技术的不断发展&#xff0c;人们的金融需求也在不断增加。随之而来的是各种新型金融服务的涌现&#xff0c;让用户的金融体验更加便利快捷。其中&#xff0c;银行卡二要素API的应用&#xff0c;则为用户的金融体验和安全性提供了极大的保障。 银行卡二要素API…...

MySQL 忘记root密码后重置密码操作

在忘记 MySQL 密码的情况下&#xff0c;可以通过 --skip-grant-tables 关闭服务器的认证&#xff0c;然后重置 root 的密码&#xff0c;具体操作步骤如下。 步骤 1)&#xff1a;关闭正在运行的 MySQL 服务。打开 cmd 进入 MySQL 的 bin 目录。 步骤 2)&#xff1a;输入mysqld -…...

开源电子合同签署平台小程序源码/电子文件签字+在线合同签署系统源码/电子合同小程序源码

源码简介&#xff1a; 开源电子合同签署平台小程序源码&#xff0c;它是电子文件签字在线合同签署系统源码/电子合同小程序源码 目前商业端和开源端一致&#xff0c;免费开源状态&#xff01; 聚合市场上各类电子合同解决方案商&#xff0c;你无需一个一个的对接电子合同厂商…...

J.408之数据结构

J-408之数据结构_北京信息科技大学第十五届程序设计竞赛&#xff08;同步赛&#xff09; (nowcoder.com) 思维好题&#xff0c;直接用两个set存没出现的数字就好了 // Problem: 408之数据结构 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/68572/J // Me…...

前端食堂技术周刊第 107 期:技术播客节、Deno Cron、FEDAY、XState v5、Electron 2023 生态系统回顾

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;烤椰拿铁 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…...

Mathtype公式识别:Magma多模态AI在教育领域的应用

Mathtype公式识别&#xff1a;Magma多模态AI在教育领域的应用 1. 引言 作为一名长期关注AI技术发展的从业者&#xff0c;我最近在测试微软开源的Magma多模态模型时&#xff0c;发现了一个特别有意思的应用场景——数学公式识别与处理。想象一下这样的场景&#xff1a;老师批改…...

Scream:构建网络音频共享的虚拟声卡解决方案

Scream&#xff1a;构建网络音频共享的虚拟声卡解决方案 【免费下载链接】scream Virtual network sound card for Microsoft Windows 项目地址: https://gitcode.com/gh_mirrors/sc/scream 一、核心价值&#xff1a;突破物理限制的音频传输革命 在数字化办公与家庭娱乐…...

4步完成Axure本地化设置:让新手轻松上手的中文界面方案

4步完成Axure本地化设置&#xff1a;让新手轻松上手的中文界面方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …...

近场声全息(NAH)数据与MATLAB实现

一、近场声全息核心原理 近场声全息&#xff08;NAH&#xff09;通过测量声源近场区域的声压分布&#xff08;包含传播波和倏逝波成分&#xff09;&#xff0c;利用空间傅里叶变换重建声场分布。其核心公式基于Helmholtz-Kirchhoff积分方程&#xff1a;其中&#xff1a; p0(kx,…...

【昇腾实战】MindIE框架下DeepSeek-R1模型部署与性能调优指南

1. 昇腾环境准备与驱动安装 拿到昇腾服务器后&#xff0c;第一件事就是搭建基础运行环境。我遇到过不少开发者卡在驱动安装环节&#xff0c;其实只要注意几个关键点就能避坑。首先到华为昇腾官网下载对应版本的驱动和固件包&#xff0c;这里有个细节&#xff1a;一定要核对服务…...

深入解析 vSphere 7 vMotion 迁移实战:从单中心到跨中心的无缝迁移策略

1. vMotion迁移的核心价值与场景定位 当你凌晨三点接到机房断电预警电话时&#xff0c;vMotion可能是你最想拥抱的技术。作为vSphere的"灵魂功能"之一&#xff0c;vMotion允许我们将运行中的虚拟机在不同主机间无缝迁移&#xff0c;就像给飞行中的飞机更换引擎——用…...

4个步骤实现跨设备数据同步:开源工具Kazumi的WebDAV集成方案

4个步骤实现跨设备数据同步&#xff1a;开源工具Kazumi的WebDAV集成方案 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP&#xff0c;支持流媒体在线观看&#xff0c;支持弹幕&#xff0c;支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi …...

手把手教你用RK3576开发板驱动RC522读卡器:一个SPI实战项目的完整配置流程

手把手教你用RK3576开发板驱动RC522读卡器&#xff1a;一个SPI实战项目的完整配置流程 在嵌入式开发领域&#xff0c;能够独立完成一个从硬件连接到软件驱动的完整项目&#xff0c;是每个开发者成长的必经之路。RK3576作为一款性能强劲的开发板&#xff0c;搭配常见的RC522读卡…...

成电计算机复试面试:如何用一份‘心机’简历引导老师提问,并提前准备好答案?

计算机复试策略&#xff1a;如何用结构化简历设计引导面试走向 站在电子科技大学计算机复试的考场外&#xff0c;大多数考生都在反复背诵技术概念和项目细节&#xff0c;却很少有人意识到——面试本质上是一场精心设计的对话博弈。那些最终获得高分的考生&#xff0c;往往不是知…...

安卓应用按钮样式问题及解决方案

在开发安卓应用的过程中,我们常常会遇到一些看似简单但实际上隐藏着复杂问题的样式问题。今天我们来探讨一个在更换设备后按钮样式发生变化的问题。 问题描述 一位开发者在Android Studio中开发了一个食谱应用。当他从一台手机切换到另一台手机运行应用时,发现所有的按钮都…...