You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask API服务维护状态检测接口开发及本地测试方法咨询

实现Flask服务器状态检测端点

一、判断服务器维护状态的方案

1. 配置/环境变量控制

直接在Flask配置中添加开关项,或用环境变量动态控制状态:

# 初始化配置,默认服务器可用
app.config['MAINTENANCE_MODE'] = False

@app.route('/status')
def server_status():
    if app.config['MAINTENANCE_MODE']:
        return {"status": "maintenance", "message": "服务器正在维护中,请稍后再试"}, 503
    return {"status": "available", "message": "服务器正常运行"}, 200

切换状态时,修改配置值后重启服务,或通过环境变量传递(比如启动前执行export MAINTENANCE_MODE=true)。

2. 文件标记法

在服务器指定路径下创建/删除标记文件,无需重启服务即可快速切换状态:

import os

@app.route('/status')
def server_status():
    # 自定义标记文件路径,需确保Flask进程有读取权限
    maintenance_flag = './.maintenance'
    if os.path.exists(maintenance_flag):
        return {"status": "maintenance", "message": "服务器维护中,暂时无法访问"}, 503
    return {"status": "available", "message": "服务器正常可用"}, 200

开启维护时执行touch .maintenance,恢复服务时执行rm .maintenance即可。

3. 数据库状态标记

如果应用已连接数据库,可在数据库中存储维护状态,适合多实例部署场景:

# 示例:从数据库配置表读取维护状态的函数
def get_maintenance_status():
    cursor.execute("SELECT value FROM system_config WHERE config_key = 'maintenance_mode'")
    result = cursor.fetchone()
    return result[0] == 'True' if result else False

@app.route('/status')
def server_status():
    if get_maintenance_status():
        return {"status": "maintenance", "message": "服务器正在维护"}, 503
    return {"status": "available", "message": "服务器运行正常"}, 200

切换状态时只需更新数据库中的对应值,所有实例会自动同步状态。

二、本地测试状态路由的方法

1. 浏览器直接访问

启动Flask应用后,在地址栏输入http://localhost:5000/status(端口根据实际配置调整),查看页面返回的JSON内容,或通过浏览器开发者工具查看HTTP状态码(200为可用,503为维护中)。

2. curl命令测试

打开终端执行以下命令,查看详细响应信息:

# 测试服务器可用状态
curl -i http://localhost:5000/status

# 切换维护状态后再次测试
curl -i http://localhost:5000/status

-i参数会显示完整的HTTP响应头,方便确认状态码。

3. Python脚本测试

用requests库快速验证不同状态的返回结果:

import requests

res = requests.get('http://localhost:5000/status')
print(f"响应状态码: {res.status_code}")
print(f"响应内容: {res.json()}")

运行脚本即可直观看到路由的返回数据。

4. Flask测试客户端(自动化测试)

使用Flask自带的测试客户端编写单元测试,确保路由逻辑正确:

import unittest
from your_flask_app import app

class TestStatusEndpoint(unittest.TestCase):
    def setUp(self):
        app.config['TESTING'] = True
        self.client = app.test_client()

    def test_available_status(self):
        app.config['MAINTENANCE_MODE'] = False
        response = self.client.get('/status')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.json['status'], 'available')

    def test_maintenance_status(self):
        app.config['MAINTENANCE_MODE'] = True
        response = self.client.get('/status')
        self.assertEqual(response.status_code, 503)
        self.assertEqual(response.json['status'], 'maintenance')

if __name__ == '__main__':
    unittest.main()

执行脚本即可自动验证两种状态下的路由行为。

内容的提问来源于stack exchange,提问作者pnna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:13:07