python webapi服务端,fastapi windows部署

  python webapi服务端,fastapi windows部署

  FastAPI是一个用于构建API的现代、快速(高性能)的Web框架。它使用Python3.6并基于标准Python类型提示。本文主要介绍用Python实现FastAPI作为web服务器的过程。有需要的可以参考一下。

  00-1010 1、入门2、安装3、官方示例3.1入门示例的Python测试代码如下(main.py):3.2跨域CORS3.3文件操作3.4 WebSocket Python测试代码如下:

  

目录

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

  文件:https://fastapi.tiangolo.com

  源代码:https://github.com/tiangolo/fastapi

  关键特征:

  快速:极高的性能,堪比NodeJS和Go(感谢Starlette和Pydantic)。最快的Python web框架之一。高效编码:提高功能开发速度200%到300%左右。* bug更少:减少40%左右的人为(开发人员)造成的错误。*智能:出色的编辑器支持。到处都可以自动完成,减少调试时间。简单性:旨在易于使用和学习,阅读文档花费的时间更少。简短:尽量减少代码重复。通过不同的参数声明实现丰富的功能。更少的错误。健壮:产生可用级别的代码。还有自动生成的交互文档。标准化:基于(并完全兼容)API的相关开放标准:OpenAPI(原名Swagger)和JSON Schema。

  

1、简介

  pip安装fastapi

  或者

  pip安装fastapi[全部]

  运行服务器的命令如下:

  uvicon main : app-重新加载

  

2、安装

  FastAPI需要Python版或更高版本。

  

3、官方示例

  # -*-编码:utf-8 -*-

  从fastapi导入FastAPI

  app=FastAPI()

  @app.get(/)

  异步定义根():

  return { message : Hello World }

  运行结果如下:

  运行服务器的命令如下:

  uvicon main : app-重新加载

  

3.1 入门示例 Python测试代码如下(main.py):

  CORS或“跨域资源共享”是指在浏览器中运行的前端有JavaScript代码与后端通信,后端与前端在不同的“源”中的情况。

  它是源协议(http,https)、域(myapp.com,localhost.tiangolo.com)和端口(80,443,8080)的组合。因此,这些是不同的来源:

  http://本地主机

  https://本地主机

  http://本地主机:8080

  Python测试代码如下(test_fastapi.py):

  # -*-编码:utf-8 -*-

  来自泰

  ping import Union

  from fastapi import FastAPI, Request

  import uvicorn

  from fastapi.middleware.cors import CORSMiddleware

  app = FastAPI()

  # 让app可以跨域

  # origins = ["*"]

  origins = [

   "http://localhost.tiangolo.com",

   "https://localhost.tiangolo.com",

   "http://localhost",

   "http://localhost:8080",

  ]

  app.add_middleware(

   CORSMiddleware,

   allow_origins=origins,

   allow_credentials=True,

   allow_methods=["*"],

   allow_headers=["*"],

  )

  # @app.get("/")

  # async def root():

  # return {"Hello": "World"}

  @app.get("/")

  def read_root():

   return {"message": "Hello World,爱看书的小沐"}

  @app.get("/items/{item_id}")

  def read_item(item_id: int, q: Union[str, None] = None):

   return {"item_id": item_id, "q": q}

  @app.get("/api/sum")

  def get_sum(req: Request):

   a, b = req.query_params[a], req.query_params[b]

   return int(a) + int(b)

  @app.post("/api/sum2")

  async def get_sum(req: Request):

   content = await req.json()

   a, b = content[a], content[b]

   return a + b

  @app.get("/api/sum3")

  def get_sum2(a: int, b: int):

   return int(a) + int(b)

  if __name__ == "__main__":

   uvicorn.run("test_fastapi:app", host="127.0.0.1", port=8000

   , log_level="info", reload=True, debug=True)

  运行结果如下:

  

  

  

  FastAPI 会自动提供一个类似于 Swagger 的交互式文档,我们输入 localhost:8000/docs 即可进入。

  

  

  

3.3 文件操作

  返回 json 数据可以是:JSONResponse、UJSONResponse、ORJSONResponse,Content-Type 是 application/json;返回 html 是 HTMLResponse,Content-Type 是 text/html;返回 PlainTextResponse,Content-Type 是 text/plain。
还有三种响应,分别是返回重定向、字节流、文件。

  (1)Python测试重定向代码如下:

  

# -*- coding:utf-8 -*-

  from fastapi import FastAPI, Request

  from fastapi.responses import RedirectResponse

  import uvicorn

  app = FastAPI()

  @app.get("/index")

  async def index():

   return RedirectResponse("https://www.baidu.com")

  @app.get("/")

  def main():

   return {"message": "Hello World,爱看书的小沐"}

  if __name__ == "__main__":

   uvicorn.run("test_fastapi:app", host="127.0.0.1", port=8000

   , log_level="info", reload=True, debug=True)

  运行结果如下:

  

  (2)Python测试字节流代码如下:

  

# -*- coding:utf-8 -*-

  from fastapi import FastAPI, Request

  from fastapi.responses import StreamingResponse

  import uvicorn

  app = FastAPI()

  async def test_bytearray():

   for i in range(5):

   yield f"byteArray: {i} bytes ".encode("utf-8")

  @app.get("/index")

  async def index():

   return StreamingResponse(test_bytearray())

  @app.get("/")

  def main():

   return {"message": "Hello World,爱看书的小沐"}

  if __name__ == "__main__":

   uvicorn.run("test_fastapi:app", host="127.0.0.1", port=8000

   , log_level="info", reload=True, debug=True)

  运行结果如下:

  

  (3)Python测试文本文件代码如下:

  

# -*- coding:utf-8 -*-

  from fastapi import FastAPI, Request

  from fastapi.responses import StreamingResponse

  import uvicorn

  app = FastAPI()

  @app.get("/index")

  async def index():

   return StreamingResponse(open("test_tornado.py", encoding="utf-8"))

  @app.get("/")

  def main():

   return {"message": "Hello World,爱看书的小沐"}

  if __name__ == "__main__":

   uvicorn.run("test_fastapi:app", host="127.0.0.1", port=8000

   , log_level="info", reload=True, debug=True)

  运行结果如下:

  

  (4)Python测试二进制文件代码如下:

  

# -*- coding:utf-8 -*-

  from fastapi import FastAPI, Request

  from fastapi.responses import FileResponse, StreamingResponse

  import uvicorn

  app = FastAPI()

  @app.get("/download_file")

  async def index():

   return FileResponse("test_fastapi.py", filename="save.py")

  @app.get("/get_file/")

  async def download_files():

   return FileResponse("test_fastapi.py")

  @app.get("/get_image/")

  async def download_files_stream():

   f = open("static\\images\\sheep0.jpg", mode="rb")

   return StreamingResponse(f, media_type="image/jpg")

  @app.get("/")

  def main():

   return {"message": "Hello World,爱看书的小沐"}

  if __name__ == "__main__":

   uvicorn.run("test_fastapi:app", host="127.0.0.1", port=8000

   , log_level="info", reload=True, debug=True)

  运行结果如下:

  

  

  

  

  

3.4 WebSocket Python测试代码如下:

  

# -*- coding:utf-8 -*-

  from fastapi import FastAPI, Request

  from fastapi.websockets import WebSocket

  import uvicorn

  app = FastAPI()

  @app.websocket("/myws")

  async def ws(websocket: WebSocket):

   await websocket.accept()

   while True:

   # data = await websocket.receive_bytes()

   # data = await websocket.receive_json()

   data = await websocket.receive_text()

   print("received: ", data)

   await websocket.send_text(f"received: {data}")

  @app.get("/")

  def main():

   return {"message": "Hello World,爱看书的小沐"}

  if __name__ == "__main__":

   uvicorn.run("test_fastapi:app", host="127.0.0.1", port=8000

   , log_level="info", reload=True, debug=True)

  HTML客户端测试代码如下:

  

<!DOCTYPE html>

  <html lang="en">

  <head>

   <meta charset="UTF-8">

   <title>Tornado Websocket Test</title>

  </head>

  <body>

  <body onload=onLoad();>

  Message to send: <input type="text" id="msg"/>

  <input type="button" onclick="sendMsg();" value="发送"/>

  </body>

  </body>

  <script type="text/javascript">

   var ws;

   function onLoad() {

   ws = new WebSocket("ws://127.0.0.1:8000/myws");

   ws.onopen = function() {

   console.log(connect ok.)

   ws.send("Hello, world");

   };

   ws.onmessage = function (evt) {

   console.log(evt.data)

   };

   ws.onclose = function () {

   console.log("onclose")

   }

   }

   function sendMsg() {

   ws.send(document.getElementById(msg).value);

   }

  </script>

  </html>

  运行结果如下:

  

  

  到此这篇关于Python实现Web服务器(FastAPI的文章就介绍到这了,更多相关Python Web服务器内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: