FastApi快速入门 01: 基础使用

易小灯塔
2022-01-18 / 0 评论 / 1,362 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年01月18日,已超过1042天没有更新,若内容或图片失效,请留言反馈。

FastApi Web后端开发框架 快速入门01


 

简介

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

关键特性:
快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
高效编码:提高功能开发速度约 200% 至 300%。
更少bug:减少约 40% 的人为(开发者)导致错误。
智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
简单:设计的易于使用和学习,减少阅读文档时间。
简短:减少代码重复。通过不同的参数声明实现丰富功能。bug 更少。
健壮:生产可用级别的代码。以及自动生成的交互式文档。
标准化:基于 API 的相关开放标准并完全兼容:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

官方文档:https://fastapi.tiangolo.com 源码地址:https://github.com/tiangolo/fastapi

 

 

安装

 

直接使用pip命令进行安装:

pip install fastapi 

需要一个ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn

pip install uvicorn 

 

可选的其他组件

# 从表单获取参数
pip install python-multipart

# 资源文件管理
pip install aiofiles

# jinja2模板引擎
pip install jinja2

# orm操作数据库
pip install tortoise-orm  #异步orm框架

pip install sqlalchemy  # 有名的ORM框架
pip install pymysql  # MySQL驱动
pip install fastapi-async-sqlalchemy  # 异步sqlalchemy 

 

 

1.hello world

 

1.1 创建文件main.py

from fastapi import FastAPI
import uvicorn

app = FastAPI()

@app.get("/")
async def index():
    return {"msg":"hello world"}

if __name__ == '__main__':
    uvicorn.run(app,host="127.0.0.1",port=8000) 

 

1.2 启动项目

如果是用虚拟环境先进入虚拟环境

activate # 进入虚拟环境
deactivate # 退出虚拟环境 

运行脚本

uvicorn main:app # 普通启动
uvicorn main:app --reload  # 自动重载方式启动
uvicorn main:app --port 8000 --reload  # 指定端口启动 

 

 

1.3 接口文档

fastapi会自动生成接口文档, 启动后可以查看接口文档

http://127.0.0.1:8000/docs 交互式 API 文档

http://127.0.0.1:8000/redoc

 

 

2.常规请求示例

2.1 单个POST请求

@app.post("/login")
def login():
    return {"msg":"login success"} 

 

2.2 同时支持支持post, get和put请求

@app.api_route("/list", methods=["GET","POST","PUT"])
def list():
    return {"list":"data"} 

 

2.3 从URL获取参数

@app.get("/page/{n}")
def page(n):
    """从URL获取参数"""
    return n 

 

2.4 从请求头获取参数

from fastapi import FastAPI,Header

@app.get("/user")
def user(id,token=Header(None)):
    '''从请求头获取参数'''
    return {"id":id,"token":token} 

 

2.5 从请求体获取参数

from fastapi import FastAPI,Header,Body

@app.get("/getdata")
def getdata(data=Body(None)):
    """从请求体获取参数"""
    return {"data":data} 

 

2.6 从请求表单获取参数

安装处理包

pip install python-multipart 

 

from fastapi import FastAPI,Header,Body,Form

@app.post("/login2")
def login2(username=Form(None),passwd=Form(None)):
    """从请求表单获取参数"""
    return {"data":{"username":username,"passwd":passwd}} 

 

2.7 定制响应头

from fastapi.responses import JSONResponse

@app.get("/user")
def user2():
    '''定制响应头'''
    return JSONResponse(content={"msg":"get user"},
                        status_code=202,
                        headers={"a":"b"}) 

 

2.8 返回HTML页面

from fastapi.responses import JSONResponse,HTMLResponse

@app.get("/html")
def html():
    '''返回HTML页面'''
    html_content = '''
    <html>
        <body>
        <p> html page </p>
        </body>
    </html>
    '''
    
    return HTMLResponse(content=html_content) 

 

2.9 返回资源文件

安装附加包

pip install aiofiles 

 

from fastapi.responses import JSONResponse,HTMLResponse,FileResponse

@app.get("/files")
def files():
    '''返回资源文件'''
    files = 'static/mage.jpg'
    return FileResponse(files,filename="mage.jpg") 

2.10 使用模板

使用jinja2模板引擎

pip install jinja2 

 

from fastapi import FastAPI,Request
from fastapi.templating import Jinja2Templates

template = Jinja2Templates("pages")

@app.get("/app1")
def app1(req:Request):
    """返回html页面"""
    return template.TemplateResponse("index.html",context={"request":req}) 

模板语法

0

评论 (0)

取消