产品比较

FastAPI Python(它如何为开发者工作)

发布 2024年九月29日
分享:

介绍

FastAPI是一个现代化的高性能网络框架,用于使用Python构建API。 它旨在易于使用和学习,同时提供强大的功能,如自动验证、序列化和自动交互式 API 文档。 此外,它可以与任何模板引擎一起使用,并允许您根据项目需要使用任何默认模板配置。

让我们深入了解详情 FastAPI、其功能以及如何有效使用它。 稍后在本文中,我们还将探讨 IronPDF 一个 PDF 生成 Python 软件包来自 铁软件(Iron Software).

FastAPI的主要功能

  1. 高性能:FastAPI 是最快的 Python 框架之一,由于其网页部分使用 Starlette 和数据部分使用 Pydantic,与 Node.js 和 Go 相当。

  2. 易用性:它被设计为直观的,以减少阅读文档所需的时间。 该框架利用标准的Python类型提示进行数据验证和序列化。

  3. 自动交互式文档:FastAPI 使用 OpenAPI 和 JSON Schema 自动生成交互式 API 文档,可以通过 /docs 访问。 (Swagger UI) 和 /redoc (ReDoc) 交互式 API 文档升级意味着此文档会自动更新。 替代API文档升级也将反映这一点。

  4. 编辑器支持:在VS Code等编辑器中提供卓越的代码补全和类型检查支持,加快开发速度并减少错误。

  5. 基于标准:它基于 (完全兼容) API 的开放标准:OpenAPI 和 JSON Schema。

安装

您可以安装FastAPI和 Uvicorn (ASGI 服务器) 使用 pip:

pip install fastapi
pip install "uvicorn[standard]"
pip install fastapi
pip install "uvicorn[standard]"
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'pip install fastapi pip install "uvicorn[standard]"
VB   C#

创建您的第一个 FastAPI 应用程序

以下是一个简单的示例,帮助您入门 FastAPI,并通过用户界面公开 Python 数据:

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
    return {"Hello": "World"}
@app.get("/items/{item_id}") # with query parameters
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
    return {"Hello": "World"}
@app.get("/items/{item_id}") # with query parameters
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}
from fastapi import FastAPI app = FastAPI() app.get("/") def read_root(): Return
If True Then
	"Hello": "World"
End If
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'@app.@get("/items/{item_id}") # @with query parameters def read_item(item_id: int, q: str = None): Return
'{
''INSTANT VB TODO TASK: The following line uses invalid syntax:
''	"item_id": item_id, "q": q}
VB   C#

要运行该应用程序,请使用Uvicorn:

uvicorn main:app --reload
uvicorn main:app --reload
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'uvicorn main:app --reload
VB   C#

此命令将启动一个开发服务器,并在代码更改时自动重新加载。 您可以在 http://127.0.0.1:8000/docs 访问交互式 API 文档。

高级功能

FastAPI 支持多种高级功能,使其适合复杂的应用程序:

  1. 依赖注入:FastAPI 提供了一个强大的依赖注入系统,使您能够清晰高效地管理依赖项。

  2. 后台任务:您可以定义在返回响应后运行的后台任务,这对于发送电子邮件或处理数据等任务很有用。

  3. WebSockets:FastAPI 支持 WebSockets,支持客户端和服务器之间的实时通信。

  4. 安全:FastAPI 包括处理安全的工具,包括 OAuth2、JWT 令牌等。

  5. 数据库集成:FastAPI 可以使用诸如 SQLAlchemy 或 Tortoise-ORM 这样库轻松集成到数据库中。

示例:构建CRUD API

让我们构建一个简单的CRUD (创建、读取、更新、删除) 用于管理项目的API。

  1. 定义数据模型
from pydantic import BaseModel
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
from pydantic import BaseModel
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'from pydantic import BaseModel class Item(BaseModel): name: str description: str = None price: float tax: float = None
VB   C#
  1. 创建 FastAPI 应用程序
from fastapi import FastAPI, HTTPException
app = FastAPI()
items = {}
@app.post("/items/")
def create_item(item: Item):
    item_id = len(items) + 1
    items[item_id] = item
    return item
@app.get("/items/{item_id}") # optional str query parameter
def read_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]
@app.put("/items/{item_id}") # with path parameters
def update_item(item_id: int, item: Item):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    items[item_id] = item
    return item
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    del items[item_id]
    return {"message": "Item deleted"}
from fastapi import FastAPI, HTTPException
app = FastAPI()
items = {}
@app.post("/items/")
def create_item(item: Item):
    item_id = len(items) + 1
    items[item_id] = item
    return item
@app.get("/items/{item_id}") # optional str query parameter
def read_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]
@app.put("/items/{item_id}") # with path parameters
def update_item(item_id: int, item: Item):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    items[item_id] = item
    return item
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    del items[item_id]
    return {"message": "Item deleted"}
404, detail="Item not found"
status_code=404, detail
404, detail="Item not found"
status_code=404, detail
404, detail="Item not found"
status_code=404, detail
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: from fastapi import FastAPI, HTTPException app = FastAPI() items = {} @app.post("/items/") def create_item(item: Item): item_id = len(items) + 1 items[item_id] = item return item @app.get("/items/{item_id}") # optional str query parameter def read_item(item_id: int): if item_id not in items: raise HTTPException(status_code=404, detail="Item not found") return items[item_id] @app.put("/items/{item_id}") # with path parameters def update_item(item_id: int, item: Item): if item_id not in items: raise HTTPException(status_code=404, detail="Item not found") items[item_id] = item return item @app.delete("/items/{item_id}") def delete_item(item_id: int): if item_id not in items: raise HTTPException(status_code=404, detail="Item not found") del items[item_id] return
item Return item app.get("/items/{item_id}") # [optional] str query parameter def read_item(item_id:= Integer): if item_id [not] in items: raise HTTPException(status_code) Return items(item_id) app.put("/items/{item_id}") # [with] path parameters def update_item(item_id: Integer, item: Item): if item_id [not] in items: raise HTTPException(status_code) items(item_id) = item Return item app.delete("/items/{item_id}") def delete_item(item_id: Integer): if item_id [not] in items: raise HTTPException(status_code) del items(item_id) Return
If True Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: from fastapi import FastAPI, HTTPException app = FastAPI() items = {} @app.post("/items/") def create_item(item: Item): item_id = len(items) + 1 items[item_id] = item return item @app.get("/items/{item_id}") # optional str query parameter def read_item(item_id: int): if item_id not in items: raise HTTPException(status_code) return items[item_id] @app.put("/items/{item_id}") # with path parameters def update_item(item_id: int, item: Item): if item_id not in items: raise HTTPException(status_code) items[item_id]
len(items) + 1 items(item_id) = item Return item app.get("/items/{item_id}") # [optional] str query parameter def read_item(item_id:= Integer): if item_id [not] in items: raise HTTPException(status_code) Return items(item_id) app.put("/items/{item_id}") # [with] path parameters def update_item(item_id: Integer, item: Item): if item_id [not] in items: raise HTTPException(status_code) items(item_id)
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: from fastapi import FastAPI, HTTPException app = FastAPI() items = {} @app.post("/items/") def create_item(item: Item): item_id = len(items) + 1 items[item_id]
{} app.post("/items/") def create_item(item:= Item): item_id = len(items) + 1 items(item_id)
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: from fastapi import FastAPI, HTTPException app = FastAPI() items = {} @app.post("/items/") def create_item(item: Item): item_id
FastAPI() items = {} app.post("/items/") def create_item(item:= Item): item_id
from fastapi import FastAPI, HTTPException app = FastAPI() items
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'	"message": "Item deleted"}
VB   C#

介绍IronPDF

FastAPI Python(如何为开发人员工作):图1

IronPDF 是一个功能强大的Python库,专为从HTML、CSS、图像和JavaScript创建、编辑和签署PDF而设计。 它提供商业级性能,同时占用较少的内存。 关键功能包括:

HTML 转换为 PDF

将HTML文件、HTML字符串和网址转换为PDF。 例如,使用Chrome PDF渲染器将网页渲染为PDF。

跨平台支持

兼容多种 .NET 平台,包括 .NET Core、.NET Standard 和 .NET Framework。 支持 Windows、Linux 和 macOS。

编辑和签署

设置属性,使用密码和权限添加安全性,并对您的PDF应用数字签名。

页面模板和设置

自定义PDF的页眉、页脚、页码以及可调节的边距。 支持响应式布局和自定义纸张尺寸。

标准合规性

符合PDF标准,如PDF/A和PDF/UA。 支持 UTF-8 字符编码,并处理图像、CSS 和字体等资产。

使用IronPDF和FastAPI生成PDF文档

pip install fastapi
pip install ironPDF
pip install fastapi
pip install ironPDF
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'pip install fastapi pip install ironPDF
VB   C#
from fastapi import FastAPI
from fastapi.responses import FileResponse
from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
app = FastAPI()
@app.get("/")
def read_root():
    return {"Hello": "IronPDF"}
@app.get("/items/{item_id}") # with query parameters
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}
@app.get("/pdf")
async def get_pdf(greet1: str = None,greet2: str = None):
    renderer = ChromePdfRenderer()
# Create a PDF from a HTML string using Python
    content = "<h1>Document Generated using IronPDF with fastapi GET</h1>"
    content += "<p> Demonstrate PDF generation using User Inputs"+"</p>"
    content += "<p>"+f"Greetings from: {greet1}"+"</p>"
    content += "<p>"+f"And Greetings from: {greet2}"+"</p>"
    pdf = renderer.RenderHtmlAsPdf(content)
    # Export to a file or Stream
    pdf.SaveAs("fastapi.pdf") 
    # To view the file in the browser, use "inline" for the media_type
    headers = {
        "Content-Disposition": "inline; filename=sample.pdf"
    }  
    # Create a FileResponse object with the file path, media type and headers
    response = FileResponse("fastapi.pdf", media_type="application/pdf", headers=headers)
    # Return the FileResponse object
    return response
from fastapi import FastAPI
from fastapi.responses import FileResponse
from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
app = FastAPI()
@app.get("/")
def read_root():
    return {"Hello": "IronPDF"}
@app.get("/items/{item_id}") # with query parameters
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}
@app.get("/pdf")
async def get_pdf(greet1: str = None,greet2: str = None):
    renderer = ChromePdfRenderer()
# Create a PDF from a HTML string using Python
    content = "<h1>Document Generated using IronPDF with fastapi GET</h1>"
    content += "<p> Demonstrate PDF generation using User Inputs"+"</p>"
    content += "<p>"+f"Greetings from: {greet1}"+"</p>"
    content += "<p>"+f"And Greetings from: {greet2}"+"</p>"
    pdf = renderer.RenderHtmlAsPdf(content)
    # Export to a file or Stream
    pdf.SaveAs("fastapi.pdf") 
    # To view the file in the browser, use "inline" for the media_type
    headers = {
        "Content-Disposition": "inline; filename=sample.pdf"
    }  
    # Create a FileResponse object with the file path, media type and headers
    response = FileResponse("fastapi.pdf", media_type="application/pdf", headers=headers)
    # Return the FileResponse object
    return response
#Apply your license key
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: from fastapi import FastAPI from fastapi.responses import FileResponse from ironpdf import * License.LicenseKey = "key" app = FastAPI() @app.get("/") def read_root(): return
"key" app = FastAPI() app.get("/") def read_root(): Return
If True Then
From fastapi import FastAPI From fastapi.responses import FileResponse From ironpdf import * License.LicenseKey = "key" app
	"Hello": "IronPDF"
End If
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'@app.@get("/items/{item_id}") # @with query parameters def read_item(item_id: int, q: str = None): Return
'{
'	"item_id": item_id, "q": q
'}
#Create a PDF from a HTML string using Python
	#Export to a file or Stream
	#To view the file in the browser, use "inline" for the media_type
	#Create a FileResponse object with the file path, media type and headers
	#Return the FileResponse object
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'@app.@get("/pdf") async def get_pdf(greet1: str = None,greet2: str = None): renderer = ChromePdfRenderer() content = "<h1>Document Generated using IronPDF with fastapi GET</h1>" content += "<p> Demonstrate PDF generation using User Inputs"+"</p>" content += "<p>"+f"Greetings from: {greet1}"+"</p>" content += "<p>"+f"And Greetings from: {greet2}"+"</p>" pdf = renderer.RenderHtmlAsPdf(content) pdf.SaveAs("fastapi.pdf") headers = { "Content-Disposition": "inline; filename=sample.pdf" } response = FileResponse("fastapi.pdf", media_type="application/pdf", headers=headers) Return response
VB   C#

代码解释

此代码片段演示了将IronPDF与FastAPI集成,以根据用户输入动态生成PDF文档并将其作为可下载响应提供。

  1. 设置许可证密钥: 应用IronPDF许可证密钥以启用其功能。

  2. FastAPI 初始化: 初始化一个 FastAPI 实例 (`应用`) 处理 HTTP 请求。3. 基本路由处理程序:`read_root()`: 在访问根 URL 时返回一个简单的 JSON 消息,表示“Hello IronPDF” (`/`). read_item()\: 接受一个 `item_id` 路径参数和一个可选的 `q` 查询参数。 返回包含这些函数参数的 JSON 响应。

  3. PDF 生成路线 (`/pdf`)获取_pdf()`:

    • 此异步函数处理对 /pdf 端点的 GET 请求,并带有可选的查询参数名。 (greet1greet2).
    • 构建一个HTML字符串 (`内容`) 包括:指明文件来源和目的的标题。 使用用户输入进行PDF生成的段落示例 (greet1greet2). 使用 `ChromePdfRenderer()` 从 IronPDF 将 HTML 内容渲染为 PDF (`pdf = renderer.RenderHtmlAsPdf(内容)`).
    • 将生成的 PDF 保存为 "fastapi.pdf" (pdf.SaveAs("fastapi.pdf")\).5. 提供PDF:
    • 配置响应头以指定 PDF 应在浏览器中内联查看 (`"Content-Disposition": "inline; filename=sample.pdf"`).
    • 创建一个指向生成的PDF文件并具有适当媒体类型的`FileResponse`对象。 ("application/pdf").
    • 返回`FileResponse`对象,当访问`/pdf`端点时,它会触发PDF文档的下载。

    以下代码片段展示了如何将IronPDF无缝集成到FastAPI中,以根据用户输入动态生成和提供PDF文档。 它展示了将 HTML 内容转换为 PDF 的能力,适合需要通过 HTTP 动态生成和传输文档的应用程序。

输出

以下显示了从API生成的Swagger输出

FastAPI Python(开发人员如何使用):图2

PDF

FastAPI Python(对开发者的工作原理):图 3

IronPDF 许可证

IronPDF 在 Python 中运行需要许可证密钥。 IronPDF for Python 提供一个 免费试用 许可密钥让用户在购买前体验功能。

在使用IronPDF软件包之前,将许可证密钥放在脚本的开头:

from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

结论

FastAPI 是一个功能强大且易于使用的框架,用于在Python中构建API。 FastAPI具有高性能、自动文档和高级功能,是初学者和经验丰富的开发者的绝佳选择。 无论您是在构建简单的 API 还是复杂的 Web 应用程序,FastAPI 都提供了您成功所需的工具。

IronPDF 是一个强大的Python库,用于从HTML内容创建、操作和渲染PDF文档。 它提供了将HTML转换为PDF、交互式表单创建、PDF操作等功能。 (合并、拆分)、文本提取。 非常适合轻松生成动态PDF并集成到各种Python应用程序中。

下一步 >
IronPDF for Python 与 PDFium Python 之间的比较

准备开始了吗? 版本: 2024.9 刚刚发布

免费 pip 安装 查看许可证 >