Flask与FastAPi
FastAPI安装与使用
交互式文档
路径与查询参数
参数使用枚举
请求与响应
自定义响应状态码
中间件_计算回调时间
类型与模型
Flask安装与使用
Gunicorn(WSGI服务)
本文档使用MrDoc发布
返回首页
-
+
请求与响应
2021年8月19日 14:20
admin
# -*- coding:utf-8 -*- # @Author: komeiji satori from fastapi import FastAPI import uvicorn # 类似于 app = Flask(__name__) app = FastAPI() # 绑定路由和视图函数 @app.get("/") async def index(): return {"name": "古明地觉"} # 在 Windows 中必须加上 if __name__ == "__main__",否则会抛出 RuntimeError: This event loop is already running if __name__ == "__main__": # 启动服务,因为我们这个文件叫做 main.py,所以需要启动 main.py 里面的 app # 第一个参数 "main:app" 就表示这个含义,然后是 host 和 port 表示监听的 ip 和端口 uvicorn.run("main:app", host="0.0.0.0", port=5555) ####我们在浏览器中输入 "localhost:5555" 就会显示相应的输出,我们看到在视图函数中可以直接返回一个字典。当然除了字典,其它的数据类型也是可以的,举个栗子: # -*- coding:utf-8 -*- # @Author: komeiji satori from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/int") async def index1(): return 666 @app.get("/str") async def index2(): return "古明地觉" @app.get("/bytes") async def index3(): return b"satori" @app.get("/tuple") async def index4(): return ("古明地觉", "古明地恋", "雾雨魔理沙") @app.get("/list") async def index5(): return [{"name": "古明地觉", "age": 17}, {"name": "古明地恋", "age": 16}] if __name__ == "__main__": uvicorn.run("main:app", host="0.0.0.0", port=5555) ####直接使用 requests 发请求 ![](/media//202108/2021-08-19142010300262.png) ####我们看到基本上都是支持的,只不过元组自动转成列表返回了。这里我们在路由中指定了路径,可以看到 FastAPI 中的路径形式和其它框架并无二致,只不过目前的路径是写死的,如果我们想动态声明路径参数该怎么做呢? # -*- coding:utf-8 -*- # @Author: komeiji satori from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/items/{item_id}") async def get_item(item_id): """和 Flask 不同,Flask 是使用 <>,而 FastAPI 使用 {}""" return {"item_id": item_id} if __name__ == "__main__": uvicorn.run("main:app", host="0.0.0.0", port=5555) ![](/media//202108/2021-08-19142349279976.png) ####整体非常简单,路由里面的路径参数我们可以放任意个,只是 {} 里面的参数必须要在定义的视图函数的参数中出现。但是问题来了,我们好像没有规定类型啊,如果我们希望某个路径参数只能接收指定的类型要怎么做呢? # -*- coding:utf-8 -*- # @Author: komeiji satori from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/apple/{item_id}") async def get_item(item_id: int): """和 Flask 不同,Flask 定义类型是在路由当中,也就是在 <> 里面,变量和类型通过 : 分隔 而 FastAPI 是使用类型注解的方式,此时的 item_id 要求一个整型(准确的说是一个能够转成整型的字符串)""" return {"item_id": item_id} if __name__ == "__main__": uvicorn.run("main:app", host="0.0.0.0", port=5555) ![](/media//202108/2021-08-19142425705186.png) ####如果我们传递的值无法转成整型的话,那么会进行提示:告诉我们 value 不是一个有效的整型,可以看到给的提示信息还是非常清晰的。 ####所以通过 Python 的类型声明,FastAPI提供了数据校验的功能,当校验不通过的时候会清楚地指出没有通过的原因。在我们开发和调试的时候,这个功能非常有用。 --- ##返回值不带"" ####在 FastAPI 中,如果您想要返回一个字符串而不带双引号,可以使用 Response 类来自定义响应。通过使用 Response 类,您可以设置响应的内容类型和主体。 from fastapi import FastAPI, Response app = FastAPI() @app.get("/data") def get_data(): data = "Hello, World!" return Response(content=data, media_type="text/plain")
分享到: