静态资源与动态资源
静态资源访问简单理解WEB服务静态和动态资源请求过程 用户发起访问 服务器端接收到请求,该请求到达服务器的内核空间,因为tcp/ip协议工作在内核空间;到达内核空间后,发现访问的是80端口的套接字,通过路由和相关解码,请求被转到服务器的用户空间,也就是转到了web服务上; 请求到达用户空间后,发现请求的是一个文件,然后继续把请求转到内核空间,内核空间通过内核在磁盘上获取对应文件; 请求在内核空间获取到对应文件后,把文件返回至用户空间即web服务; 请求结果到达用户空间的web服务上后,把结果再通过套接字回到内核空间; 内核空间把结果通过网络tcp/ip协议栈返回至客户端。 动态资源请求简单理解WEB服务静态和动态资源请求过程 用户发起访问 服务器端接收到请求,该请求到达服务器的内核空间,因为tcp/ip协议工作在内核空间;到达内核空间后,发现访问的是80端口的套接字,通过路由和相关解码,请求被转到服务器的用户空间,也就是转到了web服务上; 请求到达用户空间后,发现请求的是一个动态页面,然后根据相关协议调用php解...
python海象语法
在我的工作当中,无意间接触到了一个别人写的一段代码,像这样:if (n := len(a)) > 10:,凭借我的直觉,我能够轻易的读懂这段代码,但是我却从来没见过,于是我搜了一下,才知道这是python3.8的新语法,叫做海象语法,因为冒号像眼睛,等号像牙齿,所以被成为海象语法。 海象语法官方给出了几个案例: 12345678910111213141516# 赋值表达式有助于避免调用 len() 两次if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")# 一次用于测试是否发生了匹配,另一次用于提取子组discount = 0.0if (mo := re.search(r'(\d+)% discount', advertisement)): discount = float(mo.group(1)) / 100.0# Loop over fixed length blockswhile...
ElasticSearch之python总结
对于ESES数据库本身作为一种分布式的、查询优势、拓展优势、容错优势…..等等众多优点的数据库。更多的特点还是自行百度吧 python操作安装: 1pip3 install elasticsearch 安装也就那样吧。 简单使用过热推荐,如果需要学习一个新的库的使用的时候,看源码与看官方文档是一个好习惯,因此本文仅列出少数操作,以使用入门讲解为主要核心。首先附上官方文档:https://elasticsearch-py.readthedocs.io/ 点击链接会直接跳转到最新版本的官方文档。 操作在使用python进行操作的时候,首先需要连接数据库,在启动数据库之后采用以下代码进行数据库连接: 1234from elasticsearch import Elasticsearch# 实例化一个ip为localhost,端口为9200,允许超时一小时的es对象client = Elasticsearch("http://IP:9200") # 替换成对应IP 但是其实还有更多可选参数,在VScode当中只需要按住ctrl后点击Elasticsearch就能...
特殊类型的声明
在类型声明的部分,提供的类型声明大多都是官方给定的类型,如:int,float,str,list,dict,set等等,但是某些时候当我们使用一些特殊的变量的时候,类型并不存在于官方给定的选项中。比如某些python的库创造的变量是具有自定义的类型的,这个时候该怎么操作呢?以下给出两个例子: 库当中的类型先看案例: 1234567891011121314151617html_doc = """<html><head><title>The Dormouse's story</title></head><body><p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their nam...
连接池
什么是连接池?在网上常常给出这样的解释:数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。 更通俗一点就是,连接池维护着项目于数据库之间的联系,保证项目不会过于频繁的去连接数据库导致数据库压力过大。 为什么要使用连接池?数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的性能低下。如果连接池存在,操作只需要把任务丢给连接池,至于对数据库操作的进程等一系列问题,全权交给连接池来进行操作,由连接池自己控制与数据库的访问与操作。在没有连接池的情况下,连接数据库通常需要以下步骤: TCP建立连接的三次握手 MySQL认证的三次握手 真正的SQL执行 MySQL的关闭 TCP的四次握手关闭 这样操作在代码上实现起来是很简单的,但是连接过程太耗时,连接过多容易出现内存泄漏,对于数据库访问大的项目来说这是十分致命的。 连接池的实现基于别人的工具实际上连接池的问题由来已久,因此...
(fastapi二)参数校验
现在有一个实际的问题,我们在完成某一个项目的时候,如果说用户非要从接口传递一些非法参数或者某些人想要搞破坏,传递恶意的参数。如果参数直接与数据库相关,恶意传入一些参数会直接影响到数据库的正常运行,所以我们该怎么处理这些非法参数呢?写个函数验证?但是接口那么多,无穷尽也。但是fastapi提供了一些优雅的解决方式! 额外的校验下面是一段代码: 12345678910from typing import Optionalfrom fastapi import FastAPI, Queryapp = FastAPI()@app.get("/router/")async def read_items(q: Optional[str] = None): pass 需求是限制参数q的长度 Query官方提供了一个库叫做Query,这个库可以非常简单的做校验,如下: 12345678910from typing import Optionalfrom fastapi import FastAPI, Queryapp = FastAPI()@app.get(&...
python类型注释
我找到一些来自于官方的关于python类型注释的资源,我将其复制下来,用于个人收藏。良好的类型注释习惯能让代码的可读性大大增强,同时也能够保证后续加入的人员能够快速理解与使用。 变量Python 3.6 在 PEP 526 中引入了用于注释变量的语法,我们在大多数示例中都使用它。 123456789101112# This is how you declare the type of a variable type in Python 3.6age: int = 1# You don't need to initialize a variable to annotate ita: int # Ok (no value at runtime until assigned)# The latter is useful in conditional brancheschild: boolif age < 18: child = Trueelse: child = False 内置类型123456789101112131415161718192021222...
mysql的四大特性
四大特性MySQL有四大特性,分别是:原子性、隔离性、永久性、一致性。 原子性原子性这个词是从字面意义上最不好理解的一个词。原子性的含义是:一个事务包含多个操作,这些操作要么全部执行,要么全都不执行。实现事务的原子性,要支持回滚操作,在某个操作失败后,回滚到事务执行之前的状态。 举个例子,在你使用移动支付的时候,你付钱出去的一瞬间,别人也需要收款到账,付钱与收钱必须是一致的,如果不一致那就说明有问题,某个操作在过程当中遗失了,而这一进一出的过程被视为一个单元操作,不可被分割。出错之后原子性必须具有回滚功能,即返回到操作之前的情况,如果不能做到就有可能引起重大事故。 一致性一致性分为五种一致性,分别用于解决不同的问题: 强一致性:读操作可以立即读到提交的更新操作。 弱一致性:提交的更新操作,不一定立即会被读操作读到,此种情况会存在一个不一致窗口,指的是读操作可以读到最新值的一段时间。 最终一致性:是弱一致性的特例。事务更新一份数据,最终一致性保证在没有其他事务更新同样的值的话,最终所有的事务都会读到之前事务更新的最新值。如果没有错误发生,不一致窗口的大小依赖于:通信延迟,...
git基础使用
什么是gitgit是一个分布式的版本控制软件。 分布式: 场景:解决开发进度丢失问题,某人进度丢失可以从其他开发者那里找回来 版本控制:能够控制开发进度并记录开发版本。 场景:软件升级版本,毕业论文修改版本,写书不停的修订版本。 软件:字面意思。 场景:window上的安装包,软件,无脑下一步的安装的软件。 分布式能够做什么? 分布式存储开发进度,防止仓库信息挂掉的问题 提高代码开发完整性 关于版本控制能够做什么? 良好的版本管理可以控制开发进度,掌握开发问题,统一处理问题 可以多人同时开发,共同完成一个项目或者问题,减少重复工作量 减少文件重复保存,浪费存储资源 对版本回滚,问题排查,开发者追究起到良好的控制作用 git是什么git是一个可以管理版本的软件,并且支持多人协同管理,能够有效的解决开发冲突、版本控制、文件存放等问题。并且由于其支持分布式,所以不用担心某一处版本丢失问题。并且开发能够独立与其他开发者的进度,可以实现独立版本控制与多人版本控制。git每一次进行版本控制都只会保留修改部分的内容,不会将内容全部保存,因此不会占用太大的空间资源,因此十...
(fastapi一)安装与简单使用
由于自己已经使用过很久的fastapi了,但是到现在为止依然不能够非常熟练,多数时候依然会自己造轮子,走不少弯路,因此打算开始对fastapi进行系列总结。 安装由于fastapi的启动需要uvicorn的配合,因此官方提供两种安装方式,第一种是全部安装,即: 1pip install fastapi[all] 第二种是分开安装即: 12pip install fastapipip install uvicorn[standard] 如果安装太慢的话,添加一个临时源吧,如下: 1pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspide 使用fastapi服务创建有两种方式,第一种是通过代码启动,第二种是在命令行启动,如果你需要调试代码,建议你使用第一种,当然,某些编辑器提供直接的调试启动方法,但是需要注意配置启动函数与启动对象。这里给出两种启动方式: 12345678910111213from fastapi import FastAPIimport uvicorn # 必须添加这个库app = Fast...





参数校验/封面.jpeg)



安装与简单使用/封面.jpg)




