Python 搭建 FastAPI 项目

python,搭建,fastapi,项目 · 浏览次数 : 421

小编点评

```python # 获取 Neo4j 数据的代码地址 data_address = "gitee.com/VipSoft/VipQA/tree/FastAPI/" # 定义一个根路由 @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) # 获取所有节点的请求 @router.get("/node") async def get_nodes(): # 获取所有节点的数据 nodes = await neo4j.get_all_nodes() # 返回所有节点的数据 return JSONResponse(content=nodes, status_code=status.HTTP_200_OK) # 获取特定节点的请求 @router.get("/node/{code}") async def get_node(code): # 获取指定节点的的数据 node = await neo4j.get_node(code) # 返回指定节点的的数据 return JSONResponse(content=node, status_code=status.HTTP_200_OK) ``` ```# Python FastAPI 异步获取 Neo4j 数据源码地址 import neo4j # 获取 Neo4j 数据的代码地址 data_address = "gitee.com/VipSoft/VipQA/tree/FastAPI/" # 定义一个根路由 @router.get("/add/") def add_node(): # TODO往 neo4j 里创建新的节点 data = { 'code': 0, 'message': '', 'data': 'add success' } return neo4j.create_node(data_address, data) # 获取所有节点的请求 @router.get("/node") async def get_nodes(): # 获取所有节点的数据 nodes = await neo4j.get_all_nodes() # 返回所有节点的数据 return neo4j.get_nodes(nodes) # 获取特定节点的请求 @router.get("/node/{code}") async def get_node(code): # 获取指定节点的的数据 node = await neo4j.get_node(code) # 返回指定节点的的数据 return neo4j.get_node(code) ``` **注意:** * 代码中需要进行一些关于 Neo4j 的操作,例如创建节点、获取节点数据等。 * 代码中需要进行一些关于 FastAPI 的操作,例如创建路由、获取路由数据等。 * 代码中需要进行一些关于数据访问的操作,例如获取数据、设置数据等。

正文

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

代码结构说明

image

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)

URL访问 http://127.0.0.1:8000/api/node/add

image

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

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

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

@RequestMapping("/node")
public class NodeController{

    @PostMapping("/add")
    public void add(){

    }
}

Python FastAPI 异步获取 Neo4j 数据

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

与Python 搭建 FastAPI 项目相似的内容:

Python 搭建 FastAPI 项目

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

创建一个基本的FastAPI应用程序

Python 搭建 FastAPI 项目 要生成FastAPI项目的代码,你可以使用FastAPI的脚手架工具来快速创建一个基本的FastAPI应用程序。 以下是创建一个新的FastAPI项目的步骤: 安装FastAPI和cookiecutter。你可以使用pip来安装它们: pip install

Python FastAPI 获取 Neo4j 数据

### 前提条件 - 先往Neo4j 里,准备数据 参考:https://www.cnblogs.com/vipsoft/p/17631347.html#%E5%88%9B%E5%BB%BA%E4%BC%A0%E6%89%BF%E4%BA%BA - 搭建 FastAPI 项目:https://www

在线问诊 Python、FastAPI、Neo4j — 提供咨询接口服务

目录构建服务层接口路由层PostMan 调用 采用 Fast API 搭建服务接口: https://www.cnblogs.com/vipsoft/p/17684079.html Fast API 文档:https://fastapi.tiangolo.com/zh/ 构建服务层 qa_servi

kettle从入门到精通 第七十一课 ETL之kettle 再谈http post,轻松掌握body中传递json参数

场景: kettle中http post步骤如何发送http请求且传递body参数? 解决方案: http post步骤中直接设置Request entity field字段即可。 1、手边没有现成的post接口,索性用python搭建一个简单的接口,关键代码如下(安装python环境略): fro

【Python进阶-PyQt5】00搭建PyQt5环境

1.创建独立开发虚拟环境 1.1虚拟环境简介 我们编写的程序,有时用到的Python库是不一样的,比如说开发桌面应用程序我们主要用到PyQt5相关的Python库、开发Web应用程序我们主要用到Django相关的Python库等等。假设我们在开发桌面应用程序的时候除了PyQt5相关的Python库外

企业级环境部署:在 Linux 服务器上如何搭建和部署 Python 环境?

在大部分企业里,自动化测试框架落地都肯定会集成到Jenkins服务器上做持续集成测试,自动构建以及发送结果到邮箱,实现真正的无人值守测试。 不过Jenkins搭建一般都会部署在公司的服务器上,不会在私人电脑里,而服务器大部分都是Linux操作系统的。所以,我们如果要在Linux上的Jenkins服务

【Playwright+Python】系列教程(一)环境搭建及脚本录制

一、前言 看到这个文章,有的同学会说: 六哥,你为啥不早早就写完python系列的文章。 因为有徒弟需要吧,如果你也想学自学,那这篇文章,可以说是我们结缘一起学习的开始吧! 如果对你有用,建议收藏和转发! 二、Playwright是什么? 微软开源自动化测试工具Playwright,支持主流浏览器,

RobotFrameWork环境搭建及使用

RF环境搭建 首先安装python并且配置python环境变量 pip install robotframework pip install robotframework-ride 生产桌面快捷方式 不行换豆瓣源 检查一下pip list RF类库和扩展库 标准库 按F5快捷键查询,可以看到rf自带

Pybind11和CMake构建python扩展模块环境搭建

使用pybind11的CMake模板来创建拓展环境搭建 从Github上下载cmake_example的模板,切换分支,并升级pybind11子模块到最新版本 拉取pybind11使用cmake构建工具的模板仓库 git clone --recursive https://github.com/mr