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

计算机基础知识65

cookie和session的使用

# 概念:cookie客户端浏览器上的键值对

# 目的:为了做会话保持
# 来源:服务端写入的,服务端再返回的响应头中写入,浏览器会自动取出来

                存起来是以key value 形式,有过期时间、path、http only等等


# 使用:只要浏览器中有cookie,再次向当前域发送请求,都会自动携带在请求头中
        cookie:"name=lqz;age=19"
# 不安全问题---》cookie中发了敏感数据---》客户能看到

obj.set_cookie()   # cookie设置
request.COOKIES.get()   # cookie取值  
request.COOKIES.clear()    # 清空        

# 我们需要让cookie变的安全---》敏感数据不在cookie中方法,而放在session中
    -session服务端的键值对
    -session跟cookie有什么关系呢?把key,以cookie的形式,存到浏览器中
        {111:{name:lqz,age:19,password:123},222:{name:zs,age:19,password:666}}
        sessionid:111
# 当前浏览器以后再发请就会携带过来
    -我们根据带过来的cookie 111----》 从 session中取出对应的数据
# session的使用: 

        必须要先迁移表, session存在服务端的, 默认情况下存在, django-session表中
配置文件:

SESSION_ENGINE = 'django.contrib.sessions.backends.db'
# django项目有两套配置文件:内置一套,项目自己一套

# django-session表的字段:
        session_key:      sessionid:随机字符串
        session_data:  真正的数据(加密了)
        expire_date:     过期时间

request.session.get()  # 取值
request.session['name']='lqz'   # 赋值

# session的本质执行原理:
1 咱么写了request.session['name']='lqz',本质就是向session 对象中放入了name=lqz
2 当前视图函数结束---->经过 【中间件】------>返回给了前端
       django 内置了一个session中间件
       判断:request.session 有没有变化,如果有变化
# 情况一:django-session表中没有数据
在表中创建出一条数据,随机生成一个字符串[随机字符串session_key],把数据存入django-session表
           session_key:adsfasd
           session_data: name=lqz  加密后存到里面
            sessionid:adsfasd   把随机字符串写入到cookie中
# 情况二:django-session表中有数据
把session中所有的值加密后, 更新到django-session表的session_data中,其他不变       
3 下次 再发请求进入任意视图函数---》又会经过【中间件】---》视图函数
        视图函数中取session:request.session.get('age')
        浏览器发请求(携带cookie过来)---》到了中间件---》根据sessionid取出随机字符串
        拿着随机字符串去django-session中查【session_key】---》 能查到就把 session_data的数据解密---》放到request.session中

        无则添加,有则更新,请求来,取出随机字符串对比,正确则解密
        后续视图函数中,才能取出值

session的中间件把上述内容完成了:

procee_request   process_response
django.contrib.sessions.middleware.SessionMiddleware

# 配置session 存放路径(未完成,需要你完成)

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
SESSION_FILE_PATH='c://xxx/x'
SESSION_COOKIE_NAME = 'xxx'
from django.conf import settings
from django.contrib.sessions.backends import 

中间件

# 概念:中间件是介于request与response处理之间的一道处理过程,能在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能
# 作用:
    1 全局的请求拦截---》如果它没有登录---》就不允许访问
    2 拦截所有请求,获取请求的ip地址
    3 记录所有用户的访问日志
    4 统一在响应头中加数据    
# 代码上:就是一个类,类中有几个方法

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware',# session相关的中间件'django.contrib.sessions.middleware.SessionMiddleware',# 公共中间件---》访问不带 / 路径,如果有 带 / 的路径,他会让你重定向到这个地址'django.middleware.common.CommonMiddleware',# csrf认证    xss  cors'django.middleware.csrf.CsrfViewMiddleware',# 认证:request.user--->这个中间件做的'django.contrib.auth.middleware.AuthenticationMiddleware',# django的消息框架---》flask--》闪现'django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 自定义中间件来使用,记录用户的请求地址和user-agent

class SaveRemoteAddr(MiddlewareMixin):def process_request(self, request):# request 是WSGIRequest 的对象# print(request.session) # 一定要保证,session的中间件要在上面# 这个request 就是当次请求的request# 取出ipip = request.META.get('REMOTE_ADDR')user_agent = request.META.get('HTTP_USER_AGENT')print(ip)print(user_agent)# return HttpResponse('不让你看了') # 不会再走视图函数了

#  能返回的情况:
         1 None,表示执行完这个代码,经过中间件,继续执行,最后进视图函数
         2 四件套,后续不走了,中间件的process_response---》直接返回给浏览器了
# 中间件,在响应头加入访问时间:

import datetime
class AddHeaderMiddleWare(MiddlewareMixin):def process_response(self, request, response):# request中有没有session? 有# request 如果在视图函数中,往request中放了值,在这里,就可以取出来 request.xxx# print(request.xxx)# 所有cookie中都带# response.set_cookie('xxxxx', 'asdfds')# 写入到响应头,访问服务端的时间response['ttt'] = datetime.datetime.now()return response  # 一定要返回response对象

csrf认证相关

# 概念:csrf是跨站请求伪造
# 攻击原理:
    -在同一个浏览器中,如果登录了A网站,没有退出,在B网站中,向A网站发送请求,浏览器会自动携带A网站的cookie,对于A网站后端来讲, 它就分辨不清到底是用户真实发的请求,还是黑客网站发的请求【都会携带用户真实的cookie】
# 如何防范:
   django解决了这个问题,只要发送post请求,必须携带一个csrf_token 随机字符串(后端给的)
# 这个随机字符串可以带的位置:
        1 请求体中(urlencoded,form-data):{csrfmiddlewaretoken:asdfasdf}
        2 放在请求头中:'X-CSRFToken':asdfasdfasd
        3 ajax提交数据:默认是urlencoded,放在请求体中没有任何问题

         $.ajax({method: 'post',data: {username, password, csrfmiddlewaretoken},success: function (res) {console.log(res)}})

          4 ajax提交,使用json格式---》就不能放在请求体中,只能放在请求头中:

 $.ajax({method: 'post',headers:{'X-CSRFToken':csrfmiddlewaretoken},contentType: 'application/json',data: JSON.stringify({username, password}),success: function (res) {console.log(res)}})

# post 提交的数据,都是从request.POST中取,前提是:必须是urlencoded和form-data格式
# 如果使用ajax发送请求: 
                    redirect  render就用不了了
                    尽量使用JsonResponse

Auth的使用

# 概念:Auth就是django 的一个app,做用户管理
# 作用:Auth模块是Django自带的用户认证模块
        我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统–auth,它默认使用 auth_user 表来存储用户数据

# 默认的用户表示auth_user创建一个用户:可以用代码,可以用命令
# 模块常用方法:
authenticate():一般需要username 、password两个关键字参数

        提供了用户认证功能,即验证用户名以及密码是否正确,如果认证成功(用户名和密码正确有效),便会返回一个 User 对象, authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

user = authenticate(username='usernamer',password='password')

login(HttpRequest, user):

        登录认证通过,调用一下这个方法,以后从request.user中才能取出当前登录用户

logout(request): 退出,一定要调用

is_authenticated():

        判断当前用户是否登录--不能使用request.user 是否有值来判断,因为他一直有值

request.user.is_authenticated()

orm的链接方式

django的orm的 __ 链表,使用什么链接方式?

        在Django ORM中,双下划线连接语法本身并不直接对应特定的SQL连接类型。当使用双下划线时,Django ORM会根据模型之间的关系和查询的具体情况自动选择适当的SQL连接方式,包括INNER JOIN、LEFT OUTER JOIN等。
        在实际使用中,我们通常涉及到 INNER JOIN(内连接)和 LEFT OUTER JOIN(左连接),因为这两者是最常见的连接方式。INNER JOIN 用于匹配两个表中符合条件的行,而 LEFT OUTER JOIN会返回左表中的所有行,以及右表中与左表匹配的行。

中间件+logru案例

记录用户访问所用接口用的时间---》记录到日志中---》logru---》打印出来即可

        - ip  user-agent  total_time

pip install loguru  # 安装loguru模块
middle_key.py
from django.utils.deprecation import MiddlewareMixin
from app01 import models
from loguru import logger
import datetimeclass MyMiddlew(MiddlewareMixin):def process_request(self, request):addr = request.META.get('REMOTE_ADDR')llq = request.META.get('HTTP_USER_AGENT')request.time = datetime.datetime.now()models.ShuJu.objects.create(ShuJu_REMOTE_ADDR=addr, user_agent=llq)logger.add('runtime_{time}.log', retention=10)   # 文件名,创十个logger.info('进入时间为:{}', request.time)def process_response(self, request, response):to_time = datetime.datetime.now()time = to_time - request.timeprint(time)logger.warning('结束时间{}', time)return response

auth模块案例

如果用户登录了,打印用户的用户名
log.info('')

# 迁移auth表格
python manage.py createsuperuser
from django.contrib import auth
from loguru import logger
def demo01(request):if request.method == 'GET':return render(request, 'caojiyh.html')else:username = request.POST.get('username')password = request.POST.get('password')print(password)user = auth.authenticate(request, username=username, password=password)print(user)if user:auth.login(request, user)user=request.userlogger.info('用户名是{}', user)print(request.user)return redirect('/home/')else:return render(request, 'caojiyh.html', {'error': '用户名或密码错误'})

IP访问频率限制案例

基础版:总共能访问5次(数据库,session)

高级版:做IP访问频率限制,一分钟只能访问5次

今日思维导图:

相关文章:

计算机基础知识65

cookie和session的使用 # 概念:cookie 是客户端浏览器上的键值对 # 目的:为了做会话保持 # 来源:服务端写入的,服务端再返回的响应头中写入,浏览器会自动取出来 存起来是以key value 形式,有过期时间、path…...

Python开发运维:Python垃圾回收机制

目录 一、理论 1.Python垃圾回收机制 一、理论 1.Python垃圾回收机制 (1)引⽤计数器 1)环状双向链表 refchain 在python程序中创建的任何对象都会放在refchain链表中。 name "david" age 20 hobby ["篮球",游泳…...

ros2/ros安装ros-dep||rosdep init错误

第一个错误的做法: sudo apt-get install python3-pip sudo pip3 install 6-rosdep sudo 6-rosdep 如果使用上述代码将会摧毁整个系统,不重装系统反正我是搞不定啊,因为我不知道那个写软件的人到底做了什么。因为这个我安装的版本是humble&…...

《深入理解计算机系统》学习笔记 - 第四课 - 机器级别的程序

Lecture 05 Machine Level Programming I Basics 机器级别的程序 文章目录 Lecture 05 Machine Level Programming I Basics 机器级别的程序intel 处理器的历史和体系结构芯片的构成AMD 公司(Advanced Micro Devices,先进的微型设备) C, 汇编, 机器代码定义汇编/机器…...

云原生(Cloud Native)——概念,技术,背景,优缺点,实践例子

云原生(Cloud Native)是一种构建和运行应用程序的方法,这些应用程序充分利用云计算的优势。云原生应用程序通常设计为在现代、动态的环境中运行,如公共云、私有云和混合云。这种方法强调微服务架构、容器化、自动化、易于管理和可…...

ElasticSearch之线程池

ElasticSearch节点可用的CPU核的数量,通常可以交给ElasticSearch来自行检测和判定,另外可以在elasticsearch.yml中显式指定。样例如下: node.processors: 2如下表格中的processors即CPU核的数量。 线程池的列表 线程池名称类型线程数量队列…...

StoneDB-8.0-V2.2.0 企业版正式发布!性能优化,稳定性提升,持续公测中!

​ 11月,StoneDB 新版本如期而至,这一个月来我们的研发同学加班加点,持续迭代:在 2.2.0 版本中,我们针对用户提出的需求和做出了重量级更新,修复了一些已知和用户反馈的 Bug,同时对部分代码进行…...

【数据结构 — 排序 — 插入排序】

数据结构 — 排序 — 插入排序 一.排序1.1.排序的概念及其运用1.1.1排序的概念1.1.2排序运用1.1.3 常见的排序算法 二.插入排序2.1.直接插入排序2.1.1.算法讲解2.1.2.代码实现2.1.2.1.函数定义2.1.2.2.算法接口实现2.1.2.3.测试代码实现2.1.2.4.测试展示 2.2.希尔排序2.2.1.算法…...

物联网后端个人第十四周总结

物联网方面进度 1.登陆超时是因为后端运行的端口和前端监听的接口不一样,所以后端也没有报错,将二者修改一致即可 2.登录之后会进行平台的初始化,但是初始化的时候会卡住,此时只需要将路径的IP端口后边的内容去掉即可 3.阅读并完成了jetlinks…...

在uniapp中,可以使用那些预定义的样式类

u-flex:设置元素为弹性布局。u-flex-v:设置元素为纵向弹性布局。u-flex-h:设置元素为横向弹性布局。u-p-10:设置元素的上下左右边距为10rpx。u-p-t-10:设置元素的上边距为10rpx。u-p-b-10:设置元素的下边距…...

mybatis的数据库连接池

直接看原文 原文链接:【MyBatis】 连接池技术_mybatis自带连接池-CSDN博客 本文先不说springBoot整合mybatis后的 本文讲的是没有被springBoot整合前的mybatis自己的默认的连接池 --------------------------------------------------------------------------------------…...

Vue 的 el-select 下拉选项中,只有当文字超出时才显示提示框,未超出的则不显示

Vue 的 el-select 下拉选项中&#xff0c;只有当文字超出时才显示提示框&#xff0c;未超出的则不显示 <template><div><el-select v-model"selected" placeholder"请选择"><el-optionv-for"item in options":key"it…...

【Python】pptx文件转pdf

要将PPTX文件转换为PDF格式&#xff0c;你可以使用Python的python-pptx库来读取PPTX文件&#xff0c;然后使用comtypes库在Windows上或unoconv在Linux上来进行转换。但是&#xff0c;需要注意的是&#xff0c;comtypes依赖于Microsoft Office&#xff0c;而unoconv依赖于LibreO…...

response应用及重定向和request转发

请求和转发&#xff1a; response说明一、response文件下载二、response验证码实现1.前置知识&#xff1a;2.具体实现&#xff1a;3.知识总结 三、response重定向四、request转发五、重定向和转发的区别 response说明 response是指HttpServletResponse,该响应有很多的应用&…...

CentOS常用基础命令大全(linux命令)2

CentOS常用基础命令大全&#xff08;linux命令&#xff09; 1.关机 (系统的关机、重启以及登出 ) 的命令 shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shutdown -h hours:minutes & 按预定时间关闭系统 shutdown -c 取消按预定时间关闭系统 sh…...

分析阿里巴巴的微服务依赖图和性能

论文对阿里巴巴集群中部署的大规模微服务进行了全面的研究。他们分析了 7 天内 20,000 多个微服务的行为&#xff0c;并根据收集的 100 亿条调用跟踪来分析它们的特征。该论文获得SOCC 2021最佳论文奖。 他们发现&#xff1a; 微服务图在运行时是动态的 大多数图形像树一样分…...

Linux——基本指令(一)

写在前面&#xff1a; 我们云服务器搭建的Linux系统&#xff0c;使用的镜像版本CentOS 7.6,使用的Xshell远程连接云服务器 前面我们使用超级管理员root账号登录&#xff0c;一般我们使用普通用户登录&#xff0c;那么如何创建新用户呢&#xff1f; 1.创建新用户 &#xff08…...

虚幻学习笔记10—C++函数与蓝图的通信

一、前言 除了上一章C变量与蓝图通信讲的变量能与蓝图通信外&#xff0c;还有函数和枚举也可以和蓝图通信。函数的关键字为”UFUNCTION“、枚举的关键字为”UENUM“。 二、实现 2.1、BlueprintCallable蓝图中调用 该函数时带执行的&#xff0c;带入如下。编译成功后在蓝图中输…...

无重复字符的最长子串(LeetCode 3)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一&#xff1a;暴力法方法二&#xff1a;滑动窗口 参考文献 1.问题描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长子串的长度。 s 由英文字母、数字、符号和空格组成。 示例 1&#xff1a; 输…...

交付《啤酒游戏经营决策沙盘》的项目

感谢首富客户连续两年的邀请&#xff0c;交付《啤酒游戏经营决策沙盘》的项目&#xff0c;下周一JSTO首席学习官Luna想让我分享下系统思考与投资理财&#xff0c;想到曾经看过的一本书《深度思维》&#xff0c;看到一些结构来预判未来。不仅仅可以应用在企业经营和组织发展上&a…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...