FastAPI的应用

什么是FastAPI

高性能的python的web框架
使用ASGI为引擎

pip install fastapi
pip install uvicorn

http使用1.1协议
FastAPI体量很小,需要自己安装一些扩展插件丰富功能
如:jinja2,websocket等

例子1-与前端使用http协议进行交互

main.py

from fastapi import FastAPI#主类
from starlette.responses import HTMLResponse#starlette插件库
from starlette.requests import Request
from starlette.staticfiles import StaticFiles#寻静态文件
from starlette.templating import Jinja2Templates#寻模板文件
import uvicorn as u

app=FastAPI()
app.mount("/statics",StaticFiles(directory="statics"),name="statics")#设定静态文件地址和名字,可在前端直接使用设定值

templates = Jinja2Templates(directory="templates")#设定模板文件路径

@app.get("/")#前端请求地址
async def Read_root(request:Request):#使用异步函数回复请求
    comlist=serialcom.Port()
    return templates.TemplateResponse("login.html",{"request": request,"comlist":comlist})
    #静态加载,加载数据,前端使用{{}}接收数据,数据传comlist入login.html中,要注意数据要么在前端加过滤器tojson转换,要么在后台json转换
@app.post("/serialcom/{app_name}/")#设计地址变量app_name
async def get_fun(app_name:serialcom.ModelName,data:serialcom.Name_serial):
    if app_name==serialcom.ModelName.CSerial:
        dat=data.dict()
        print(dat['context'])
        df={"message":[1,2,3,4]}
        return {"model_name":app_name, "data": df}

login.html

...
context={"context":}向后传的数据设计必须如此,要对应后端设计的数据变量名
$ajax({
	url:"/serialcom/CSerial/",
	type:"get",
	data:JSON.stringify(context),建议加上该函数,避免格式或译码错误,
	success:function(res){
		console.log(res["data"]["message"][1]);
	},
});
...

ModelName

from enum import Enum
class ModelName(str,Enum):#设计变量对应路径名
	CSerial='CSerial'

Name_serial

from pydantic import BaseModel
class Name_serial(BaseModel):#设计http请求数据的变量
	context:dict

例子2-使用websocket协议

from fastapi import FastAPI
from starlette.responses import HTMLResponse
from starlette.websockets import WebSocket

app = FastAPI()

html = """
<!DOCTYPE html>
<html>
    <head>
        <title>Chat</title>
    </head>
    <body>
        <h1>WebSocket Chat</h1>
        <form action="" οnsubmit="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>
"""
# @app.get("/")告诉FastAPI如何去处理请求
# 路径 /
# 使用get操作
@app.get("/")
async def get():
   # 返回表单信息
    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"Message text was: {data}")#向前端发送数据
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值