可能是最好用的Python API开发框架,好简单,非Gen_v1.0.1

文件名称版本号作者qq版本
可能是最好用的Python API开发框架,好简单,非Genv1.0.1学生宫布8416837Python 3.8
FastAPI (0.1.0)

FastAPI REST版

试水

  • 这里假设你已经会使用一款IDE(集成开发环境)或命令行
安装依赖
  • 安装依赖
    用的工具可能是pip|pip3
    执行pip3 --help试一下。
    在这里插入图片描述
    如果以下安装太慢,请使用国内镜像。
pip3 install fastapi
# ASGI 服务:uvicorn:
pip3 install uvicorn
代码
  • 主类 main.py
from fastapi import FastAPI

app = FastAPI()


@app.get("/{name}")
def read_root(name):
    return {"Hello": "World" + name}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

启动

命令行启动项目
uvicorn main:app --reload --port=8000

【注意】IDE执行上述命令可能因配置问题而闪退
启动成功:
在这里插入图片描述

调用

  • 接口1
    localhost:8000/_name
    在这里插入图片描述
  • 接口2
    localhost:8000/items/3001?q=狗
    在这里插入图片描述

文档

  • FastAPI自带文档,地址是http://localhost:8000/docs
    在这里插入图片描述
  • 同时自带redoc文档,访问地址是http://localhost:8000/redoc
    *

炫技

参数验证

Json参数的接口

  • 代码比上述代码复杂一点点
  • 服务端:
from pydantic import BaseModel

from fastapi import FastAPI

app = FastAPI()


class Dog(BaseModel):
    nick_name: str
    tooth: int
    sex: int
    age_month: float


@app.post("/dog")
def read_item(dog: Dog):
    print(dog)
    return dog
  • 客户端:
    HTTPClient传json参数,以期获得响应参数
import requests

url = "http://localhost:8000/dog"

params = {"nick_name":"QWo","sex":1,"tooth":34, "age_month": 13.5}

res =  requests.post(url,json=params)

res.json()

用python代码执行请求,响应没问题:
在这里插入图片描述
或者使用客户端软件调用,也成功了:
在这里插入图片描述
Json参数型亦可转为Raw型,用raw型也好用,raw型也可以直接输入{}:
在这里插入图片描述

测试功能
  • 框架底层做了封装,使用Python HTTPClient随手测试一下
import requests

url = "http://localhost:8000/dog"

params = {"nick_name":"QWo","sex":1,"tooth":"99"}

res =  requests.post(url,json=params)

res.json()
  • 故意传错参数试试:
    在这里插入图片描述
    ↑自动将字符串强转成了数字。
  • 改成非数字,报错了:
    在这里插入图片描述
  • 漏传参数,友好提示:
    在这里插入图片描述
    ↑age_month参数漏传了。
  • 将参数改为非必传(not required):
    *
    加上 = None
    在这里插入图片描述
  • 谢谢!更多炫技待续。。。

websocket

页面 与springBoot相似 但是可以写在python文件内

html = """
<!DOCTYPE html>
<html>
    <head>
        <title>Chat</title>
    </head>
    <body>
        <h1>向后端发送消息</h1>
        <form action="" onsubmit="sendMessage(event)">
            <input type="text" id="messageText" autocomplete="off"/>
            <button>Send</button>
        </form>
        <ul id='messages'>
        </ul>
        <script>
            var ws = new WebSocket("ws://localhost:8000/ws");
            ws.onmessage = function(event) {
                var messages = document.getElementById('messages')
                var message = document.createElement('li')
                var content = document.createTextNode(event.data)
                message.appendChild(content)
                messages.appendChild(message)
            };
            function sendMessage(event) {
                var input = document.getElementById("messageText")
                ws.send(input.value)
                input.value = ''
                event.preventDefault()
            }
        </script>
    </body>
</html>
"""

后台

  • 注入
from fastapi.responses import HTMLResponse
from fastapi import FastAPI, WebSocket
  • 页面代理
# page
@app.get("/ws")
async def get():
    print("%s" %('Went to websocket'))
    return HTMLResponse(html)
  • 收发消息
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    while True: # 如果为真,则消息来了
        data = await websocket.receive_text()
        # 收到消息后,再发出去
        await websocket.send_text(f"发送的消息: {data}")

事件

@app.on_event("startup") # shutdown
async def init():
    id_game_sort.append({"name": "Howard"})
    id_game_sort.append({"name": "Lisan"})
@app.get("/sort/{id}")
async def getSort(id: int):
    return id_game_sort[id]

input:http://localhost:8000/sort/1
output:{"name":"Lisan"}

配置

运行

端口

  • –port=no.

高级功能

上传文件

安装依赖

pip3 install python-multipart

代码

import time
import uvicorn
from fastapi import FastAPI, File, UploadFile

@app.post("/api/upload_file")
async def file_upload(file: UploadFile = File(...)):
    start = time.time()
    try:
        res = await file.read()
        with open(file.filename, "wb") as f:
            f.write(res)
        return {"msg": "success", 'time': time.time() - start, 'data': file.filename, 'code': 200}
    except Exception as e:
        return {"msg": str(e), 'time': time.time() - start, 'data': file.filename, 'code': 500}

db

rdb 关系数据库

1、安装依赖

pip3 install sqlalchemy==1.4.22
pip3 install pymysql==1.0.2

2、代码

①、配置

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值