FastAPI使用typing类型提示
typing是Python标准库,用来做类型提示。FastAPI使用typing做了:
typing是Python标准库,用来做类型提示。FastAPI使用typing做了:
FastAPI的路径操作函数,可以使用async def定义:
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 响应状态码 在@app.post()方法中添加status_code参数: from fastapi import FastAPI app = FastAPI() @app.post("/items/", status_code=201) async def create_item(name: str): return {"name": name} status_code也可以是IntEnum,比如Python的http.HTTPStatus。 常见响应状态码: 100以上,信息;很少直接使用; 200以上,成功;200是OK,201是Created,204是No Content; 300以上,重定向;304是Not Modified; 400以上,客户端错误;404是Not Found; 500以上,服务器错误; FastAPI引入了status,可以方便的录入这些状态: from fastapi import FastAPI, status app = FastAPI() @app.post("/items/", status_code=status.HTTP_201_CREATED) async def create_item(name: str): return {"name": name} 表单数据 为了使用表单,首先需要安装python-multipart: pip install python-multipart 示例: from fastapi import FastAPI, Form app = FastAPI() @app.post("/login/") async def login(username: str = Form(), password: str = Form()): return {"username": username} 表单由HTML中的<form></form>发送,请求头的content-type一般是application/x-www-form-urlencoded,当为文件时multipart/form-data。 请求文件 示例: from fastapi import FastAPI, File, UploadFile app = FastAPI() @app.post("/files/") async def create_file(file: bytes = File()): return {"file_size": len(file)} @app.post("/uploadfile/") async def create_upload_file(file: UploadFile): return {"filename": file.filename} create_file()的类型为bytes,接收到的文件内容也是bytes,数据都存在于内存中,适用于小文件。create_upload_file()的类型为UploadFile,它会在内存设置一个最大存储,超出最大存储,就会把数据转存到磁盘,适用于大文件。 ...
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 Python第三流行的Web框架 在2020年的Python开发者调查结果中,有这样一段话:“FastAPI在此次调查迭代中首次被引为选项,表现为Python第三流行的Web框架。” FastAPI创立于2018年12月,不到2年就成为仅次于Flask和Django的第三流行的Web框架。而又经过了一年发展来到2022年,虽然2021年Python开发者调查结果还没有出来,但是从GitHub的star来看,Flask 58.7k,Django 63.6k,FastAPI 44.2k,这个差距缩得越来越小。 FastAPI特性 这里就不做机器翻译了,大家看下原文: 我说下我选择FastAPI的理由:首先就是HttpRunner集成了FastAPI,有大佬背书,相信这个框架足以优秀。其次是注解,用多了SpringBoot以后,越来越喜欢注解,层次清晰。对于前后端分离项目来说,Flask虽然非常精简却又自带了Jinja模板引擎,Django虽然是百宝箱却又显得太重,而FastAPI介于两者之间,就是一个纯粹的后端应用。并且FastAPI是基于Starlette框架的,集成了实用功能比如类型检查、OpenAPI(Swagger)等等,这跟我基于pytest框架做tep测试工具的理念很相似。 安装 对Python版本要求是3.6+。 先安装FastAPI: pip install fastapi 再安装ASGI服务器,比如Uvicorn: pip install "uvicorn[standard]" 也可以同时安装fastapi和uvicorn: pip install "fastapi[all]" 运行 写个main.py文件: from typing import Optional from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} @app.get("/items/{item_id}") def read_item(item_id: int, q: Optional[str] = None): return {"item_id": item_id, "q": q} 在命令行输入启动应用: uvicorn main:app --reload main是Python模块名。 app是app = FastAPI()。 --reload在代码变化时自动重启服务器。 打开浏览器访问: http://127.0.0.1:8000/items/5?q=somequery 就能看到JSON响应: {"item_id": 5, "q": "somequery"} 访问: http://127.0.0.1:8000/docs 就能看到Swagger接口文档: pydantic pydantic是一个数据验证的库,FastAPI使用它来做模型校验。比如: ...