侧边栏壁纸
  • 累计撰写 29 篇文章
  • 累计创建 28 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Flask测试源码

Administrator
2025-12-29 / 0 评论 / 0 点赞 / 40 阅读 / 0 字
import os
import platform
import time
from flask import Flask, render_template_string, jsonify, request

app = Flask(__name__)

# --- 配置区 ---
app.config['SECRET_KEY'] = 'dev-secret-key-12345'
messages = [{"id": 1, "text": "系统已上线,等待指令...", "time": "2023-10-01 12:00:00"}]

# --- HTML 模板 (单页应用的核心) ---
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask 部署测试工具</title>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
    <style>
        body { background-color: #f8f9fa; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; }
        .stats-card { border-left: 5px solid #0d6efd; }
        .log-container { height: 200px; overflow-y: auto; background: #212529; color: #0dfd0d; padding: 15px; border-radius: 5px; font-family: monospace; }
    </style>
</head>
<body>
    <div class="container py-5">
        <header class="pb-3 mb-4 border-bottom">
            <span class="fs-4">🚀 Flask 自动化部署测试面板</span>
        </header>

        <div class="row g-4">
            <div class="col-md-4">
                <div class="card h-100 stats-card shadow-sm">
                    <div class="card-body">
                        <h5 class="card-title">服务器信息</h5>
                        <p class="card-text"><strong>OS:</strong> {{ info.os }}</p>
                        <p class="card-text"><strong>Python:</strong> {{ info.py_ver }}</p>
                        <p class="card-text"><strong>运行状态:</strong> <span class="badge bg-success">正常</span></p>
                        <p class="card-text text-muted small">最后更新: {{ info.now }}</p>
                    </div>
                </div>
            </div>

            <div class="col-md-8">
                <div class="card shadow-sm">
                    <div class="card-header bg-white">发送测试消息</div>
                    <div class="card-body">
                        <div class="input-group mb-3">
                            <input type="text" id="msgInput" class="form-control" placeholder="输入测试内容...">
                            <button class="btn btn-primary" onclick="sendMessage()">发送数据</button>
                        </div>
                        <div id="logBox" class="log-container">
                            {% for m in messages %}
                            <div>[{{ m.time }}] {{ m.text }}</div>
                            {% endfor %}
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <footer class="pt-3 mt-4 text-muted border-top">
            &copy; 2023-2025 Flask Test App | Environment: {{ info.env }}
        </footer>
    </div>

    <script>
        async function sendMessage() {
            const input = document.getElementById('msgInput');
            const logBox = document.getElementById('logBox');
            if (!input.value) return;

            const response = await fetch('/api/send', {
                method: 'POST',
                headers: {'Content-Type': 'application/json'},
                body: JSON.stringify({text: input.value})
            });
            
            const data = await response.json();
            if (data.status === 'success') {
                const div = document.createElement('div');
                div.textContent = `[${data.entry.time}] ${data.entry.text}`;
                logBox.prepend(div);
                input.value = '';
            }
        }
    </script>
</body>
</html>
"""

# --- 路由逻辑 ---

@app.route('/')
def index():
    # 获取系统基本信息
    info = {
        "os": f"{platform.system()} {platform.release()}",
        "py_ver": platform.python_version(),
        "now": time.strftime("%Y-%m-%d %H:%M:%S"),
        "env": os.getenv('FLASK_ENV', 'Production')
    }
    return render_template_string(HTML_TEMPLATE, info=info, messages=reversed(messages))

@app.route('/api/send', methods=['POST'])
def handle_api():
    data = request.json
    new_entry = {
        "id": len(messages) + 1,
        "text": data.get('text', 'Empty'),
        "time": time.strftime("%H:%M:%S")
    }
    messages.append(new_entry)
    # 保持列表长度,防止内存溢出
    if len(messages) > 10: messages.pop(0)
    return jsonify({"status": "success", "entry": new_entry})

@app.route('/health')
def health_check():
    """用于云平台健康检查的接口"""
    return jsonify({"status": "up", "timestamp": time.time()})

@app.errorhandler(404)
def page_not_found(e):
    return "<h1>404</h1><p>该页面不存在,请检查部署路径。</p>", 404

if __name__ == '__main__':
    # 生产环境建议使用 Gunicorn 启动,本地测试用此命令
    app.run(host='0.0.0.0', port=5000)

0

评论区