FastAPI 是一个高性能的 Python Web 框架,它可以帮助开发者快速构建 API 应用程序。它使用标准 Python 类型检查来确保代码的正确性,并且可以自动生成文档,从而大大减少了开发时间。
本教程将向你展示如何使用 FastAPI 来创建一个 API 应用程序。我们将使用 Python 3.6+ 和 FastAPI 0.60+ 版本来实现这一目标。
首先,我们需要安装 FastAPI 依赖包。你可以使用 pip 工具来安装 FastAPI:
$ pip install fastapi
如果你想要在开发过程中获得最新的功能,你也可以安装 FastAPI 的开发版本:
$ pip install "fastapi[dev]"
在创建应用之前,我们需要创建一个新的目录来存储我们的代码。然后,我们需要在该目录中创建一个名为 app.py 的文件。该文件将包含我们的应用代码。
from fastapi import FastAPI # Import the FastAPI class
app = FastAPI() # Create an instance of the class # Create routes @app.get("/") def read_root(): return {"Hello": "World"} @app.get("/items/{item_id}") def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}
有了 app.py 文件之后,我们就可以运行该应用了。要运行该应用,请打开命令行界面并输入如下命令:
$ uvicorn app:app --reload< p >上述命令会在本地 8000 端口上启动一个 HTTP 服务器来处理请求。你也可以使用不同的端口来运行该服务器: p >< pre >$ uvicorn app:app --reload --port 8001 pre >< p >此外,你也可以使用不同的协议来运行服务器: p >< pre >$ uvicorn app:app --reload --port 8001 --protocol httpx pre >< h2 >4. 运行测试 h2 >< p >当你已经运行了 HTTP 服务器之后,就可以测试 API 是否正常工作了。要测试 API ,你需要打开浏览器并输入 http://localhost:8000/ (如果你使用不同的端口则会需要修改 URL )。如果一切正常已经都能够正常工作了: p >< pre >{"Hello": "World"} pre >< h2 >5. 进行部署 h2 >< p >当你已经测试了 API 并且它能够正常工作之后(即便是地狱重重的内郊也是如此 : ) ) ;就是时候将其投入生产了。FastAPI 是一个易于部署的 Web 框架 ;因此 ;郭郭郭郭郭郭郭郭郭 郭 郭 郭 郭 郭 郭 郭 郭 郭 郭 郭 郭 郭 郭 郩 助 助 助 助 助 助 助 助 助 众 多 服务供选择 ﹗例如 Heroku、AWS Lambda、Google App Engine 甚至是 Docker Compose 系列 ﹗对于大多数情况耳耳耳耳耳耳耳耳耳 这釅样子样子样子样子样子样子样子样子样子样子样子样子 是很方便得得得得得得得得得得得得得得得 < / p >< h2 > 6 . 总 结 < / h2 >< p >地方地方地方地方地方地方地方地方地方 本教学中我学中我学中我学中我学中我学中我学中 我 会针对性性性性性性性性性性性性性 过FastAPIFastAPIFastAPIFastAPIFastAPIFastAPIFastAPIFastAPIFastAPIFastAPIFastAPI I I I I I I I I I I I I I I I I I 束束束束束束束束束束束 进行快递快递快递快递快递快递快递快递快递快递快递教教教教教教教教教教学学学学学学学学 。它既易易易易易易易易易易易易易易于上手上手上手上手上手上手上手上手上手上手九九九九九九九九九九 , 也能处理处理处理处理处理处理 复 复 复 复 复 复 复 复 复 复 复 复 复 复 杂 的 API 贴特特特特特特特特特特特特特 贴贴贴贴贴贴贴贴 运运运运运运运运 运 运 运 运 运 运 . . . . . . . . . . . . .
你可以Response在你的路径操作函数中声明一个 type 的参数(就像你可以为 cookie 做的那样)。
然后您可以在该时间响应对象中设置标头。
from fastapi import FastAPI, Response
app = FastAPI()
@app.get("/headers-and-object/")
def get_headers(response: Response):
response.headers["X-Cat-Dog"] = "alone in the world"
return {"message": "Hello World"}
然后您可以像往常一样返回您需要的任何对象(a dict、数据库模型等)。
如果您声明了 a response_model,它仍将用于过滤和转换您返回的对象。
FastAPI将使用该临时响应来提取标头(还有 cookie 和状态代码),并将它们放在包含您返回的值的最终响应中,由 any 过滤response_model。
您还可以Response在依赖项中声明参数,并在其中设置标头(和 cookie)。
也可以在Response直接返回 a 时添加标题。
按照直接返回响应中的说明创建响应,并将标头作为附加参数传递:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/headers/")
def get_headers():
content = {"message": "Hello World"}
headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"}
return JSONResponse(content=content, headers=headers)
技术细节
您也可以使用from starlette.responses import Response或from starlette.responses import JSONResponse。
FastAPI提供相同starlette.responses的fastapi.responses,就像为你的方便,开发人员。但大多数可用的响应直接来自 Starlette。
由于Response可以经常用于设置标头和 cookie,FastAPI也在fastapi.Response.
请记住,可以使用“X-”前缀添加自定义专有标头。
但是,如果您希望浏览器中的客户端能够看到自定义标头,则需要使用Starlette 的 CORS 中记录的参数将它们添加到 CORS 配置中(在CORS(跨源资源共享)中了解更多信息) 文档。expose_headers
使用FastAPI,你可以定义、校验、记录文档并使用任意深度嵌套的模型(归功于Pydantic)。List 字段你可以将一个属性定义为拥有子...
File用于定义客户端的上传文件。说明因为上传文件以「表单数据」形式发送。所以接收上传文件,要预先安装python-multipart。例如...
可以在 PyPI 搜索 标记为Framework :: Flask扩展包,并且可以通过easy_install或pip下载。如果你把一个 Flask 扩展添加...
Flask类有一个redirect()函数。调用时,它返回一个响应对象,并将用户重定向到具有指定状态代码的另一个目标位置。 redirect()函...
FastCGI是在nginx,lighttpd和Cherokee等web服务器上的Flask应用程序的另一个部署选项。配置FastCGI首先,您需要创建FastCGI服务...
class RequestFactoryRequestFactory 与测试客户端共享相同的 API。 但是,RequestFactory 不能像浏览器那样运行,而是...
代码覆盖度表示有多少源代码被测试了。它表明了代码的哪些部分被测试用例覆盖,哪些没有。这是测试应用很重要的部分,所以强烈推...
到目前为止,本文档的重点是缓存您自己的数据。但是另一种类型的缓存也与Web开发相关:由“下游”缓存执行的缓存。这些系统甚至...
模型继承在 Django 中与普通类继承在 Python 中的工作方式几乎完全相同,但也仍应遵循本页开头的内容。这意味着其基类应该继承自...