FastApi如何快速构建一个web项目的实现

FastAPI 是一个基于 asyncio 和 pydantic 的现代化 Web 框架,提供了快速开发高性能且易于扩展的 API 工具。适合用于构建现代高性能 Web 服务 API、机器学习应用等等场景。下面将详细讲解如何使用FastAPI快速构建一个Web项目的实现。

一. 安装FastAPI

FastAPI可以通过pip安装,安装FastAPI的同时也会自动安装uvicorn,这是一个一款轻量级的Python ASGI服务器,用于部署FastAPI应用程序。

pip install fastapi

二. 创建一个新项目

使用FastAPI创建一个新项目非常方便,只需要创建一个文件并且引入FastAPI即可。下面是一个最简单的例子:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def index():
    return {"message": "Hello World"}
  • 引入FastAPI并创建一个FastAPI实例;
  • 使用装饰器@app.get()指定路由路径和HTTP请求方法;
  • 定义一个异步函数index(),对请求进行处理;
  • 发回一个JSON格式的响应。

使用命令uvicorn main:app --reload运行程序,访问http://127.0.0.1:8000即可看到运行结果。

三. 添加路由

对于一个Web项目而言,路由非常重要。FastAPI提供了装饰器@app.route()@app.get(),来指定支持的URL路由和HTTP请求方法。

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def index():
    return {"message": "Hello World"}

@app.get("/items/{id}")
async def read_item(id: int):
    return {"id": id, "name": "Sample Item"}

这里定义了两个路由:一个是/,一个是/items/{id}。后者中{id}是一个路由参数,使用int表示参数的类型是整数。在代码中接收到的参数将自动的转换为整数,如果参数类型不匹配会返回400错误。

四. 符合规范的请求体

在许多场景下,请求需要包含一些输入数据,比如,用户表单提交,或者发送到 Web 服务的 JSON 数据。在 FastAPI 中,已经可以通过包含参数来处理这样的输入数据,但是如果我们要发送一个大型的JSON数据,可以使用pydantic.BaseModel

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    is_offer: Optional[bool] = None

@app.post("/items/")
async def create_item(item: Item):
    item_dict = item.dict()
    if item.is_offer:
        item_dict.update({"message": "Special offer"})
    return item_dict

BaseModel是pydantic库提供的一个与FastAPI紧密集成的数据验证工具,可以用来定义API的输入和输出类型。在上面的示例中,我们使用pydantic.BaseModel定义了一个数据模型Item,其中包含名称、价格和是否优惠等字段,is_offer是个可选的布尔型参数。app.post()用来指定HTTP请求的方法为POST。

五. 添加文档

FastAPI自带OpenAPI和JSON Schema支持,可以自动为API生成详细可读的文档。

from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    is_offer: Optional[bool] = None

@app.post("/items/")
async def create_item(item: Item):
    item_dict = item.dict()
    if item.is_offer:
        item_dict.update({"message": "Special offer"})
    return item_dict

@app.get("/")
async def index():
    return {"message": "Hello World"}

@app.get("/items/{id}")
async def read_item(id: int):
    return {"id": id, "name": "Sample Item"}

# 1. 添加文档
@app.get("/docs")
async def get_docs():
    return {"message": "Docs"}

# 2. 添加API版本
@app.get("/v1/items/{id}")
async def read_item_v1(id: int):
    return {"id": id, "name": "Sample Item"}

在上面的代码里,我们针对/docs路径定义一个路由,直接返回文档。 FastAPI 的自动文档工具将扫描路由映射并生成相应的文档页面。

六. 添加中间件

中间件通常是一些可以在 HTTP 请求处理过程中执行的拦截器。 FastAPI 提供了一个很方便的中间件系统,我们只需要通过 FastAPI 的 API 即可添加中间件。

from fastapi import FastAPI, Request

app = FastAPI()

# 1. 添加中间件
@app.middleware("http")
async def add_custom_header(request: Request, call_next):
    response = await call_next(request)
    response.headers["X-Custom-Header"] = "demo"
    return response

# 2. 添加路由
@app.get("/")
async def index():
    return {"message": "Hello World"}

@app.get("/items/{id}")
async def read_item(id: int):
    return {"id": id, "name": "Sample Item"}

第一步,我们定义了一个中间件函数add_custom_header(),此中间件会在处理 HTTP 请求时拦截请求和响应。其中call_next()则是调用下一个中间件或路由处理程序,这个函数必须在中间件之后使用。在函数中,我们向 HTTP 响应 header 添加了一个自定义的 X-Custom-Header 头部。

第二步,我们定义了两个路由,其中一个是根路径,一个是一个动态路径。

七. 实例一

接下来,我们使用这个框架来完成一个表单提交的应用。

from fastapi import FastAPI, Request, Form
from fastapi.responses import HTMLResponse

app = FastAPI()

# 中间件,拦截请求和响应
@app.middleware("http")
async def add_custom_header(request: Request, call_next):
    response = await call_next(request)
    response.headers["X-Custom-Header"] = "demo"
    return response

# 返回Home页面
@app.get("/", response_class=HTMLResponse)
async def home():
    html_content = """
    <html>
        <head>
            <title>FastAPI Form</title>
        </head>
        <body>
            <form action="/form" method="post">
                <label>Name: <input type="text" name="name"></label>
                <br>
                <label>Email: <input type="email" name="email"></label>
                <br>
                <input type="submit" value="Submit">
            </form>
        </body>
    </html>
    """
    return html_content

# 表单提交路由
@app.post("/form")
async def submit_form(name: str = Form(...), email: str = Form(...)):
    return {"message": f"{name} Submitted successfully with {email}"}

使用命令uvicorn main:app --reload启动程序,访问 http://localhost:8000 即可看到页面。填写表单后点击提交,数据将提交到路由/form进行处理,并返回一个JSON数据,展示了提交的名字和电子邮件地址。

八. 实例二

下面这个例子是一个计算器应用,包含两个接口:加法和减法。

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class CalcRequest(BaseModel):
    first: int
    second: int

class CalcResult(BaseModel):
    result: int

# 加法接口
@app.post("/add", response_model=CalcResult)
async def add(req: CalcRequest):
    return CalcResult(result=req.first + req.second)

# 减法接口
@app.post("/sub", response_model=CalcResult)
async def subtract(req: CalcRequest):
    return CalcResult(result=req.first - req.second)

CalcRequest类是输入数据的数据类型,它定义了两个整数数据firstsecondCalcResult是输出数据的数据类型,它只包含一个字段result,表示计算结果。

两个路由都使用了@app.post()装饰器,DataFrame中定义的数据模型作为第一个参数进行传递。输出模型从CalcResult中指定,以确保输出结果合规。

使用命令uvicorn main:app --reload运行程序,访问 http://127.0.0.1:8000/add 和 http://127.0.0.1:8000/sub 即可看到运行结果。

以上就是关于使用FastAPI快速构建Web项目的实现过程。FastAPI提供了便捷快速的开发API的方式,支持自动文档和JSON schema生成等,可以极大提高开发效率,推荐大家使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:FastApi如何快速构建一个web项目的实现 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Python Flask中Cookie和Session区别详解

    下面我为你详细讲解“Python Flask中Cookie和Session区别详解”的攻略,包含两个示例说明。 Cookie和Session的基本概念 在Flask开发中,Cookie和Session是两个经常使用的概念。Cookie是保存在客户端的记录,而Session是保存在服务器端的记录,通过Cookie来实现客户端和服务器端之间的信息传递。 Cook…

    Flask 2023年5月16日
    00
  • 用Python的Flask框架结合MySQL写一个内存监控程序

    要用Python的Flask框架结合MySQL写一个内存监控程序,需要完成以下步骤: 安装Flask和MySQL模块 在命令行中输入以下命令: pip install Flask pip install mysql-connector-python 创建MySQL数据库 在MySQL中创建一个名为“memory_monitor”的数据库,并在其中创建一个名为…

    Flask 2023年5月16日
    00
  • jsp留言板源代码二: 给jsp初学者.

    我们来解析一下 “jsp留言板源代码二: 给jsp初学者.” 这篇文章的内容和示例。 1. 简介 该文章主要介绍了如何使用 JSP 技术开发一个简单的留言板,适合初学者练手。该留言板实现了基本的留言功能,用户可以添加留言,管理员可以浏览留言,并且可以删除不当的留言。 2. 留言板示例1 这个示例主要介绍了如何创建一个简单的留言板页面,包含了用户的留言和管理员…

    Flask 2023年5月16日
    00
  • Python的Flask框架与数据库连接的教程

    下面我将详细讲解如何用Python的Flask框架连接数据库的完整攻略。这个过程中会包含两个示例,分别是连接MySQL和连接SQLite。 1. 安装Flask和数据库连接驱动 在开始之前,需要确保已经安装了Python和pip,并且通过pip安装了Flask和要连接的数据库的相应驱动。我们以连接MySQL和SQLite为例,分别需要安装pymysql和sq…

    Flask 2023年5月15日
    00
  • Python的Flask框架标配模板引擎Jinja2的使用教程

    好的。以下是“Python的Flask框架标配模板引擎Jinja2的使用教程”的完整攻略: 什么是Jinja2 Jinja2是Flask框架默认的模板引擎。它是一个基于Python的高级模板引擎,它的设计初衷是为了和Flask框架紧密结合,因此其语法与Python非常相似。 Jinja2支持继承、过滤器、变量、控制结构等常见的模板引擎功能。同时也支持自定义过…

    Flask 2023年5月15日
    00
  • 在Python程序和Flask框架中使用SQLAlchemy的教程

    以下是关于在Python程序和Flask框架中使用SQLAlchemy的完整攻略。 一、什么是SQLAlchemy SQLAlchemy 是一个 Python 的 SQL 工具和 ORM 框架。它通过 SQL 表达式和对象关系映射来支持数据库交互。 它提供了一致的 SQL 表达式语言,以及自定义对象关系映射(ORM)APIs。 二、在Python程序中使用S…

    Flask 2023年5月15日
    00
  • 微信小程序前端如何调用python后端的模型详解

    “微信小程序前端如何调用python后端的模型”需要通过Web API的方式进行调用。下面是详细的步骤: 步骤1:设计后端Web API 后端Web API实现了模型的调用,并输出模型结果。可以使用Flask或Django等框架来实现Web API。以下是一个用Flask编写的Web API的示例代码: from flask import Flask, re…

    Flask 2023年5月16日
    00
  • python3 flask实现文件上传功能

    下面我将为你详细讲解“Python3 Flask 实现文件上传功能”的完整攻略。 1. 确定上传文件的保存路径 在 Flask 中,我们可以通过设置 app.config 来确定上传文件的保存路径。一般来说,我们建议将上传文件保存在外部的文件夹中,而不要与 Flask 应用程序的代码混淆。 下面是一个设置上传文件保存路径的代码示例: import os fr…

    Flask 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部