首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >API 接口开发也没那么难,Python FastAPI Web 框架教程来了!

API 接口开发也没那么难,Python FastAPI Web 框架教程来了!

作者头像
用户6888863
发布于 2023-03-01 12:40:50
发布于 2023-03-01 12:40:50
4.6K00
代码可运行
举报
文章被收录于专栏:AI篮球与生活AI篮球与生活
运行总次数:0
代码可运行

一、FastApi

1.FastAPI 可以做什么

它由 Sebastian Ramirez 开发

  • 开发网站
  • 开发 web API
  • 做一个测试平台
  • 做一个持续集成工具
  • 生成文档

2.为什么要学习 FastAPI

  • FastAPI 的使用方法和设计参考了几十个 python 明星项目 博采众长 吸收各家精华
  • FastAPI 和 Flask 一样简约
  • FastAPI 非常新 并且基于 python3.6 的类型声明系统
  • 自动生成文档
  • 类型声明和数据检验
  • 内置身份认证
  • 性能强
  • 原生支持异步
  • 强大的依赖注入系统
  • GraphQL 和 WebSocket 支持

二、准备工作

1.编译器工具

Python、Pycharm

2.python安装教程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.runoob.com/python/python-install.html

3.pycharm安装教程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
runoob.com/w3cnote/pycharm-windows-install.html

4.安装虚拟环境

1、创建项目工程
2、安装环境
3、安装fastapi

三、教程

1.开启服务和接口访问

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI
app=FastAPI()
if __name__ == '__main__':
    uvicorn.run(app)

服务器运行

添加接口

main

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI
app=FastAPI()
# 添加首页
@app.get("/")
def index():
    return "This is Home Page."
if __name__ == '__main__':
    uvicorn.run(app)

重新运行项目

2.json数据

重新项目

json数据格式解析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://www.json.cn/

3.api文档在线生成

文档解析

文档备注信息

4.发送请求

POST请求

使用ApiPost接口测试工具来访问接口

定义多种请求格式

5.获取URL参数

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI
app=FastAPI()
@app.get("/user/{id}")
def user(id):
    return {"id":id}
if __name__ == '__main__':
    uvicorn.run(app)

6.获取请求头参数

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI,Header
app=FastAPI()
@app.get("/user")
def user(id, token=Header(None)):
    return {"id":id,"token":token}
if __name__ == '__main__':
    uvicorn.run(app)

7.表单获取数据

安装包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python-multipart

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI,Header,Form
app=FastAPI()
@app.get("/user")
def user(id, token=Header(None)):
    return {"id":id,"token":token}
@app.post("/login")
def login(username=Form(None),password=Form(None)):
    return {"data":{"username":username,"password":password}}
if __name__ == '__main__':
    uvicorn.run(app)

8.自定义返回JSON信息

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse

app=FastAPI()

@app.get("/user")
def user():
    return JSONResponse(content={"msg":"get user"},
                        status_code=202,
                        headers={"a":"b"})

if __name__ == '__main__':
    uvicorn.run(app)

8.自定义返回HTML

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse,HTMLResponse
app=FastAPI()
@app.get("/user")
def user():
    return JSONResponse(content={"msg":"get user"},
                        status_code=202,
                        headers={"a":"b"})
@app.get("/")
def user():
    html_content="""
    <html>
        <body><p style="color:red">Hello World</p></body>
        </html>
    """
    return HTMLResponse(content=html_content)

if __name__ == '__main__':
    uvicorn.run(app)

9.自定义返回文件

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse,HTMLResponse
from starlette.responses import FileResponse
app=FastAPI()
@app.get("/user")
def user():
    return JSONResponse(content={"msg":"get user"},
                        status_code=202,
                        headers={"a":"b"})
@app.get("/")
def user():
    html_content="""
    <html>
        <body><p style="color:red">Hello World</p></body>
        </html>
    """
    return HTMLResponse(content=html_content)
@app.get("/avatar")
def user():
    avatar='./static/violet.jpg'
    return FileResponse(avatar)
if __name__ == '__main__':
    uvicorn.run(app)

10.自定义返回HTML页面

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI,Request
from fastapi.templating import Jinja2Templates
app=FastAPI()
template=Jinja2Templates("pages")
@app.get("/")
def user(req:Request):
    return template.TemplateResponse("index.html",context={"request":req})
if __name__ == '__main__':
    uvicorn.run(app)

返回结果

11.代办事项小案例

main.py

index.html

运行项目

main.py

index.html

运行项目

12.绑定数据库

安装 tortoise-orm

安装 aiomysql

main.py

13.数据库访问

models.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tortoise import Model,fields
class Todo(Model):
    id=fields.IntField(pk=True)
    content=fields.CharField(max_length=500)
    create_at=fields.DatetimeField(auto_now_add=True)
    updated_at=fields.DatetimeField(auto_now=True)

main.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import uvicorn
from fastapi import FastAPI, Request, Form
from fastapi.responses import RedirectResponse
from starlette.templating import Jinja2Templates
from tortoise.contrib.fastapi import register_tortoise
from dao.models import Todo
app=FastAPI()
template=Jinja2Templates("pages")
# 数据库绑定
register_tortoise(app,db_url="mysql://root:123456@localhost:3306/fastapi",
                  modules={"models":['dao.models']},
                  add_exception_handlers=True,
                  generate_schemas=True)
todos = ["写日记", "看电影", "玩游戏"]
# 添加首页
@app.get("/")
async def user(req:Request):
    todos=await Todo.all()
    print(todos)
    return template.TemplateResponse("index.html",context={"request":req,"todos":todos})
@app.post("/todo")
def todo(todo=Form(None)):
    todos.insert(0,todo)
    return RedirectResponse("/",status_code=302)
if __name__ == '__main__':
    uvicorn.run(app)

运行项目

14.数据库写入

main.py

运行项目

数据库里就多了个字段

此时就是显示有问题

index.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 关于数据分析与可视化 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、FastApi
    • 1.FastAPI 可以做什么
    • 2.为什么要学习 FastAPI
    • 二、准备工作
      • 1.编译器工具
      • 2.python安装教程
      • 3.pycharm安装教程
      • 4.安装虚拟环境
    • 三、教程
      • 1.开启服务和接口访问
      • 2.json数据
      • 3.api文档在线生成
      • 4.发送请求
      • 5.获取URL参数
      • 6.获取请求头参数
      • 7.表单获取数据
      • 8.自定义返回JSON信息
      • 8.自定义返回HTML
      • 9.自定义返回文件
      • 10.自定义返回HTML页面
      • 11.代办事项小案例
      • 12.绑定数据库
      • 13.数据库访问
      • 14.数据库写入
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档