3. 环境搭建:Python虚拟环境配置、FastAPI框架安装、Postman与curl工具准备、数据库选型(PostgreSQL)
在开始编写接口代码之前,必须搭建一套稳定、可复现的开发环境。本章将指导你完成从Python虚拟环境配置到数据库选型的全流程,确保后续的合同发票匹配与付款风险控制接口能够在隔离、可控的环境中运行。
3.1 Python虚拟环境配置
虚拟环境用于隔离项目依赖,避免不同项目之间的包版本冲突。推荐使用Python内置的venv模块或conda进行管理。
3.1.1 使用venv创建虚拟环境
# 创建项目目录并进入
mkdir contract-payment-api
cd contract-payment-api
# 创建虚拟环境(Windows)
python -m venv venv
# 创建虚拟环境(macOS/Linux)
python3 -m venv venv
# 激活虚拟环境(Windows)
venv\Scripts\activate
# 激活虚拟环境(macOS/Linux)
source venv/bin/activate
# 验证环境
which python # macOS/Linux
where python # Windows
提示:激活后终端提示符前会出现
(venv) 标识,表示当前处于虚拟环境中。后续所有 pip install 操作都会安装到该环境内,不会污染系统全局Python。
3.1.2 使用requirements.txt管理依赖
# 生成当前环境的依赖清单
pip freeze > requirements.txt
# 在新环境中一键安装所有依赖
pip install -r requirements.txt
3.2 FastAPI框架安装
FastAPI是一个现代、高性能的Python Web框架,基于Starlette和Pydantic构建,天然支持异步、自动生成OpenAPI文档,非常适合工程合同API的开发场景。
3.2.1 安装FastAPI与ASGI服务器
# 安装FastAPI核心库
pip install fastapi
# 安装ASGI服务器(推荐uvicorn,性能优异)
pip install uvicorn[standard]
# 安装数据库驱动(后续章节使用)
pip install sqlalchemy psycopg2-binary alembic
3.2.2 验证安装
# 创建最小启动文件 main.py
from fastapi import FastAPI
app = FastAPI(title="合同发票匹配API")
@app.get("/")
def root():
return {"message": "环境搭建成功,API服务已启动"}
# 启动服务
uvicorn main:app --reload --host 0.0.0.0 --port 8000
启动后访问 http://localhost:8000/docs 即可看到自动生成的Swagger交互式文档页面。
关键配置说明:
--reload:开发模式下启用热重载,代码修改后自动重启服务--host 0.0.0.0:允许局域网内其他设备访问(调试时方便Postman连接)--port 8000:默认端口,可根据需要修改
3.3 Postman与curl工具准备
接口调试工具是API开发者的“听诊器”。Postman提供图形化界面,适合复杂请求构造与集合管理;curl是命令行利器,适合脚本化测试与CI/CD集成。
3.3.1 Postman安装与配置
| 步骤 | 操作说明 |
|---|---|
| 1 | 访问 Postman官网 下载对应操作系统版本 |
| 2 | 安装后注册/登录(支持免费账号) |
| 3 | 创建新集合(Collection),命名为 合同发票匹配API |
| 4 | 添加环境变量:base_url = http://localhost:8000 |
| 5 | 导入课程配套的Postman预置集合文件(.json) |
3.3.2 curl常用命令速查
# GET请求
curl -X GET "http://localhost:8000/contracts" -H "accept: application/json"
# POST请求(JSON体)
curl -X POST "http://localhost:8000/invoices/match" \
-H "Content-Type: application/json" \
-d '{"contract_id": "CT2024001", "invoice_amount": 150000.00}'
# 带认证的请求
curl -X GET "http://localhost:8000/payments/risk-check" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
# 保存响应到文件
curl -o response.json "http://localhost:8000/contracts/export"
注意:Windows系统使用curl时,JSON字符串中的双引号需要转义,建议使用单引号包裹整个JSON(Git Bash或WSL环境),或使用Postman替代。
3.4 数据库选型:PostgreSQL
工程合同数据具有结构化强、关联复杂、事务要求高的特点。PostgreSQL作为企业级关系型数据库,在以下方面与我们的业务场景高度匹配:
| 特性 | PostgreSQL优势 | 合同场景价值 |
|---|---|---|
| ACID事务 | 完全支持,隔离级别可配置 | 确保合同-发票-付款三表状态一致性 |
| JSON/JSONB | 原生支持,可索引 | 存储合同条款、发票明细等半结构化数据 |
| 窗口函数 | 支持复杂分析查询 | 累计付款进度、风险评分排名 |
| 并发控制 | MVCC机制,读写不阻塞 | 多用户同时录入合同与发票 |
| 扩展生态 | PostGIS、pg_stat_statements等 | 地理位置分析、性能监控 |
3.4.1 安装与初始化
# macOS (Homebrew)
brew install postgresql@16
brew services start postgresql@16
# Ubuntu/Debian
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
# Windows
# 下载安装包:https://www.postgresql.org/download/windows/
# 安装时勾选 pgAdmin 4 和 Stack Builder
3.4.2 创建数据库与用户
# 切换到postgres系统用户
sudo -u postgres psql
# 创建数据库
CREATE DATABASE contract_payment_db;
# 创建专用用户
CREATE USER api_user WITH PASSWORD 'SecurePass123!';
# 授权
GRANT ALL PRIVILEGES ON DATABASE contract_payment_db TO api_user;
# 退出
\q
3.4.3 连接配置(FastAPI侧)
# config/database.py
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "postgresql://api_user:SecurePass123!@localhost:5432/contract_payment_db"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
生产环境建议:使用环境变量或.env文件管理数据库连接字符串,避免硬编码密码。推荐使用
python-dotenv 库加载配置。
3.5 环境架构总览
下图展示了开发环境的整体组件关系与数据流向:
3.6 环境验证清单
完成上述步骤后,请逐项确认以下检查点,确保环境就绪:
| 序号 | 检查项 | 验证方法 | 预期结果 |
|---|---|---|---|
| 1 | 虚拟环境激活 | 终端执行 which python |
路径指向项目目录下的 venv/bin/python |
| 2 | FastAPI服务 | 访问 http://localhost:8000/docs |
显示Swagger UI页面 |
| 3 | Postman连通性 | 发送GET请求到 / |
返回 {"message": "环境搭建成功"} |
| 4 | curl连通性 | 执行 curl http://localhost:8000/ |
返回JSON响应 |
| 5 | 数据库连接 | 执行 psql -U api_user -d contract_payment_db -c "\l" |
列出数据库列表 |
| 6 | 依赖完整性 | 执行 pip list | grep -E "fastapi|uvicorn|sqlalchemy|psycopg2" |
所有包均显示版本号 |
常见问题排查:
- 端口被占用:使用
lsof -i :8000(macOS/Linux)或netstat -ano | findstr :8000(Windows)查找占用进程,更换端口或终止冲突进程。 - 数据库认证失败:检查
pg_hba.conf文件中是否允许密码认证(md5/scram-sha-256),修改后执行pg_ctl reload。 - Postman SSL错误:本地开发使用HTTP协议,确保请求URL为
http://而非https://。