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。如下...[>>…]
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...[>>…]
Gunicorn日志:httptools.parser.errors.HttpParserInvalidMethodError: invalid HTTP method
使用Gunicorn和FastAPI搭建的服务端框架程序看到报错:self.parser.feed_data(data)File"httptools/parser/parser.pyx",line193,inhttptools.parser.parser.HttpParser.feed_datahttptools.parser.errors.HttpParserInvalidMethodError:invalidHTTPmethod 奇怪为什么会有这样的错误,因为我尝试过post/get混用及URL错误各种请求尝试都未出现这样的错误,这个报错是在什么条件下产生的呢?于是我使用ApiPost来测试请求,同时也发现ApiPost可以选择的方法很多,ApiPost...[>>…]
jsonable_encoder方法有点作用但还是有些缺陷
在使用fastAPI进行开发的时候,最烦的就是数据库里的时间字段,一般我们会增加create_time和update_time两个时间字段,而这两个字段都是timestamp类型,默认值CURRENT_TIMESTAMP。而这两种类型的字段在使用Pymysql读取数据库内容之后如果直接使用json输出会报错:TypeError:ObjectoftypedatetimeisnotJSONserializable,需要对每个这种类型的字段进行如下的另外处理。record["create_time"]=record["create_time"].strftime("%Y-%m-%d%H:%M:%S") 之后发现了这个jsonab...[>>…]
Python中使用requests发送application/json格式报文数据需注意事项
在Python项目对接开发中,通常可能会用到使用requests进行post报文数据,双方在对接的同时还会对发送的数据进行签名计算,因此传输的数据需要对应起来。Python中使用requests发送报文数据需注意发送的数据类型是application/json还是application/x-www-form-urlencoded数据。 python使用requests进行请求时有data和json两个参数,即可以用json也可以用data。但是是有区别的。建议如果对方是使用application/json,则使用json参数发送json数据。如果对方是application...[>>…]
FastAPI项目报错:requirements.InvalidRequirement: Parse error at "XXX": Expected stringEnd
之前一直运行正常的使用FastAPI搭建的python项目,今天突然运行不起来了,报错:pkg_resources.extern.packaging.requirements.InvalidRequirement:Parseerrorat"'ler'":ExpectedstringEnd。根据报错的提示找到文件位置和对应的文件代码如下: File"c:python386libsite-packagespkg_resources_vendorpackagingrequirements.py",line95,in__init__ classRequirement(object): def__init__(self,requirement_string): try: req=REQUIREMENT.parseString(requirement_string) exceptParseExcep...[>>…]
python中的日志模板logoru及常用参数配置解析
Python中有一个内置的日志标准库——logging,但开发中涉及到日志记录时,基本都不会采用它,因为其在配置上较为繁琐。同时在多线程或多进程的场景下,若不进行特殊处理还会导致日志记录异常。其替代品就是一个优雅、简洁的日志记录第三方库——loguru,导入封装的logger类,即可直接进行调用和日志处理,非常方便实用。 #安装logoru模块 pip3installloguru #引入和调用logoru fromloguruimportlogger logger.debug('Thisisdebuginformation') logger.info('Thisisinfoinformation') logger....[>>…]
FastAPI中的depends中的类变量导致跨请求会话传递数据的问题
使用FastAPI搭建了一个python服务端项目里,在route的请求处理方法中使用depends来判断用户的登录状态。遇到了depends中的类变量导致跨请求会话传递数据的问题。 依赖项是FastAPI提供的简单易用、功能强大的依赖注入系统。可以让开发人员轻松地把组件集成至FastAPI。依赖注入非常适合共享业务逻辑、共享数据库连接、实现安全、验证、角色权限等场景,这些场景能复用相同的代码逻辑,而使用依赖注入,将代码重复最小化。依赖项可以是一个函数,也可以是一个类,官方的...[>>…]
Python全局常量即跨文件全局变量的替代实现方法
常量是不变的变量,在Python中,常量通常用大写的变量名表示。但事实上,Python并没有严格的常量概念。python有内置的常量,而且只有6个,分别是True、False、None、NotImplemented、Ellipsis、__debug__。在Python中并没有直接的方法或命令去声明一个全局常量。甚至python中就没有关于全局常量数据类型的定义。Python对变量关键词的查找顺序为:局部命名空间->全局命名空间->内置命名空间。找不到变量名,它将会放弃查找并引发一个NameError异常。其中内置名称(built-innames)是Pyt...[>>…]