部署 Python FastAPI 应用程序进行渲染

python 框架的世界中,fastapi 是新生事物,也是构建 api 的绝佳选择。同样,对于想要在生产环境中免费快速测试应用程序的开发人员来说,render 是一个不错的选择。

在这篇文章中,我们将介绍如何将 fastapi 应用程序部署到渲染。首先,我们来探讨一下为什么开发者经常选择 fastapi 和 render。

为什么选择 fastapi?

fastapi 是一个高性能微框架,主要用于构建 api(线索就在名称中)。因此,与 django 和 flask 等较旧的、更知名的框架相比,fastapi 具有多种优势。

fastapi 第一个也是最明显的优势是它在构建时考虑了可扩展性和性能。

例如,fastapi 基于异步 asgi 服务器,而不是 django 和其他框架使用的旧版 wsgi。 asgi 服务器可以同时(并发)处理多个请求。对于需要处理高水平用户流量的应用程序来说,这通常被视为更好的选择。

立即学习“Python免费学习笔记(深入)”;

fastapi 还让开发者可以更轻松地编写异步代码,只需在定义异步函数时使用 async 关键字即可。

但是fastapi闪亮的“新鲜感”也是它的主要缺点。由于 fastapi 于 2018 年才推出,因此与更成熟的框架相比,fastapi 的社区要小得多,学习资源(例如编码教程)也更少。当您为下一个项目选择 fastapi 时,请记住这一点。

为什么要渲染?

对于想要在生产环境中免费快速测试其应用程序的开发人员来说,render 是一个不错的选择。

使用 render,您甚至无需输入信用卡详细信息即可访问免费套餐。因此,与其他云服务不同,没有办法错误地收取费用。

正如我们将在下面的部分中看到的,render 还提供了出色的整体开发人员体验,具有干净、非常易于使用的 ui 以及与 git 和 github 的平滑集成。额外的好处是,您在 render 上托管的任何应用程序都会立即获得免费的 tls 证书。

render 免费套餐的缺点是部署可能需要很长时间才能完成。一旦这开始成为问题,您可能需要考虑升级到付费计划之一。

创建 fastapi 演示应用程序

您可以查看、下载或克隆本文中使用的完整代码。

我们需要做的第一件事是创建一个空目录来存放我们的项目。我们称之为 fastapi-render-appsignal。

在终端中运行以下命令:

mkdir fastapi-render-appsignalcd flask-heroku-appsignaltouch main.py

项目的入口点将是 main.py.

接下来,我们需要在根目录中运行 git initialize 命令,使我们的项目成为 git 存储库:

git init

另外,在项目根目录下创建一个requirements.txt 文件。将这两行添加到文件中:

fastapiuvicorn[standard]

然后运行:

pip install -r requirements.txt

如果安装顺利,您应该在终端中看到以下输出:

installing collected packages: websockets, uvloop, typing-extensions, sniffio, pyyaml, python-dotenv, idna, httptools, h11, exceptiongroup, click, annotated-types, uvicorn, pydantic-core, anyio, watchfiles, starlette, pydantic, fastapisuccessfully installed annotated-types-0.6.0 anyio-4.2.0 click-8.1.7 exceptiongroup-1.2.0 fastapi-0.109.0 h11-0.14.0 httptools-0.6.1 idna-3.6 pydantic-2.5.3 pydantic-core-2.14.6 python-dotenv-1.0.1 pyyaml-6.0.1 sniffio-1.3.0 starlette-0.35.1 typing-extensions-4.9.0 uvicorn-0.27.0 uvloop-0.19.0 watchfiles-0.21.0 websockets-12.0

现在,在 main.py 中,复制并粘贴以下准系统样板代码:

from fastapi import fastapiapp = fastapi()@app.get("/")async def root():    return {"message": "hello world"}

让我们逐行解释一下这个简短的代码片段中所做的事情。

在 import 语句之后,我们创建 fastapi 类的实例并将其分配给变量 app。@app.get(“/”) 是一个 python 装饰器,它告诉 fastapi 通过 http get 方法在根 url /. 创建一个 api 端点async def root() 定义了一个名为 root 的异步函数。我们在这里使用 async 关键字,因为 fastapi 是为处理异步 i/o 操作而构建的。这意味着它可以处理并发请求,这对性能来说更好。在函数体中,我们返回一个 python 字典,fastapi 会帮助我们将其转换为 json。因此,当用户转到根/端点时,我们的 api 将自动使用 json 对象进行响应。

我们现在可以使用服务器包 uvicorn(我们之前安装的)通过以下命令运行我们的项目:

uvicorn main:app --reload

如果我们打开浏览器 http://127.0.0.1:8000,我们只会看到以下纯 json 响应:

{ "message": "hello world" }

但是如果我们在 url 末尾添加 /docs,我们就可以利用 fastapi 内置的交互式 api 文档功能。

下面截图中的文档ui由swagger ui提供:

部署 Python FastAPI 应用程序进行渲染

您还可以尝试 fastapi 自动包含的另一种文档 ui 样式。

在浏览器中输入网址http://127.0.0.1:8000/redoc。

这个是redoc提供的:

部署 Python FastAPI 应用程序进行渲染

在渲染上部署

这部分假设您已经在 github 上为此项目创建了一个存储库。如果您需要有关如何执行此操作的说明,请查看 github 的官方文档。

render 的优点之一是它提供了一种简单直观的方式来连接到 github 存储库。

首先,转到 render.com 并使用 render 创建一个新帐户(您可以使用 github 凭据来加快速度)。

然后单击新建 按钮并选择创建新网络服务的选项。

链接您的 github 帐户后,您应该看到下面的屏幕,其中提供了用于连接到 render 的 github 存储库列表。让我们选择我们的 fastapi-render-appsignal 示例项目。

部署 Python FastAPI 应用程序进行渲染

这将带我们进入主配置屏幕。在区域下,只需选择最接近您所在位置的区域(因为我在英国,所以我会选择法兰克福):

部署 Python FastAPI 应用程序进行渲染

在屏幕的更下方,我们有一些更重要的选项。

build 命令 将使用我们之前在项目中创建的requirements.txt 文件来将项目中的所有包安装到render 的远程服务器上。

start命令下,我们将在生产环境中再次使用uvicorn,并告诉render使用项目根目录中的main.py启动应用程序。

注意: 您必须明确告诉 render 要使用哪个主机和端口(与使用其他服务器(如gunicorn)不同)。不幸的是,任何官方渲染文档中都没有提到这一点,但我在渲染社区论坛和“将 fastapi 应用程序部署到渲染”帖子中找到了解决方案。

部署 Python FastAPI 应用程序进行渲染

接下来,在实例类型列表下选择免费选项:

部署 Python FastAPI 应用程序进行渲染

最后,在环境变量下,指定python版本为3.10.7。确保这与您在本地项目中使用的版本相同。

完成 web 服务配置后,现在我们只需单击

创建 web 服务 按钮并观看项目部署:

部署 Python FastAPI 应用程序进行渲染

请记住,这将需要一些时间,因为我们使用的是免费计划。

如果部署过程结束时一切顺利,我们应该在 render 日志中看到一条最终消息:

“您的服务已上线”.

部署 Python FastAPI 应用程序进行渲染

现在我们可以点击 render 为我们生成的公共链接,查看我们的

hello world fastapi 示例,包括 /docs 和 /redoc 处的自动文档链接:

部署 Python FastAPI 应用程序进行渲染

安装用于 fastapi 的 appsignal 仪表板并监控部署

很高兴我们现在有一个基本的 fastapi 应用程序正在运行并部署到 render,但是如果出现问题怎么办?即使有最好的手动和自动测试,现实情况是软件开发中也会出现错误和错误。关键是一旦发生错误就能收到警报,并快速找出代码中的问题所在。

在本教程的这一部分中,我们将专门研究如何启用 appsignal 来监控您的部署。这部分设置对于您查看哪些错误与特定部署相关至关重要。这将使您能够快速有效地诊断和修复应用程序中的问题。

首先,注册一个 appsignal 帐户(您可以免费试用 30 天,无需信用卡详细信息)。

接下来,将 appsignal 和 opentelemetry-instrumentation-fastapi 添加到您的 requests.txt 文件中:

# requirements.txtappsignalopentelemetry-instrumentation-fastapi

然后运行:

pip install -r requirements.txt

现在我们需要创建一个appsignal.py配置文件并添加以下代码:

import osimport subprocessfrom appsignal import appsignalfrom dotenv import load_dotenvload_dotenv()revision = nonetry:    revision = subprocess.check_output(        "git log --pretty=format:'%h' -n 1", shell=true    ).strip()except subprocess.calledprocesserror:  passappsignal = appsignal(    active=true,    name="fastapi-render-appsignal",    push_api_key=os.getenv("appsignal_api_key"),    revision=revision,)

在上面的代码中,我们使用几个不同的参数初始化appsignal对象,包括:

将 active 设置为 true 以启用监控。提供我们的应用程序的名称。将 api 密钥放入环境变量中。但是启用部署跟踪的关键参数是修订参数。在 try-except 块内(appsignal 初始化代码上方),我们获取最新的提交哈希,以便 appsignal 可以跟踪我们的部署。

最后,我们需要更新 main.py 以完成 fastapi 应用中 appsignal 的设置:

# main.pyfrom fastapi import fastapifrom opentelemetry.instrumentation.fastapi import fastapiinstrumentor #newimport appsignal #newappsignal.start() #newapp = fastapi()@app.get("/")async def root():    return {"message": "hello world"}@app.get("/items/{item_id}")async def get_item(item_id: int):    return {"item_id": item_id}fastapiinstrumentor().instrument_app(app) #new

当我们查看 appsignal 仪表板时,我们首先看到的是

入门 屏幕,它将提供一些有关需要完成的其他配置步骤的建议:

部署 Python FastAPI 应用程序进行渲染

但是这里我们只关注确保 appsignal 可以跟踪我们的部署。

转到 appsignal 仪表板中的

组织页面,然后单击组织设置以激活 appsignal 与 github 的集成。查看 appsignal 关于链接您的存储库的官方文档以获取分步说明。

设置 github 集成并链接您的存储库后,您现在需要做的就是在 render for appsignal 中触发部署以开始监控您的部署。

在我们的例子中,我们只需推送到我们的主分支:

git push origin main

如果一切设置正确,我们应该在仪表板的

deploys部分中看到 appsignal 跟踪我们的部署以及与每个部署提交哈希相关的任何错误:

deploys screen in appsignal dashboard

就是这样!

包起来

在本指南中,我们涵盖了很多内容!首先我们简单介绍一下选择fastapi和render的一些优缺点。

然后,我们创建了一个简单的 fastapi 应用程序,将其部署到 render,最后通过使用 appsignal 监控这些部署来结束。

快乐编码!

p.s.如果您想在 python 文章发布后立即阅读,请订阅我们的 python wizardry 时事通讯,不错过任何一篇文章!

以上就是部署 Python FastAPI 应用程序进行渲染的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1348000.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
建立 ORM 研讨会
上一篇 2025年12月13日 11:39:49
Python 列表理解初学者指南
下一篇 2025年12月13日 11:39:58

相关推荐

  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    100
  • 利用海象运算符简化条件赋值:Python教程与最佳实践

    本文旨在探讨Python中海象运算符(:=)在条件赋值场景下的应用。通过对比传统if/else语句与海象运算符,以及条件表达式,分析海象运算符在简化代码、提高可读性方面的优势与局限性。并通过具体示例,展示如何在列表推导式等场景下合理使用海象运算符,同时强调其潜在的复杂性及替代方案,帮助开发者更好地掌…

    2026年5月10日
    100
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • Python递归函数追踪与性能考量:以序列打印为例

    本文深入探讨了Python中一种递归打印序列元素的方法,并着重演示了如何通过引入缩进参数来有效追踪递归函数的执行流程和参数变化。通过实际代码示例,文章揭示了递归调用可能带来的潜在性能开销,特别是对调用栈空间的需求,以及Python默认递归深度限制可能导致的错误,为读者提供了理解和优化递归算法的实用见…

    2026年5月10日
    000
  • python中zip函数详解 python多序列压缩zip函数应用场景

    zip函数的应用场景包括:1) 同时遍历多个序列,2) 合并多个列表的数据,3) 数据分析和科学计算中的元素运算,4) 处理csv文件,5) 性能优化。zip函数是一个强大的工具,能够简化代码并提高处理多个序列时的效率。 在Python中,zip函数是一个非常有用的工具,它能够将多个可迭代对象打包成…

    2026年5月10日
    000
  • 谷歌浏览器如何截图 谷歌浏览器页面截图技巧

    谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧

    使用谷歌浏览器的开发者工具截图步骤:1. 按ctrl+shift+i(windows/linux)或cmd+option+i(mac)打开开发者工具。2. 点击右上角三个点,选择”更多工具”,再选择”截图”。3. 选择截取整个页面。推荐的谷歌浏览器扩展…

    2026年5月10日 用户投稿
    100
  • Python中怎样使用pymongo?

    在python中使用pymongo可以轻松地与mongodb数据库进行交互。1)安装pymongo:pip install pymongo。2)连接到mongodb:from pymongo import mongoclient; client = mongoclient(‘mongod…

    2026年5月10日
    000
  • JavaScript计算器开发:解决数值显示与初始化问题

    本教程深入探讨了使用JavaScript构建计算器时常见的数值显示异常问题,特别是由于类属性未初始化导致的`Cannot read properties of undefined`错误。我们将详细分析问题根源,并通过在构造函数中调用初始化方法来解决该问题,同时优化显示逻辑,确保计算器功能稳定且界面显…

    2026年5月10日
    000
  • Python 函数参数类型:如何使用可变参数和动态参数?

    python 中的参数类型:关键词参数、可变参数和动态参数 在 python 中,函数的参数可以分为以下几种类型: 关键词参数(kw)**:这些参数具有名称,并且在调用函数时明确指定。可变参数(*args):这些参数没有名称,允许函数接受任意数量的位置参数。它们将被收集到一个元组中。动态参数(kwa…

    2026年5月10日
    000
  • NextAuth getToken 在服务端返回 null 的问题排查与解决

    问题描述 在使用 Next.js 和 NextAuth 构建应用程序时,有时需要在服务端获取用户的身份验证信息。getToken 函数是 NextAuth 提供的一个便捷方法,用于从请求中提取 JWT (JSON Web Token)。然而,在某些情况下,尤其是在使用 getServerSidePr…

    2026年5月10日
    000
  • pycharm解析器怎么添加 解析器添加详细流程

    在pycharm中添加解析器的步骤包括:1) 打开pycharm并进入设置,2) 选择project interpreter,3) 点击齿轮图标并选择add,4) 选择解析器类型并配置路径,5) 点击ok完成添加。添加解析器后,选择合适的类型和版本,配置环境变量,并利用解析器的功能提高开发效率。 在…

    2026年5月10日
    000
  • python中numpy的用法

    NumPy是Python中用于科学计算的强大库,它提供了以下功能:多维数组处理矩阵运算快速傅里叶变换(FFT)线性代数随机数生成 NumPy在Python中的强大功能 NumPy是Python中用于科学计算的一个强大且灵活的库。它提供了用于处理多维数组和矩阵的一组高效工具,是数据分析和机器学习项目的…

    2026年5月10日
    100
  • HTML文档如何工作?如何编辑HTML格式文件?

    HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?

    浏览器解析和渲染html的过程包括:1. 解析html构建dom树;2. 结合css构建渲染树;3. 布局计算元素位置;4. 绘制像素到屏幕。编辑html可使用记事本、vs code、sublime text等文本或代码编辑器,其中vs code因语法高亮、自动补全和插件生态成为主流选择。标准htm…

    2026年5月10日 用户投稿
    000
  • GolangWeb项目异常捕获与日志记录

    答案:通过中间件使用defer和recover捕获panic,结合zap等结构化日志库记录请求链路信息,为每个请求生成trace ID,实现异常捕获与可追踪日志,提升系统稳定性与可观测性。 在Go语言Web项目中,异常捕获与日志记录是保障系统稳定性和可维护性的关键环节。Go本身没有像其他语言那样的t…

    2026年5月10日
    000
  • python如何捕获所有类型的异常_python try except捕获所有异常的方法

    答案:捕获所有异常推荐使用except Exception as e,可捕获常规错误并记录日志,避免影响程序正常退出;需拦截系统信号时才用except BaseException as e。 在Python中,要捕获所有类型的异常,最常见且推荐的方法是使用 except Exception as e…

    2026年5月10日
    000
  • python中f怎么用

    f-字符串是 Python 3.6 中引入的格式化字符串语法糖,提供了简洁且安全的方式来插入表达式和变量。f-字符串以字符串前缀 f 为标志,使用大括号包含表达式或变量。f-字符串支持条件表达式和格式规范符,提供了更大的灵活性、安全性、可读性和易维护性。 在 Python 中使用 f-字符串 f-字…

    2026年5月10日
    100
  • 怎么在手机上把XML文件转换为PDF?

    不可能直接在手机上用单一应用完成 XML 到 PDF 的转换。需要使用云端服务,通过两步走的方式实现:1. 在云端转换 XML 为 PDF,2. 在手机端访问或下载转换后的 PDF 文件。 怎么在手机上把XML文件转换为PDF? 这问题问得好,比直接问“怎么转换”有深度多了!因为它触及了移动端环境的…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信