一、FastAPI框架使用枚举来型来限定参数
FastAPI框架验证时,有时需要通过枚举的方式来限定参数只能为某几个值中的一个,这时就可以使用FastAPI框架的枚举类型Enum了。publish:December 23, 2020 -Wednesday 代码如下:
#引入Enum模块
from fastapi import FastAPI
from enum import Enum
class SexModel(str, Enum):
man = "man"
woman = "woman"
app = FastAPI()
@app.get("/model/{sexmodel}")
# sexmodel: SexModel限定参数必须是sexmodel: SexModel枚举中的
async def get_model(sexmodel: SexModel):
#也可以不用下面的判断方法,添加了上面的模型会自动限定
#枚举判断方法1,
if model_name == SexModel.man:
#...
#枚举判断方法2
if model_name.value == "woman":
#...
#默认判断方法
return {
"model_name": model_name
}
PS一下关于python中的相等判断,Python中对象包含三个基本要素:id(身份标识)、type(数据类型)、value(值),is和==都可以用于对象比较,但依据不同:
==:是比较操作符,比较的依据是value(值);只要值相等则相等。
is:同一性运算符,比较的依据是id(内存地址),即两个对象是否是同一个对象;
二、FastApi框架隐藏没多大意义的Schemes模型部分内容
之前有篇文章提到python框架fastApi怎么关闭接口文档、隐藏部分接口以及关闭Schemes,但并没有实现关闭schemes的功能。https://linge.blog.csdn.net/article/details/142592679 Schemes这个部分看着不爽啊,而且烦的是它默认打开着的,占了页面很大的一个高度,今天看着不爽就想了想办法。
之前的想法是从fastAPI框架层去关闭它的功能,但找了找框架文档,fastAPI框架也许认为这个东西很有意义吧,根本没有提供阉割它的入口,今天换了个想法,不去干掉它就去把它隐藏掉呗,在页面查看了一下源码想着应该可以通过修改JS或者css将其隐藏。
不过修改CSS/JS文件的话就不能引用框架默认带的云上的静态文件,可以通过修改框架docs.py来调整其调用本地的静态文件,正好之前我因为外网请求被屏蔽解决了这个问题,方法详见:https://linge.blog.csdn.net/article/details/142558667 于是要实现隐藏干掉fastApi框架的Schemes部分就可以在本地调试了。
修改静态资源: swagger-ui.css 在最后添加如下内容,刷新页面即可实现隐藏Schemes部分。
.swagger-ui section.models .no-margin{display:none;}.swagger-ui section.models h4{display:none;}
#. 评论转载:
Level : 1. User:us20201223131715-923 Time:2021-04-02 10:11:33
似乎这样 .swagger-ui section.models{display:none;} 就可以了,不会留下那个边框线。
三、常见的WSGI服务器Gunicorn、uWSGI了解
常见的WSGI服务器有:
1.Gunicorn:
Gunicorn是使用Python实现的WSGI服务器, 提供http服务, 并在worker工作方式上提供了多种选择, 其默认的work_class是sync,即同步阻塞的网络模型,性能不佳。其它的工作方式还有
eventlet、gevent(利用python协程实现)、tornado(利用Tornado框架实现)、gthread(采用线程工作模式)、gaiohttp(利用aiohttp库实现异步I/O,支持web socket)。在多进程模式中除了使用多CPU的同时, 还可以使用协程来提供并发支撑。和nginx类似,Gunicorn也是一个pre-fork worker的模型,从Ruby的独角兽(Unicorn )项目移植。
2.uWSGI:
uWSGI是使用C写的, 在worker进程处理循环中解析http请求后, 使用python的C接口生成environ对象, 再把这个对象作为参数传到WSGI application函数中调用,整个过程中除了python处理调用application是使用的python,其它都是C程序处理, 性能上会有更好的表现。注意全部小写的uwsgi是一种通信协议,不过只是uWSGI服务器自有的协议,uWSGI实现了uwsgi协议, 主要是考虑在uWSGI服务器前有使用Nginx作为负载均衡的情况, 避免请求在Nginx和在Nginx转发到uWSGI时重复解析, uWSGI为了追求性能, 设计了uwsgi协议, 在Nginx解析完以后直接把解析好的结果通过uwsgi协议转发到uWSGI服务器, uWSGI拿到请求按格式生成environ对象, 而不用重复解析请求。
3.Uvicorn
Uvicorn是一个超快速的ASGI服务器,使用uvloop和httptools实现,uvicorn是一个基于asyncio开发的一个轻量级高效的web服务器框架。Uvicorn实现了一个基于ASGI(异步服务器网关接口)的最小的应用程序接口。目前支持http,websockets,Pub/Sub 广播,并且可以扩展到其他协议和消息类型。Uvicorn仅支持python 3.5.3以上版本。
4.bjoern
bjoern是个快速、超轻量级的WSGI服务器软件,为CPython编写。使用C语言开发,基于Libev事件库和http-parser开发,这是一个单线程的服务,占用内存非常低。
上面列的也不全,目前运用最多的还是Gunicorn和uWSGI,Uvicorn可能因为方便在开发模式下用得较多。另外有些网站上把Sanic也列成了一个服务器,Sanic是一个类似于Flask的Python 3.5+ 快速Web服务器和开发框架,接触过一段时间,觉得挺不错的。比FastApi的设计感觉更符合用户的使用体验。不过用作服务器还是没进行过多了解。