计算机基础知识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次

今日思维导图:

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

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

相关文章

【11】Qt Designer

目录 VSCode添加外部工具 QtDesigner PyUIC PyRCC 加载UI文件模板代码 QMainWindow QWidget 常用知识点 1. 修改标题图标 2. 图片资源管理 3. 图片按钮 4. 加载对话框 5. 动态加载Widget 6. 修改主题 其他注意事项 事件被多次触发 PyQt5提供了一个可视化图形工…

02 CSS基础入门

文章目录 一、CSS介绍1. 简介2. 相关网站3. HTML引入方式 二、选择器1. 标签选择器2. 类选择器3. ID选择器4. 群组选择器 四、样式1. 字体样式2. 文本样式3. 边框样式4. 表格样式 五、模型和布局1. 盒子模型2. 网页布局 一、CSS介绍 1. 简介 CSS主要用于控制网页的外观&#…

联合基于信息论的安全和隐蔽通信的框架

这个标题很帅 abstractintroductionsystem modelPROPOSED JOINT OPTIMIZATION OF ITS AND COVERT TRANSMISSION RATE信息论安全 (ITS)隐蔽通信需要(CC)Joint Information-Theoretic Secrecy and Covert Communication in the Presence of an Untrusted User and Warden 202…

章鱼网络进展月报 | 2023.11.1-11.30

章鱼网络大事摘要 1、2023年12月,Octopus 2.0 将会正式启动。 2、隐私协议 Secret Network 宣布使用 Octopus Network 构建的 NEAR-IBC 连接 NEAR 生态。 3、Louis 受邀作为嘉宾,在 NEARCON2023 的多链网络主题沙龙中发言:我们依然处于区…

2022年第十一届数学建模国际赛小美赛C题人类活动分类解题全过程文档及程序

2022年第十一届数学建模国际赛小美赛 C题 人类活动分类 原题再现: 人类行为理解的一个重要方面是对日常活动的识别和监控。可穿戴式活动识别系统可以改善许多关键领域的生活质量,如动态监测、家庭康复和跌倒检测。基于惯性传感器的活动识别系统用于通过…

2.postman环境变量及接口关联

一、环境变量以及全局变量 操作流程 1.点击environment 2.点击environment右侧号,新增环境变量 3.在变量中输入变量名以及变量值 4.回到collection页面,修改变量环境 5.在collection中通过{{变量名}}调用变量 变量定义 环境变量:环境变量…

音视频之旅 - 基础知识

图像基础知识 像素 像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。在下面这张图中,你可以看到一个个方块,这些方块就是像素 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸。…

Linux系统---简易伙伴系统

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、题目要求 1.采用C语言实现 2.伙伴系统采用free_area[11]数组来组织。要求伙伴内存最小为一个页面,页面大小为4KB…

利用阿里云 DDoS、WAF、CDN 和云防火墙为在线业务赋能

在这篇博客中,我们将详细讨论使用阿里云 CDN 和安全产品保护您的在线业务所需的步骤。 方案描述 创新技术的快速发展为世界各地的在线业务带来了新的机遇。今天的人们不仅习惯了,而且依靠互联网来开展他们的日常生活,包括购物、玩游戏、看电…

排序:归并排序

目录 归并排序——有递归的: 基本思想: 思路分析: 代码分析: 划分区间思路: 代码思路分析: 归并排序——有递归的: 基本思想: 归并排序(MERGE-SORT&#xff…

单点登录方案调研与实现

作用 在一个系统登录后,其他系统也能共享该登录状态,无需重新登录。 演进 cookie → session → token →单点登录 Cookie 可以实现浏览器和服务器状态的记录,但Cookie会出现存储体积过大和可以在前后端修改的问题 Session 为了解决Co…

企业微信配置可信域名

首先去申请一个域名,然后将域名绑定到有公网ip的云服务器上,绑定到具体的网站;然后再企业微信,管理后台,点击具体的应用,进【网页授权及JS-SDK】;点击底部的【申请校验域名】点击下载文件&#…

数据可视化|jupyter notebook运行pyecharts,无法正常显示“可视化图形”,怎么解决?

前言 本文是该专栏的第39篇,后面会持续分享python数据分析的干货知识,记得关注。 相信有些同学在本地使用jupyter notebook运行pyecharts的时候,在代码没有任何异常的情况下,无论是html还是notebook区域,都无法显示“可视化图形”,界面区域只有空白一片。遇到这种情况,…

UniGui使用CSSUniTreeMenu滚动条

有些人反应UniTreeMenu当菜单项目比较多的时候会超出但是没有出滚动条,只需要添加如下CSS 老规矩,unitreemeu的layout的componentcls里添加bbtreemenu,然后在css里添加 .bbtreemenu .x-box-item{ overflow-y: auto; } 然后当内容超出后就会…

TypeScript中的单件设计模式

基本概念 (1) 了解设计模式 设计模式通俗的讲,就是一种更好的编写代码方案,打个比喻:从上海到武汉,你可以选择做飞机,做轮船,开车,骑摩托车多种方式,把出行…

ubuntu安装docker及docker常用命令

docker里有三个部分 daemon 镜像 和 容器 我们需要了解的概念 容器 镜像 数据卷 文章目录 docker命令docker镜像相关命令docker容器相关命令数据卷ubuntu安装docker docker命令 #启动,停止,重启docker systemctl start docker systemctl stop docker s…

pytorch:YOLOV1的pytorch实现

pytorch:YOLOV1的pytorch实现 注:本篇仅为学习记录、学习笔记,请谨慎参考,如果有错误请评论指出。 参考: 动手学习深度学习pytorch版——从零开始实现YOLOv1 目标检测模型YOLO-V1损失函数详解 3.1 YOLO系列理论合集(Y…

Notes数据直接在Excel中统计

大家好,才是真的好。 我希望你看过前面两篇内容《Domino REST API安装和运行》和《Domino REST API安装和运行》,因为今天我们正是使用REST API方式在Excel中查询和统计Notes数据。 不过首先你得知道一个OData协议,全名Open Data Protocol(…

配置OSS后如何将服务器已有文件上传至OSS,推荐使用ossutil使用

1.下载安装ossutil sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash2.交互式配置生成配置文件 ossutil config 根据提示分别设置配置文件路径、设置工具的语言、Endpoint、AccessKey ID、AccessKey Secret和STSToken参数,STSToken留…

Android 分享小结

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、微信 分享 三、 QQ 、QQ空间(Qz…