当前位置: 首页 > news >正文

【FastAPI 使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序】

在本文中,我们将介绍如何使用 FastAPI和uvicorn来同时运行HTTP和HTTPS的 Python应用程序。

简介

FastAPI是一个高性能的Web框架,可以用于构建快速、可靠的API。它基于Python的类型提示和异步支持,使得开发者可以轻松地编写出安全且高效的代码。而uvicorn是一个用于ASGI应用的服务器,它可以快速启动并运行Python应用程序。

准备工作

在开始之前,我们需要安装FastAPI和uvicorn。可以使用pip命令来安装它们:

pip install fastapi uvicorn

配置HTTP服务器

首先,我们需要创建一个Python文件,并导入所需的库和模块:

from fastapi import FastAPI

app = FastAPI()

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

在上述代码中,我们创建了一个FastAPI实例,并定义了一个根路径的路由。这个路由将接收GET请求,并返回一个包含”Hello: World”的JSON响应。

接下来,我们可以使用uvicorn来启动HTTP服务器,并监听一个指定的端口。例如,以下代码将在本地的8000端口上启动HTTP服务器:

uvicorn main:app --reload --port 8000

通过访问http://localhost:8000,您将看到”Hello: World”的响应。

配置HTTPS服务器

要配置HTTPS服务器,我们需要生成SSL证书。可以使用OpenSSL来生成自签名的证书。

首先,打开终端并执行以下命令以生成私钥:

openssl genrsa -out private.key 2048

然后,执行以下命令以生成CSR(证书签名请求):

openssl req -new -key private.key -out server.csr

接下来,执行以下命令以生成自签名的证书:

openssl x509 -req -days 365 -in server.csr -signkey private.key -out certificate.crt

现在,我们已经生成了私钥和证书文件。接下来,我们需要将它们放置在我们的Python项目中,并将其配置到uvicorn中。

在上述示例中,我们可以使用以下代码将证书和私钥加载到 FastAPI应用程序中:

import os

cert_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), "certificate.crt")
key_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), "private.key")

if os.path.isfile(cert_file) and os.path.isfile(key_file):
    app.certfile = cert_file
    app.keyfile = key_file

将以上代码添加到我们之前的示例中,并将FastAPI实例命名为app

现在,我们可以使用以下命令来启动HTTPS服务器,并监听一个指定的端口。例如,以下代码将在本地的8443端口上启动HTTPS服务器:

uvicorn main:app --reload --port 8443 --ssl-keyfile private.key --ssl-certfile certificate.crt

通过访问 https://localhost:8443,您将看到相同的”Hello: World”响应,并且浏览器将显示证书的有效性。

总结

在本文中,我们介绍了如何使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序。通过配置HTTP服务器和生成SSL证书,我们可以在快速和安全的环境中开发和部署Web应用程序。FastAPI和uvicorn的组合让我们能够轻松构建高性能的API,并提供强大的异步支持。希望这篇文章对你有所帮助!

原文链接

 

相关文章:

  • encodeURI(),encodeURIComponent()区别
  • 【Stable Diffusion模型测试】测试ControlNet,没有线稿图?
  • LLM应用开发(三)
  • 用php tp6对接钉钉审批流的 table 表格 明细控件 旧版sdk
  • BUU35 [DASCTF X GFCTF 2024|四月开启第一局]EasySignin 100 【gopher打mysql】
  • 【LeetCode】1. 两数之和
  • 【PHP的static】
  • day51 第十一章:图论part02
  • 基于Matlab实现六自由度机械臂正逆运动仿真(源码)
  • 单片机简介
  • 2025常用的SEO工具有哪些?
  • PyTorch Lightning多GPU分布式日志介绍
  • (Xshell 8 + Xftp 8)下载安装miniconda至服务器指定目录+配置虚拟环境
  • K8S容器启动提示:0/2 nodes are available: 2 Insufficient cpu.
  • CSS 小技巧 —— CSS 实现 Tooltip 功能-鼠标 hover 之后出现弹层
  • 二分查找sql时间盲注,布尔盲注
  • 【翻译+论文阅读】DeepSeek-R1评测:粉碎GPT-4和Claude 3.5的开源AI革命
  • Kubernetes 最佳实践:Top 10 常见 DevOps/SRE 面试问题及答案
  • RTD2775QT/RTD2795QT瑞昱显示器芯片方案
  • 21vue3实战-----git husky和git commit规范
  • 观察|本轮印巴冲突或促使印度空军寻求更先进战机
  • 浙能集团原董事长童亚辉被查,还是杭州市书法家协会主席
  • 专访|导演刘江:给谍战题材注入现实主义的魂
  • “救护车”半路加价?陕西卫健委已介入,记者调查:黑救护车挤占市场
  • 6连败后再战萨巴伦卡,郑钦文期待打出更稳定发挥
  • 山西省委常委李金科添新职