FastAPI 学习笔记

简介:

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一

  • 高效编码:提高功能开发速度约 200% 至 300%。*

  • 更少 bug:减少约 40% 的人为(开发者)导致错误。*

  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。

  • 简单:设计的易于使用和学习,阅读文档的时间更短。

  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。

  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。

  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

Starlette,Pydantic 与 FastAPI 的关系

Pydantic 是一个基于 Python 类型提示来定义数据验证,序列化和文档(使用 JSON 模式)库

Starlette 是一种轻量级的 ASGI 框架/工具包,是构建高性能 Asyncio 服务的理想选择,异步功能网关

pydantic库学习

pydantic中BaseModel类

数据导入类

校验失败处理

模型类的属性和方法

数据写入文件

递归/嵌套模型

from datetime import datetime

from pydantic import BaseModel

from typing import List, Optional

from pathlib import Path

class User(BaseModel):

id: int #无默认值所以是必填字段

name: str = "Slaine Troyard" #可选字段,有默认字符串

signup_ts: Optional[datetime] #可选字段,默认为None

friends: List[int] = [] #列表中元素为int类型或者可转换为int

external_data = {

"id": "123",

"singnup_ts": "2022-7-12 20:51",

"friends": [1, 2, "3"] #满足friends要求

}

print("-------------------------------")

#使用python解包方式 ** ,将external_data数据传到类模板中实例化

user = User(**external_data)

print(user.id, user.friends) #打印出实例化对象指定属性

print(user.dict()) #以字典形式打印出对象内容(字符串3被自动转换为int)

###----校验失败处理

try:

User(id=1, signup_ts=datetime.today(), friends=[1,2,"not number"])

except ValueError as e:

print(e.json()) #将报错json格式化

print("----------------------------------")

###模型类的属性和方法

print(user.dict())

print(user.json())

print(user.copy())

print(User.parse_obj(obj=external_data))#解包的方法,解析字典数据

print(User.parse_raw('{"id": "123", "name": "Slaine Troyard", "signup_ts": "2022-7-12 20:51", "friends": [1, 2, 3]}')) #解析原生数据

#数据写入文件

path = Path('pydantic_writin.json')

path.write_text('{"id": "123", "name": "Slaine Troyard", "signup_ts": "2022-7-12 20:51", "friends": [1, 2, 3]}')

print(User.parse_file(path))

print("----------------------------------")

print(user.schema())

print(user.schema_json())#显示输出数据的格式和方案

print(user.construct()) #不检验数据直接创建模型类||与parse_obj相比它不作自动校验

print("----------")

print(User.fields.keys())

print("----------------------------------")

####递归/嵌套模型

class Sound(BaseModel):

sound: str

class Dog(BaseModel):

birthday: datetime

weight: float = Optional[None]

sound: List[Sound]

dogs = Dog(birthday=datetime.today(), weight=12.3, sound=[{"sound":"wang wang"}, {"sound": "ying ying"}])

print(dogs.dict())

fastApi 入门

简单的 Web 应用开发只需要4步即可完成。

  • 创建一个 APP 实例

  • 编写一个路径操作装饰器(如 @app.get("/"))

  • 编写一个路径操作函数

  • 运行开发服务器(如 uvicorn main:app--reload)

1.环境准备

pip install fastapi == 版本号

pip install uvicorn 类似于tomcat 的作用 专为异步 Python Web 应用设计的服务器

  1. 入门案例

from fastapi import FastAPI

创建一个APP实例

app = FastAPI()

添加路径操作装饰器和路径操作函数

@app.get("/")

async def demo():

return {"Hello": "World"}

if name == "main":

import uvicorn

启动服务,注意APP前面的文件名称

uvicorn.run(app='helloWorld:app', host="127.0.0.1", port=8010, reload=True, debug=True)

启动 项目中应用 直接在main 中 uvicorn.run其中包括了多个配置参数

相关推荐
技术猴小猴10 分钟前
如何使用Python实现UDP广播
开发语言·python·udp
知识分享小能手21 分钟前
微信小程序入门学习教程,从入门到精通,微信小程序页面交互 —— 知识点详解与案例实现(3)
前端·javascript·学习·react.js·微信小程序·小程序·交互
charlie11451419122 分钟前
精读C++20设计模式——结构型设计模式:代理模式
c++·学习·设计模式·代理模式·c++20·概论
武昌库里写JAVA36 分钟前
Java 设计模式在 Spring 框架中的实践:工厂模式与单例模式
java·vue.js·spring boot·sql·学习
峥嵘life37 分钟前
Android16 adb投屏工具Scrcpy介绍
android·开发语言·python·学习·web安全·adb
tiankongdeyige39 分钟前
Unity学习之垃圾回收GC
学习
AI视觉网奇1 小时前
vscode 不能跳转 ERR_OSSL_EVP_BAD_DECRYPT
python
文心快码BaiduComate1 小时前
Comate分饰多角:全栈开发一个Python学习网站
前端·后端·python
雨声不在1 小时前
cronet从编译到修改之: 支持IP直连
python·网络协议·tcp/ip·cronet
DKPT1 小时前
JVM如何管理直接内存?
java·笔记·学习