FastAPI从入门到实战(3)——Hello World(安装与运行)

2023-10-29

本文详细记录FastAPI本地的安装和运行,都很简单,主要记录验证一些特性。

安装FastAPI

安装就非常简单,只需要安装两个包就行:

  • FastAPI
pip install fastapi
  • uvicorn——用于加载和提供应用程序的服务器。
pip install uvicorn

创建项目

  • 在pycharm 2022版里面可以直接创建FastAPI项目,不知道其他版本可不可以,直接创建就行;

如果没有的话也不要慌,创建一个空项目就行。

在main.py文件内粘贴如下代码就行:

from fastapi import FastAPI

app = FastAPI()

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

  • 运行项目

    第一种就是pycharm创建的项目,直接运行就行

    image-20221123173532349

    还有一种就是直接创建的,在终端输入运行命令uvicorn main:app --reload即可

    image-20221123173650460

  • 查看运行效果:http://127.0.0.1:8000/

image-20221123173830594

输出JSON数据,就搭建成功了。

交互式API文档

打开http://127.0.0.1:8000/docs就能看到自动生成的交互式 API 文档(由 Swagger UI 提供):

image-20221123174001972

可选的API文档

前往http://127.0.0.1:8000/redoc就能看到可选的自动生成文档 (由 ReDoc 提供):

image-20221123174154120

源码解析

from fastapi import FastAPI

导入fastapi的包

app = FastAPI()

创建一个FastAPI实例

这里的变量 app 会是 FastAPI 类的一个「实例」。

这个实例将是创建你所有 API 的主要交互对象。

这个 app 同样在命令中被 uvicorn 所引用:uvicorn main:app --reload

@app.get("/")

告诉 FastAPI 在它下方的函数负责处理如下访问请求:

  • 路径为/
  • 使用get请求方法

@something 语法在 Python 中被称为「装饰器」,装饰器接收位于其下方的函数并且用它完成一些工作。

常见的路径操作装饰器:

@app.post("/")
@app.put("/")
@app.delete("/")
@app.get("/")
@app.options("/")
@app.head("/")
@app.patch("/")
@app.trace("/")
async def root():
    return {"message": "Hello World"}
async def root():
    return {"message": "Hello World"}

async定义一个异步的函数,每次请求/都会被调用,并返回{"message": "Hello World"}

配置项

主要是一些基本的配置项,比如两个API地址的访问地址,文档标题与简介等。这些就可以直接看源码:

class FastAPI(Starlette):
    def __init__(
        self,
        *,
        debug: bool = False,
        routes: Optional[List[BaseRoute]] = None,
        title: str = "FastAPI",
        description: str = "",
        version: str = "0.1.0",
        openapi_url: Optional[str] = "/openapi.json",
        openapi_tags: Optional[List[Dict[str, Any]]] = None,
        servers: Optional[List[Dict[str, Union[str, Any]]]] = None,
        dependencies: Optional[Sequence[Depends]] = None,
        default_response_class: Type[Response] = Default(JSONResponse),
        docs_url: Optional[str] = "/docs",
        redoc_url: Optional[str] = "/redoc",
        swagger_ui_oauth2_redirect_url: Optional[str] = "/docs/oauth2-redirect",
        swagger_ui_init_oauth: Optional[Dict[str, Any]] = None,
        middleware: Optional[Sequence[Middleware]] = None,
        exception_handlers: Optional[
            Dict[
                Union[int, Type[Exception]],
                Callable[[Request, Any], Coroutine[Any, Any, Response]],
            ]
        ] = None,
        on_startup: Optional[Sequence[Callable[[], Any]]] = None,
        on_shutdown: Optional[Sequence[Callable[[], Any]]] = None,
        terms_of_service: Optional[str] = None,
        contact: Optional[Dict[str, Union[str, Any]]] = None,
        license_info: Optional[Dict[str, Union[str, Any]]] = None,
        openapi_prefix: str = "",
        root_path: str = "",
        root_path_in_servers: bool = True,
        responses: Optional[Dict[Union[int, str], Dict[str, Any]]] = None,
        callbacks: Optional[List[BaseRoute]] = None,
        deprecated: Optional[bool] = None,
        include_in_schema: bool = True,
        swagger_ui_parameters: Optional[Dict[str, Any]] = None,
        generate_unique_id_function: Callable[[routing.APIRoute], str] = Default(
            generate_unique_id
        ),
        **extra: Any,
    )

参数还是比较清晰的,比如是否开启debug模式、标题、简介、版本等等,简单配置如下:

app = FastAPI(
    title='FastAPI Study',
    description='FastAPI教程',
    version='1.0.0',
    docs_url='/docs',
    redoc_url='/redocs',
)

效果图:

本等等,简单配置如下:

app = FastAPI(
    title='FastAPI Study',
    description='FastAPI教程',
    version='1.0.0',
    docs_url='/docs',
    redoc_url='/redocs',
)

效果图:

image-20221124161800866

感谢阅读!
博客链接:https://blog.jiumoz.com/archives/fastapi-cong-ru-men-dao-shi-zhan-3helloworld

欢 迎 关 注 博 主 个 人 小 程 序!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastAPI从入门到实战(3)——Hello World(安装与运行) 的相关文章

  • Python 中的字节数组

    如何在 Python 中表示字节数组 如 Java 中的 byte 我需要用 gevent 通过网络发送它 byte key 0x13 0x00 0x00 0x00 0x08 0x00 在Python 3中 我们使用bytes对象 也称为s
  • Flask+Nginx+uWSGI:导入错误:没有名为站点的模块

    我安装为http www reinbach com uwsgi nginx flask virtualenv mac os x html http www reinbach com uwsgi nginx flask virtualenv
  • 如何使用 pyinstaller 包含文件?

    我也使用 tkinter 使用 python 3 7 编写了一个程序 由于我使用的是外部图片 因此当我将所有内容编译为一个 exe 时 我需要包含它们 我试过做 add data bg png files 但我仍然收到此错误 tkinter
  • Kivy - 文本换行工作错误

    我正在尝试在 Kivy 1 8 0 应用程序中换行文本 当没有太多文字时 一切正常 但如果文本很长并且窗口不是很大 它只是剪切文本 这是示例代码 vbox BoxLayout orientation vertical size hint y
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 根据开始列和结束列扩展数据框(速度)

    我有一个pandas DataFrame含有start and end列 加上几个附加列 我想将此数据框扩展为一个时间序列 从start值并结束于end值 但复制我的其他专栏 到目前为止 我想出了以下内容 import pandas as
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • 为什么我无法在 Mac OS X Terminal.app 上的 Python 解释器中显示 unicode 字符?

    如果我尝试粘贴 unicode 字符 例如中间的点 在我的 python 解释器中它什么也不做 我在 Mac OS X 上使用 Terminal app 当我只是在 bash 中时 我没有遇到任何问题 但在解释器中 python Pytho
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 动态 __init_subclass__ 方法的参数绑定

    我正在尝试让类装饰器工作 装饰器会添加一个 init subclass 方法到它所应用的类 但是 当该方法动态添加到类中时 第一个参数不会绑定到子类对象 为什么会发生这种情况 举个例子 这是可行的 下面的静态代码是我试图最终得到的示例 cl
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • Pandas style.bar 颜色基于条件?

    如何渲染其中一列的 Pandas dfstyle bar color属性是根据某些条件计算的 Example df style bar subset before after color ff781c vmin 0 0 vmax 1 0 而
  • 如何将回溯/sys.exc_info() 值保存在变量中?

    我想将错误名称和回溯详细信息保存到变量中 这是我的尝试 import sys try try print x except Exception ex raise NameError except Exception er print 0 s
  • 是否可以将 pd.Series 分配给无序 pd.DataFrame 中的列而不映射到索引(即不重新排序值)?

    在 Pandas 中创建或分配新列时 我发现了一些意外的行为 当我对 pd DataFrame 进行过滤或排序 从而混合索引 然后从 pd Series 创建新列时 Pandas 会重新排序该系列以映射到 DataFrame 索引 例如 d
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但
  • 如何循环遍历字典列表并打印特定键的值?

    我是 Python 新手 有一个问题 我知道这是一个非常简单的问题 运行Python 3 4 我有一个需要迭代并提取特定信息的列表 以下是列表 称为部分 的示例 已截断 数千个项目 state DEAD id phwl type name
  • 如何为所有用户安装 Anaconda python?

    Anaconda python 发行版 https store continuum io cshop anaconda 非常方便地部署科学计算环境 SCE 并根据需要切换python版本 默认情况下 安装会将 python 定位到 anac
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X

随机推荐

  • 程序员必须知道的十大算法之 快速排序

    快速排序是由东尼 霍尔所发展的一种排序算法 在平均状况下 排序 n 个项目要 nlogn 次比较 在最坏状况下则需要 n2 次比较 但这种状况并不常见 事实上 快速排序通常明显比其他 nlogn 算法更快 因为它的内部循环 innerloo
  • 设计原则与思想:总结课

    文章目录 设计原则与思想 总结课 总结回顾面向对象 设计原则 编程规范 重构技巧等知识点 一 代码质量评判标准 如何评价代码质量的高低 最常用的评价标准有哪几个 如何才能写出高质量的代码 二 面向对象 三 设计原则 四 规范与重构 常见的
  • Win10防止Windows安全中心(Windows Defender)乱删文件

    Windows Defender乱删文件着实让人哭笑不得 还好它还有个排除项 不然只能安个杀毒软件接管它了 点击 开始 点击 设置 开始上面的齿轮图标 打开Windows设置 点击最下面的 更新和安全 点击 Windows安全中心 点击右侧
  • mock详细教程入门这一篇就够了

    1 什么是mock测试 1 png Mock测试就是在测试活动中 对于某些不容易构造或者不容易获取的比较复杂的数据 场景 用一个虚拟的对象 Mock对象 来创建用于测试的测试方法 2 为什么要进行Mock测试 Mock是为了解决不同的单元之
  • day2-ARM处理器概述

    指令集 指令 能够指示处理器执行某种运算的命令称为指令 指令在内存中以机器码 二进制 的方式存在 每一条指令都对应一条汇编 程序是指令的有序集合 指令集 处理器能识别的指令的集合称为指令集 不同架构的处理器指令集不同 指令集是处理器对开发者
  • [915]ElasticSearch设置用户名密码

    1 需要在配置文件中开启x pack验证 修改config目录下面的elasticsearch yml文件 在里面添加如下内容 并重启 xpack security enabled true xpack license self gener
  • javascript练习题之给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

    示例 输入 2 2 1 输出 1 解析一 通过循环来判断每个数出现的次数 然后将次数为1的数输出 var singleNumber function nums 声明一个空对象用于记录 var obj for var i 0 i
  • JVM学习1_ javac编译器源码编译及分析

    javac编译器是纯java代码编写的 用来把 java文件编译成二进制 class文件 一 获取javac编译器源码 github下载jdk源码 jdk源码中包含javac编译器源码 hotspot虚拟机等 下载地址 https gith
  • BGP双平面

    实验要求 1 合理IP地址 2 AS 1 2 3 内部使用OSPF 协议 AS 1 AS 2内部建立全互联的IBGP邻居 AS之间建立全 部的EBGP邻居 3 PC 1 3 5 属于电信的路由 通信时必须使用电信AS 1 PC 2 4 6
  • Java配置,mysql双数据源 读写分离

    大致思路 创建用于标志数据源的自定义注解 通过配置切面 在操作数据库的方法之前 扫描该方法的注解所配置的数据源名称 将名称存储在一个代表当前线程变量工具类 创建AbstarctRoutingDataSource子类DynamicDataSo
  • geoserver+mysql+openlayers问题点

    1 tomcat下部署geoserver解决跨域访问问题 报错 Access to XMLHttpRequest at http localhost 8900 geoserver cite ows service WFS version 1
  • 如何使用ssh密钥的方式实现无密码scp传输文件

    一 什么是SSH公钥 私钥 在介绍如何使用SSH密钥的方式实现无密码SCP传输文件之前 我们先来了解一下什么是SSH公钥 私钥 SSH公钥和私钥是一对密钥 用于加密您的登录信息和授权您的访问 公钥存储在服务器上 私钥存储在您的本地电脑上 当
  • MobilenetV1、V2、V3系列详解

    Mobilenet系列模型作为当前主流的端侧轻量级模型被广泛应用 很多算法都会使用其作为backbone提取特征 这一章对Mobilenet系列模型做一个总结 一 MobilnetV1 MobilenetV1提出了深度可分离卷积 Depth
  • 正确使用STL-MAP中Erase函数 一切尽在代码中。

    include
  • A Comprehensive Survey on Graph Neural Networks

    本文是对 A Comprehensive Survey on Graph Neural Networks 论文的一个翻译 主要针对文字部分 插图和表格不添加 需要请看原论文 图神经网络综述 摘要 1 引言 2 背景和定义 A 背景 B 定义
  • 解读R-FCN的position-sensitive score map

    R FCN的位置敏感分数图灵感来自Instance sensitive Fully Convolutional Networks这篇论文 该论文是针对FCN不能对同类型物体分割的缺点的改进 具体说明见下面 本论文的出发点 FCN可以用来做s
  • Anaconda cloud参考指令

    命令参考 另请参见 API参考 Anaconda客户端是Anaconda Cloud的命令行界面 CLI 可用于登录 注销 管理帐户 上传文件 生成访问令牌 查看令牌以及运行以下所示的其他任务 anaconda h 完整命令参考 anaco
  • VBA判断函数IsArray、IsDate、IsEmpty、IsEmpty、IsError等

    我给VBA的定义 VBA是个人小型自动化处理的有效工具 利用好了 可以大大提高自己的劳动效率 而且可以提高数据处理的准确度 我推出的VBA系列教程共九套和一部VBA汉英手册 现在已经全部完成 希望大家利用 学习 如果您只是一般的职场VBA需
  • ES6迭代器、set、map知识点

    1 迭代器 迭代器 Iterator 就是这样一种机制 它是一种接口 为各种不同的数据结构提供统一的访问机制 任何数据结构只要部署Iterator接口 就可以完成遍历操作 即依次处理该数据结构的所有成员 Iterator 的作用有三个 一是
  • FastAPI从入门到实战(3)——Hello World(安装与运行)

    本文详细记录FastAPI本地的安装和运行 都很简单 主要记录验证一些特性 安装FastAPI 安装就非常简单 只需要安装两个包就行 FastAPI pip install fastapi uvicorn 用于加载和提供应用程序的服务器 p