Python 搭建 FastAPI 项目的详细过程

 更新时间:2023年09月08日 08:51:23   作者:VipSoft  
这篇文章主要介绍了Python搭建FastAPI项目的过程,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一般网上的文章都是以脚本的方式写Demor的,没找到自己想要的那种项目结构型的示例(类似Java SpringBoot 创建 Model,通过 pom 进行关联配置的那种)
看了一些源码,再结合自己的想法,建了一个简单的示例, 用 Python 做接口服务的项目搭建,仅供参考

代码结构说明

VipQA
│  .env                                         # 环境变量配置文件
│  app_init.py                                  # 我用它来放了项目初始化代码
│  main.py                                      # 主程序,用来启动项目
│  requirements.txt                             # 项目依赖包 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple  进行安装
│  settings.py                                  # 用来将 .env 里的变更值取出来。 Python 设置环境变量方法(https://www.cnblogs.com/vipsoft/p/17677020.html)
│  __init__.py                                  # 目前没放代码
│
├─db                                            # 里面放了初始化数据库的脚本
│  └─  build_nodes.py
│
├─routers                                       # 路由目录,相当于 Java 里的 Controller
│  │  node_router.py                            # neo4j 节点接口,用来处理节点相关的接口方法
│  └─  __init__.py                              # 路由配置,把目录下的各模块路由注册到 API 里面
│
├─service                                       # 业务逻辑处理,参考JAVA,供 Controller 调用
│      node_service.py                          # neo4j 节点服务,处理节点逻辑
│      __init__.py                              # 目前空
│
├─static                                        # 静态资源目录
│      404.html                                 # URL地址不存在时,显示这个页面
│      index.html                               # 默认首页
│
└─utils                                         # 工具类
   │  neo4j_provider.py                         # neo4j 连接工具
   └─ __init__.py                               # 目前空

主程序代码

requirements.txt
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

#pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 知识图谱依赖包
neo4j==5.10.0
# async web framework
# web 服务器
uvicorn==0.23.2
# 代码框架
fastapi==0.101.1
# 环境配置 .env 使用依赖包
python-dotenv==0.20.0
# 命令行、控制台,返回内容,字体变颜色
colorama==0.4.4

.env 环境变量配置文件

# app
APP_HOST=127.0.0.1
APP_PORT=8000
# neo4j
NEO4J_URI=neo4j://172.16.3.64:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=password
NEO4J_VERSION=5
NEO4J_DATABASE=neo4j
NEO4J_PORT=8080

settings.py
变量设置一般有两种,一种取文件里的,还有是取系统的环境变量,详见:Python 设置环境变量方法

from dotenv import dotenv_values
from typing import List
dotenv_config = dotenv_values('.env')
class Settings:
    BACKEND_CORS_ORIGINS: List = ['*']
    # APP
    APP_HOST = dotenv_config.get("APP_HOST", "127.0.0.1")
    APP_PORT = int(dotenv_config.get("APP_PORT", 8000))
    # Neo4j
    NEO4J_URI = dotenv_config.get("NEO4J_URI", "neo4j://172.16.3.64:7687")
    NEO4J_USER = dotenv_config.get("NEO4J_USER", "neo4j")
    NEO4J_PASSWORD = dotenv_config.get("NEO4J_PASSWORD", "password")
    NEO4J_VERSION = dotenv_config.get("NEO4J_VERSION", "5")
    NEO4J_DATABASE = dotenv_config.get("NEO4J_DATABASE", "neo4j")
    NEO4J_PORT = int(dotenv_config.get("NEO4J_PORT", 8080))
settings = Settings()

app_init.py
项目启动

import time
import logging
import os
from settings import settings
from starlette.middleware.cors import CORSMiddleware
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse, FileResponse
from fastapi.staticfiles import StaticFiles
from routers import api_router
# 创建  FastAPI 实类,供 main.py 调用
def create_application() -> FastAPI:
    # 等待其他组件启动完成
    time.sleep(3)
    application = FastAPI(
        title="FastAPI结构示例",  # 文档标题
        description="使用 FastAPI 实现 Node4j 基础功能. 🚀",  # 文档简介
        version="0.0.1",  # 文档版本号
        # docs_url=None, redoc_url=None,  # 配置离线文档,None 后,http://127.0.0.1:8000/docs 就不能再访问了
    )
	# api_router =>  routers/__init__.py 里面 的 api_router = APIRouter()
	# 访问接口时,所有的接口前面都要加上 api 前缀,相当于 Java 里的  server.servlet.context-path: /api 配置
    application.include_router(api_router, prefix='/api')  # 后面带 API 的就表示接口,路由到 routers 目录下找对应的接口,相当于 Java 的 Controller,
    register_middleware(application)  # 支付跨域
    register_static(application)  # 添加HTML静态页面配置
    register_event(application)  # 添加项目事件
    return application
def register_static(app):
    # 如果需要使用静态文件, 可以使用 StaticFiles,将它挂载到应用程序中。
    html_path = os.path.dirname(os.path.abspath(__file__))
    app.mount('/static', StaticFiles(directory=os.path.join(html_path, 'static')))
    @app.get('/')
    async def read_index():
        # 跳转到 static 下面的 index.html 文件
        return FileResponse(os.path.join(html_path, 'static', 'index.html'))
    @app.exception_handler(404)
    async def not_found(request: Request, exc):
        accept = request.headers.get('accept')
        if not accept:
            # 返回JSON 格式
            return JSONResponse(content={'error': "Not found"}, status_code=exc.status_code)
        if exc.status_code == 404 and 'text/html' in accept:
            # 404 跳转到 static 下面的 404.html 页面
            return FileResponse(os.path.join(html_path, 'static', '404.html'))
        else:
            return JSONResponse(content={'error': "Not found"}, status_code=exc.status_code)
# 支持跨域
def register_middleware(application):
    if settings.BACKEND_CORS_ORIGINS:
        application.add_middleware(
            CORSMiddleware,
            allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS],
            allow_credentials=True,
            allow_methods=["*"],
            allow_headers=["*"],
        )
def register_event(app):
    @app.on_event("startup")
    async def startup_event():
        logging.info("App Startup")
    @app.on_event("shutdown")
    async def shutdown_event():
        logging.info("App Shutdown")

接口路由

routers/init.py

from fastapi import APIRouter
from . import node_router
api_router = APIRouter()
# tags 显示在 Swagger 上的标题
# 这边的 prefix 相当于 java 里的 Controller 上的 @RequestMapping("/node")
api_router.include_router(node_router.router, tags=['Node'], prefix='/node')

node_router.py

from fastapi import APIRouter, status
from fastapi.responses import JSONResponse
router = APIRouter()
# 定义一个根路由
@router.get("/add")
def add_node():
    # TODO 往 neo4j 里创建新的节点
    data = {
        'code': 0,
        'message': '',
        'data': 'add success'
    }
    return JSONResponse(content=data, status_code=status.HTTP_200_OK)

附JAVA,接口前缀配置
所有接口前面的前缀

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8088
  servlet:
    # 应用的访问路径
    context-path: /api

业务接口上的前缀(所有类方法前)

@RequestMapping("/node")
public class NodeController{
    @PostMapping("/add")
    public void add(){
    }
}

源码地址:https://gitee.com/VipSoft/VipQA

到此这篇关于Python 搭建 FastAPI 项目的文章就介绍到这了,更多相关Python  FastAPI 项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • TensorFlow在MAC环境下的安装及环境搭建

    TensorFlow在MAC环境下的安装及环境搭建

    小编在论坛中看到很多朋友在寻找TensorFlow的环境搭建图文步骤以及安装的具体流程,在此小编给大家整理了一篇非常详细的图文流程,希望能够帮助到你。
    2017-11-11
  • python中array数组添加一行或一列数据的具体实现

    python中array数组添加一行或一列数据的具体实现

    这篇文章主要给大家介绍了关于python中array数组添加一行或一列数据的具体实现,最近经常使用到数组方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Python实现一个Git日志统计分析的小工具

    Python实现一个Git日志统计分析的小工具

    这篇文章主要给大家介绍了关于利用Python如何实现一个Git日志统计分析小工具的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • Python基础必备之语法结构详解

    Python基础必备之语法结构详解

    Python语法定义了用于在 Python 编程中创建句子的所有规则集。如果想更深入地研究 Python 词法结构,需要了解构成语句的句法元素,即构成 Python 程序的基本单元,涵盖控制结构,在不同代码组之间引导程序流的构造,快跟随小编一起学习一下吧
    2022-04-04
  • django框架forms组件用法实例详解

    django框架forms组件用法实例详解

    这篇文章主要介绍了django框架forms组件用法,结合实例形式详细分析了Django框架forms组件源码及常用操作方法与使用注意事项,需要的朋友可以参考下
    2019-12-12
  • python+tifffile之tiff文件读写方式

    python+tifffile之tiff文件读写方式

    今天小编就为大家分享一篇python+tifffile之tiff文件读写方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 使用Python打造专业级老照片修复工具

    使用Python打造专业级老照片修复工具

    在这个数字化时代,我们手中珍藏着许多泛黄、模糊、甚至有划痕的老照片,本文将带大家一起用Python开发一个专业级的老照片修复工具,让这些珍贵的记忆重现光彩
    2025-09-09
  • 使用国内镜像源优化pip install下载的方法步骤

    使用国内镜像源优化pip install下载的方法步骤

    在Python开发中,pip 是一个不可或缺的工具,用于安装和管理Python包,然而,由于默认的PyPI服务器位于国外,国内用户在安装依赖时可能会遇到下载速度慢、连接不稳定等问题,所以本文将详细介绍如何使用国内镜像源来加速pip install -r requirements.txt的过程
    2025-03-03
  • 浅谈Python类的__getitem__和__setitem__特殊方法

    浅谈Python类的__getitem__和__setitem__特殊方法

    下面小编就为大家带来一篇浅谈Python类的__getitem__和__setitem__特殊方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Pycharm激活方法及详细教程(详细且实用)

    Pycharm激活方法及详细教程(详细且实用)

    这篇文章主要介绍了Pycharm激活方法及详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-05-05

最新评论