FastAPI框架中全局配置加载以及对接口文档页面的显示开关处理
对一个基于FastAPI框架的服务端项目,开发的时候想对其做一些优化、功能提升。准备将很多的项目业务逻辑控制交给系统后台的界面配置,因此需要在项目运行的时候加载全局配置项,同时在项目配置修改后能迅速地生效。可将配置加载的代码逻辑放在register_middleware(中间件处理的过程中),位置如下: #中间件处理 defregister_middleware(app:FastAPI): @app.middleware("http") #在如下方法之前进行全局配置加载 response=awaitcall_next(request) .... 此...[>>…]
FastApi框架怎么给BaseModel数据模型添加自定义属性
在使用FastApi框架开发时,如果需要使用BaseModel数据模型定义一个分页数据,需要用户传入的参数是page,page_size。但我们在处理时是需要将其转化成sql中的start,为了避免每次都需要自己去再进行计算,可以使用property来将一些方法设置成属性。如下在data_list方法中就可以直接使用pageinfo.start来取得所要的值。 #分页的数据模型 classPageInfo(BaseModel): page:int=Body(1,ge=1) page_size:int=Body(10,ge=5,le=100) @property defstart(self): returnself.page_size*(self.pag...[>>…]
FastAPI框架中全局业务加载的一些思考实践及处理位置
在使用FastAPI框架进行webapi的开发时,如果要加载一些全局的数据、配置、模块等内容时,应该放在哪里。有些程序会在最后执行的方法里通过depends来加载。如下方法中在get_page里面调用Depends的时候去初始化,但这并不是一个好的方法,因为它不够靠前,并且需要在所有的方法里都加上这个方法(有些地方并不需要user数据)。 defget_page( user:User=Depends(UserCheck) ): 我建议的位置包括数据库的连接初始化位置以及全局数据、配置的加载处理位置。在app进行创建...[>>…]
FastAPI框架中的默认request_body参数
FastAPI在使用其生成的docs接口文档时,经常需要我们输入一些json参数,但实际上这些参数我们调用的时候都是默认的,比如分页数据page一般都是1,pagesize也是,而BaseModel的参数default并不能直接传递到接口文档上request_body中的json中来,很不方便。 FastApi使用的是Pydantic模型,Pydantic模型中BaseModel如果要设置默认请求数据示例。可以通过在BaseModel下定义一个classConfig类,然后对其schema_extra设置example项值,这个就是request_body中的json。如下...[>>…]
Linux上升级nodejs以及nvm ls-remote返回N/A的问题解决
服务器中的jenkins容器里npm的版本是6.*,nodejs版本是12.*,无法运行一些新的vue项目,按照要求需要进行升级到nodejs和npm。因为jenkins安装的docker容器中,在解决问题的过程遇到了一些问题,记录如下:一.要升级nodejs,使用npm的方法: test@userwqeqnpmcacheclean-f npmWARNusing--forceRecommendedprotectionsdisabled. test@userwqeqnpmcacheclean--force npmWARNusing--forceRecommendedprotectionsdisabled. #清缓存、删除项目所有依赖 npmcacheclean--force npmcacheverify #下方运...[>>…]
在docker容器中禁用ipv6。Cannot find module ‘node:fs‘错误
在使用docker启动服务后使用dockerps-a查看服务列表,PORTS那列里会列出很长的一段,每个端口都展示了两排内容,其中就包括了IPV4和IPV6的地址,有些多余。而且会使得整个dockerps-a查看出来的内容显示换行不美观。既没用又会影响命令结果展示,如果能把它关闭掉就好了。我这里使用的是UBUNTU18.0464位,网上也提供了一些方法包括:1.使用--dns-opt='optionssingle-request'运行docker未见效。2.使用--sysctlnet.ipv6.conf.all.disable_ipv6=1运行。未见效。3.启动时添加-e"extra_params=--o...[>>…]
Linux查看CPU架构命令arch及CentOS中取版本的问题
关于CPU架构以前能多点比如i386、i486、mips、alpha,不过现在主要就是两类:x86和arm架构,前也有相关的涉及:http://www.04007.cn/article/1006.html 两类架构定位不同,精简概括为arm是为了低功耗,x86是为了高性能: arm基于精简指令(RISC),简化硬件逻辑,减少晶体管,降低功耗,主要移动端使用。x86基于复杂指令集CISC,硬件逻辑复杂,加上其他流水线指令集并行、超线程、虚拟化等,晶体管数量庞大,主要PC和服务器使用。 C...[>>…]
Python3.11版本uvicorn运行报错content = [STATUS_LINE[status_code]]
之前一直运行顺利的一段代码,突然运行的时候出现了报错httphttptools_impl.py..content=[STATUS_LINE[status_code]]。详细报错内容如下: #报错内容 awaitsend(message) File"C:Python3.11.0Libsite-packagesuvicornprotocolshttphttptools_impl.py",line499,insend content=[STATUS_LINE[status_code]] #涉及的程序部分 classAppException(Exception): def__init__(code...,message...) raiseAppException(code=801,message="格式错误") 排查发现使用raiseAppExc...[>>…]
使用Docker基于4台服务器搭建Minio分布式集群实例
对于分布式集群MinIo,一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,数据就是安全可读的。但需要至少有N/2+1个硬盘在线,才能创建新的对象。部署分布式MinIO集群,需要注意1、分布式MinIO所有节点需要相同的MINIO_ROOT_USER和MINIO_ROOT_PASSWORD两个参数,保证可相互连接。2、MinIO分布式模式需要新的目录。建议单独挂载磁盘创建数据目录。3、建议所有运行分布式MinIO设置的节点都是同构的,即相同的操作系统、相同的硬盘数量和相同的网络互连。4、运行分布式MinIO实例的服务器应都启动...[>>…]
Ubuntu中磁盘的操作命令-判断磁盘是否分区/判断磁盘是否格式化
Ubuntu中拿到一台服务器及加载好磁盘后,我们先看看磁盘是不是已经分区、格式化、挂载。1.Ubuntu查看磁盘是否已经分区:使用fdisk-l及lsblk使用fdisk-l查看命令,可以看到每次显示Disk之后如果跟着显示Device及其信息,则表示进行了分区。如果只显示Disk信息则未进行分区,如下: Disk/dev/vda:100GiB,107374182400bytes,209715200sectors ... Disklabeltype:dos Diskidentifier:0yz2h58c64 #Disk/dev/vda后面有Device即已进行分区 DeviceBootStartEndSectorsSizeIdType /dev/vda1*204820971...[>>…]