FastAPI框架使用枚举来型来限定参数、FastApi框架隐藏没多大意义的Schemes模型部分内容以及常见的WSGI服务器Gunicorn、uWSGI了解

一、FastAPI框架使用枚举来型来限定参数

FastAPI框架验证时,有时需要通过枚举的方式来限定参数只能为某几个值中的一个,这时就可以使用FastAPI框架的枚举类型Enum了。publish:December 23, 2020 -Wednesday 代码如下:

python 复制代码
#引入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部分。

html 复制代码
.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的设计感觉更符合用户的使用体验。不过用作服务器还是没进行过多了解。

相关推荐
老大白菜1 天前
FastAPI vs Go 性能对比分析
开发语言·golang·fastapi
卡卡大怪兽1 天前
fastAPI接口的请求与响应——基础
服务器·网络·fastapi
_.Switch2 天前
FastAPI 的进阶应用与扩展技术:异步编程与协程、websocket、celery
网络·数据库·python·websocket·网络协议·性能优化·fastapi
m0_748249542 天前
利用 FastAPI 和 Jinja2 模板引擎快速构建 Web 应用
前端·python·fastapi
Sherry Wangs2 天前
API开发:Flask VS FastAPI
后端·python·fastapi
胡少侠76 天前
Gunicorn启动Django服务
django·sqlite·gunicorn
_.Switch6 天前
FastAPI 应用生产环境部署与性能优化
开发语言·前端·数据库·python·性能优化·fastapi
五指山西8 天前
使用docker-compose部署fastApi微服务
docker·微服务·fastapi
Python涛哥8 天前
Python高性能web框架-FastApi教程:(1)创建一个简单的FastApi
python·fastapi
小豆豆儿8 天前
FastAPI简介
fastapi