本文作者:99ANYc3cd6

物流查询界面程序代码如何实现?

99ANYc3cd6 12-02 1
物流查询界面程序代码如何实现?摘要: 前端:用户直接与之交互的界面,负责输入运单号、发送查询请求、并展示查询结果,这部分通常使用 HTML、CSS 和 JavaScript 来实现,后端:一个服务器程序,负责接收前端的...
  1. 前端:用户直接与之交互的界面,负责输入运单号、发送查询请求、并展示查询结果,这部分通常使用 HTML、CSS 和 JavaScript 来实现。
  2. 后端:一个服务器程序,负责接收前端的请求,调用物流公司的 API(应用程序编程接口)获取最新的物流轨迹数据,然后将数据返回给前端。

下面我将为您提供一套完整、可直接运行的示例代码,包括前端和后端,我们将使用流行的技术栈:

物流查询界面程序代码如何实现?
(图片来源网络,侵删)
  • 前端: HTML + CSS + JavaScript (使用 fetch API 进行网络请求)
  • 后端: Python + Flask (一个轻量级的 Web 框架)

整体思路

  1. 用户在前端:输入一个模拟的运单号(如 SF1234567890),点击“查询”按钮。
  2. 前端请求后端:JavaScript 将运单号发送到我们本地运行的后端服务器。
  3. 后端处理请求:Python 的 Flask 服务器接收到运单号。
  4. 后端模拟 API 调用:为了演示,后端不会真正调用顺丰、京东等 API,而是会根据你输入的运单号,返回一个模拟的、但格式化的物流轨迹数据。(在实际项目中,这里会替换为真实的 API 调用代码)
  5. 后端返回数据:后端将 JSON 格式的物流数据返回给前端。
  6. 前端展示结果:JavaScript 接收到数据后,动态地将物流信息渲染到页面上。

第1步:项目结构

在你的电脑上创建一个文件夹,logistics_tracker,在文件夹内创建以下三个文件:

logistics_tracker/
├── app.py          # Python 后端代码
├── static/
│   └── style.css   # CSS 样式文件
└── templates/
    └── index.html  # HTML 前端页面

第2步:后端代码 (app.py)

这个文件是我们的服务器,它会提供两个路由:

  • 用于返回主页面。
  • /api/query: 用于接收查询请求并返回模拟的物流数据。

代码 (app.py):

# app.py
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
# --- 模拟物流数据 ---
# 在实际应用中,这部分数据应该从真实的物流公司 API 获取
# 这里我们根据不同的运单号返回不同的模拟数据
def get_mock_logistics_data(tracking_number):
    if tracking_number == "SF1234567890":
        return {
            "status": "success",
            "company": "顺丰速运",
            "tracking_number": tracking_number,
            "traces": [
                {"time": "2025-10-27 15:30:00", "status": "快件已由【深圳南山营业点】安排投递", "location": "广东深圳"},
                {"time": "2025-10-27 10:15:00", "status": "快件到达【深圳南山营业点】", "location": "广东深圳"},
                {"time": "2025-10-27 08:00:00", "status": "快件已从【深圳转运中心】发出", "location": "广东深圳"},
                {"time": "2025-10-26 22:00:00", "status": "快件到达【深圳转运中心】", "location": "广东深圳"},
                {"time": "2025-10-26 18:00:00", "status": "快件已从【北京转运中心】发出", "location": "北京"},
                {"time": "2025-10-26 12:00:00", "status": "快件到达【北京转运中心】", "location": "北京"},
                {"time": "2025-10-26 10:00:00", "status": "快件已收件", "location": "北京"}
            ]
        }
    elif tracking_number == "JD9876543210":
        return {
            "status": "success",
            "company": "京东物流",
            "tracking_number": tracking_number,
            "traces": [
                {"time": "2025-10-27 09:00:00", "status": "【上海浦东区营业部】派件员正在派送", "location": "上海"},
                {"time": "2025-10-27 06:00:00", "status": "快件到达【上海浦东区营业部】", "location": "上海"},
                {"time": "2025-10-26 20:00:00", "status": "快件已从【上海分拨中心】发出", "location": "上海"},
                {"time": "2025-10-26 14:00:00", "status": "快件到达【上海分拨中心】", "location": "上海"},
                {"time": "2025-10-26 08:00:00", "status": "商家已发货", "location": "上海"}
            ]
        }
    else:
        return {
            "status": "error",
            "message": "未找到该运单号的信息,请检查后重试。"
        }
# --- 路由 ---
@app.route('/')
def index():
    """渲染主页"""
    return render_template('index.html')
@app.route('/api/query', methods=['POST'])
def query():
    """处理物流查询请求"""
    tracking_number = request.form.get('tracking_number')
    if not tracking_number:
        return jsonify({"status": "error", "message": "运单号不能为空!"})
    # 调用模拟函数获取数据
    data = get_mock_logistics_data(tracking_number)
    return jsonify(data)
if __name__ == '__main__':
    # debug=True 可以在代码修改后自动重启服务器,方便开发
    app.run(debug=True, port=5000)

第3步:前端代码 (templates/index.html)

这是用户看到的界面,它包含一个输入框、一个按钮和一个用于显示结果的区域。

物流查询界面程序代码如何实现?
(图片来源网络,侵删)

代码 (templates/index.html):

<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">物流查询系统</title>
    <!-- 引入外部 CSS 文件 -->
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <div class="container">
        <h1>物流轨迹查询</h1>
        <div class="query-form">
            <input type="text" id="trackingNumber" placeholder="请输入您的运单号 ( SF1234567890)">
            <button id="queryButton">查询</button>
        </div>
        <div id="resultContainer">
            <!-- 查询结果将在这里动态显示 -->
            <p id="welcome-message">欢迎使用物流查询系统,请输入运单号开始查询。</p>
        </div>
    </div>
    <!-- 引入外部 JavaScript 文件 -->
    <script src="{{ url_for('static', filename='script.js') }}"></script>
</body>
</html>

第4步:样式代码 (static/style.css)

为了让界面看起来更美观,我们添加一些 CSS 样式。

代码 (static/style.css):

/* static/style.css */
body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    background-color: #f4f7f6;
    color: #333;
    margin: 0;
    padding: 20px;
    display: flex;
    justify-content: center;
    align-items: flex-start;
    min-height: 100vh;
}
.container {
    width: 100%;
    max-width: 600px;
    background-color: #ffffff;
    padding: 30px;
    border-radius: 10px;
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
h1 {
    text-align: center;
    color: #2c3e50;
    margin-bottom: 30px;
}
.query-form {
    display: flex;
    margin-bottom: 30px;
}
#trackingNumber {
    flex-grow: 1;
    padding: 12px 15px;
    border: 1px solid #ccc;
    border-radius: 5px 0 0 5px;
    font-size: 16px;
    outline: none;
}
#trackingNumber:focus {
    border-color: #3498db;
}
#queryButton {
    padding: 12px 20px;
    border: none;
    background-color: #3498db;
    color: white;
    font-size: 16px;
    cursor: pointer;
    border-radius: 0 5px 5px 0;
    transition: background-color 0.3s;
}
#queryButton:hover {
    background-color: #2980b9;
}
#resultContainer {
    border-top: 1px solid #eee;
    padding-top: 20px;
}
#welcome-message {
    text-align: center;
    color: #7f8c8d;
    font-style: italic;
}
.logistics-info {
    margin-bottom: 20px;
}
.logistics-info h2 {
    font-size: 1.2em;
    margin-bottom: 10px;
    color: #34495e;
}
.trace-item {
    padding: 12px;
    border-left: 3px solid #3498db;
    margin-bottom: 10px;
    background-color: #f9f9f9;
    border-radius: 0 5px 5px 0;
}
.trace-item .time {
    font-size: 0.9em;
    color: #7f8c8d;
    margin-bottom: 5px;
}
.trace-item .status {
    font-weight: 500;
    color: #2c3e50;
}
.trace-item .location {
    font-size: 0.9em;
    color: #7f8c8d;
    margin-top: 5px;
}
.error-message {
    color: #e74c3c;
    text-align: center;
    padding: 20px;
    background-color: #fadbd8;
    border-radius: 5px;
    border-left: 3px solid #e74c3c;
}
.loading {
    text-align: center;
    color: #3498db;
    padding: 20px;
}

第5步:交互逻辑代码 (static/script.js)

这是让页面“活”起来的关键,它负责发送请求和处理响应。

物流查询界面程序代码如何实现?
(图片来源网络,侵删)

代码 (static/script.js):

// static/script.js
document.addEventListener('DOMContentLoaded', () => {
    const queryButton = document.getElementById('queryButton');
    const trackingNumberInput = document.getElementById('trackingNumber');
    const resultContainer = document.getElementById('resultContainer');
    queryButton.addEventListener('click', () => {
        const trackingNumber = trackingNumberInput.value.trim();
        if (!trackingNumber) {
            alert('请输入运单号!');
            return;
        }
        performQuery(trackingNumber);
    });
    // 按下回车键也可以触发查询
    trackingNumberInput.addEventListener('keypress', (e) => {
        if (e.key === 'Enter') {
            queryButton.click();
        }
    });
    async function performQuery(trackingNumber) {
        // 显示加载状态
        resultContainer.innerHTML = '<p class="loading">正在查询中,请稍候...</p>';
        try {
            // 使用 fetch API 向后端发送 POST 请求
            const response = await fetch('/api/query', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: `tracking_number=${encodeURIComponent(trackingNumber)}`
            });
            if (!response.ok) {
                throw new Error('网络响应不正常');
            }
            const data = await response.json();
            // 根据后端返回的数据渲染结果
            renderResult(data);
        } catch (error) {
            console.error('查询出错:', error);
            resultContainer.innerHTML = `
                <div class="error-message">
                    查询失败,请检查网络连接或稍后重试。
                </div>
            `;
        }
    }
    function renderResult(data) {
        if (data.status === 'error') {
            resultContainer.innerHTML = `
                <div class="error-message">
                    ${data.message}
                </div>
            `;
            return;
        }
        const traces = data.traces;
        let tracesHtml = '';
        // 将轨迹数据反转,最新的在上面显示
        traces.reverse().forEach(trace => {
            tracesHtml += `
                <div class="trace-item">
                    <div class="time">${trace.time}</div>
                    <div class="status">${trace.status}</div>
                    <div class="location">${trace.location}</div>
                </div>
            `;
        });
        resultContainer.innerHTML = `
            <div class="logistics-info">
                <h2>${data.company} - 运单号: ${data.tracking_number}</h2>
                ${tracesHtml}
            </div>
        `;
    }
});

第6步:如何运行

  1. 安装 Flask:如果你的电脑上没有安装 Python 和 Flask,需要先安装,打开终端或命令提示符,运行:

    pip install Flask
  2. 启动服务器:在 logistics_tracker 文件夹下,打开终端,运行:

    python app.py

    你会看到类似下面的输出,表示服务器已经启动:

     * Serving Flask app 'app'
     * Debug mode: on
     * Running on http://127.0.0.1:5000
  3. 访问界面:打开你的网页浏览器(如 Chrome, Firefox),在地址栏输入 http://127.0.0.1:5000 并按回车。

  4. 测试查询

    • 在输入框中输入 SF1234567890,点击查询,你会看到顺丰的模拟物流轨迹。
    • 输入 JD9876543210,点击查询,你会看到京东的模拟物流轨迹。
    • 输入任意其他号码,你会看到“未找到该运单号”的错误提示。

总结与扩展

这套代码提供了一个功能完整、界面美观的物流查询前端和后端框架。

如何扩展到真实项目?

核心的区别在于 app.py 中的 get_mock_logistics_data 函数,你需要将其替换为调用真实物流公司 API 的逻辑。

  • 获取 API Key:你需要去各大物流公司(顺丰、京东、三通一达等)的开放平台注册,并申请一个 API Key。
  • 阅读 API 文档:仔细阅读官方 API 文档,了解如何构造请求、需要哪些参数(如运单号、API Key)、以及返回数据的格式。
  • 编写 API 调用代码:使用 Python 的 requests 库来发送 HTTP 请求,解析返回的 JSON 数据,并按照你前端需要的格式进行整理。

替换后的函数可能看起来像这样(伪代码):

# 替换 app.py 中的 get_mock_logistics_data
import requests
def get_real_logistics_data(tracking_number):
    api_key = "YOUR_API_KEY"
    url = "https://api.logistics-company.com/v1/tracking"
    params = {
        "tracking_number": tracking_number,
        "api_key": api_key
    }
    try:
        response = requests.get(url, params=params)
        response.raise_for_status()  # 如果请求失败则抛出异常
        data = response.json()
        # 解析 data,并转换成前端需要的格式
        return format_api_response(data)
    except requests.exceptions.RequestException as e:
        # 处理网络错误或API返回错误
        return {"status": "error", "message": f"API调用失败: {e}"}

这个示例为你提供了一个坚实的基础,你可以在此基础上进行修改和扩展,构建更加强大的物流查询系统。

文章版权及转载声明

作者:99ANYc3cd6本文地址:https://www.glhhw.com/post/1202.html发布于 12-02
文章转载或复制请以超链接形式并注明出处广联货运物流

阅读
分享