FastAPi学习_1

1.什么是FastAPI
FastAPI是一种现代,快速(高性能)的Web框架,用于基于标准Python类型提示使用Python 3.6+构建API。
特点:

  • 快速:非常高的性能,看齐的NodeJS和围棋(感谢Starlette和Pydantic)。现有最快的Python框架之一。
  • 快速编写代码:将功能开发的速度提高大约200%至300%。
  • 错误更少:减少约40%的人为错误(开发人员)。
  • 直观:强大的编辑器支持。完成无处不在。调试时间更少。
  • 简易:旨在易于使用和学习。减少阅读文档的时间。
  • :最小化代码重复。每个参数声明中的多个功能。更少的错误。
  • 健壮:获取可用于生产的代码。具有自动交互式文档。基于标准:基于(并完全兼容)API的开放标准:OpenAPI(以前称为Swagger)和JSON Schema

2.安装FastAPI

pip install uvicorn
pip install fastapi

注意:
官方推荐了可以与 FastApi 搭配的几个模块, 基本上涵盖了几个大的使用场景

由Pydantic使用:
ujson-用于更快的JSON “解析”。
email_validator -用于电子邮件验证。
由Starlette使用:
requests-如果要使用,则为必填TestClient。
aiofiles-如果要使用FileResponse或,则为必填StaticFiles。
jinja2 -如果要使用默认模板配置,则为必需。
python-multipart-如果要使用来支持表单“解析”,则为必填request.form()。
itsdangerous-需要SessionMiddleware支持。
pyyaml-Starlette SchemaGenerator支持所必需的(FastAPI 可能不需要它)。
graphene-需要GraphQLApp支持。
ujson-如果要使用,则为必需UJSONResponse。
由FastAPI / Starlette使用:
uvicorn -用于加载和服务您的应用程序的服务器。
orjson-如果要使用,则为必需ORJSONResponse。
您可以使用安装所有这些pip install fastapi[all]。

3.一个简单的hello word 程序
在安装完依赖后,一切的一切就从 HelloWorld 开始
新建一个 py 文件名叫 main.py
代码如下:

from fastapi import FastAPI

app = FastAPI()  # 初始化app

@app.get("/")  # 监听GET请求
async def read_root():
    return {"hello": "world"}  # 返回json

以上就是最简单的一个 Fast 接口, 需要注意的是, FastApi内部处理网络io的时候使用的是Async, 但是进入函数的具体逻辑不受框架控制, 你可以写成同步,当然写成异步最好
启动服务:
1.在Terminal中启动
输入以下命令行启动

uvicorn app:app --host 127.0.0.1. --port 8888 --reload

"""
	这行命令的意思是使用 uvicorn 在 127.0.0.1服务器上的8888端口 启动 main.py 的 app,

reload 指检测到文件改动时自动重载(这在调试时非常有用)
"""

2.通过os.system启动
代码如下:

from fastapi import FastAPI
import os
app = FastAPI()

@app.get('/hello/{name}')
def read_root_get(name):
    res = {}
    res['name'] = name
    return {"hello": res}


if __name__ == "__main__":
    command = "uvicorn demo12:app --host 0.0.0.0 --port 8888 --reload"
    os.system(command)

直接运行该文件就能启动服务
3. 或者他用过uvicorn.run(启动)

from fastapi import FastAPI
import os
app = FastAPI()

@app.get('/hello/{name}')
def read_root_get(name):
    res = {}
    res['name'] = name
    return {"hello": res}


if __name__ == "__main__":
    uvicorn.run(app=app,host="0.0.0.0",port=8888)

4.自动生成接口文档
FastApi 会自己给你生成接口文档, 默认提供了两种接口文档, 其实内容一样, 只是使用了两个开源的文档框架swagger, redoc
swagger,默认文档位置在http://127.0.0.1:8888/docs
在这里插入图片描述
redoc, 默认文档位置在 http://127.0.0.1:8888/redoc
在这里插入图片描述
5.参数传递
1.get传参

  • url传参
    例:http://127.0.0.1:8888/hello/zhangsan 接收参数代码如下
@app.get("/hello/{name}")
def get_name(name: str):
	return {'name': name}
  • query传参
    例:http://127.0.0.1:8888/login?username=张三&password=123456 接收函数代码如下:
@app.get("/login")
def login(username:str, password: str):
	return{'name': username, 'pwd': password}
  • 混合传参
    例:http://127.0.0.1:8888/login/123?user_id=333 接收函数代码如下:
@app.get("/login/{path}")
def login(path: str, user_id:str):
	return{"path": path, "id": user_id}
"""
	如果想要允许user_id传递的时候为空值(就是不传递user_id)那么就需要设置,代码如下
	@app.get("/login/{path}")
	def login(path: str, user_id:str = None):
		return{"path": path, "id": user_id}
"""

6.body传参
body传参也和get传参一样,是以函数传参的形式,这里就不多说了。但是有时候,body传参可能参数会有很多的情况,这种情况如果都使用函数传参的形式,不美观, 所以我们可以采用application/json 的方式, 并且定义一个参数类来管控参数,代码如下:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):  # 定义一个类用作参数
    name: str
    price: float
    is_offer: bool = None  # 该字段可为空


@app.put("/{item_id}")
async def update_item(item_id: int, item: Item):  # item需要与Item对象定义保持一致,item_id和get传参一样
    return {
        "item_name": item.name,
        "item_id": item_id
    }

FastAPI的强大之处,是在传递参数的时候,会对参数进行验证,如上代码,

  • 验证了请求中item_id的路径是否存在,并且该item_id的类型是否是int类型
  • 检查是否具有必填参数name,且该类型为str
  • 检查是否具有必填参数price,且该类型为float
  • 检查是否存在参数is_offer,如果存在类型为bool
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值