物流查询界面程序代码如何实现?
- 前端:用户直接与之交互的界面,负责输入运单号、发送查询请求、并展示查询结果,这部分通常使用 HTML、CSS 和 JavaScript 来实现。
- 后端:一个服务器程序,负责接收前端的请求,调用物流公司的 API(应用程序编程接口)获取最新的物流轨迹数据,然后将数据返回给前端。
下面我将为您提供一套完整、可直接运行的示例代码,包括前端和后端,我们将使用流行的技术栈:
(图片来源网络,侵删)
- 前端: HTML + CSS + JavaScript (使用
fetchAPI 进行网络请求) - 后端: Python + Flask (一个轻量级的 Web 框架)
整体思路
- 用户在前端:输入一个模拟的运单号(如
SF1234567890),点击“查询”按钮。 - 前端请求后端:JavaScript 将运单号发送到我们本地运行的后端服务器。
- 后端处理请求:Python 的 Flask 服务器接收到运单号。
- 后端模拟 API 调用:为了演示,后端不会真正调用顺丰、京东等 API,而是会根据你输入的运单号,返回一个模拟的、但格式化的物流轨迹数据。(在实际项目中,这里会替换为真实的 API 调用代码)
- 后端返回数据:后端将 JSON 格式的物流数据返回给前端。
- 前端展示结果: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步:如何运行
-
安装 Flask:如果你的电脑上没有安装 Python 和 Flask,需要先安装,打开终端或命令提示符,运行:
pip install Flask
-
启动服务器:在
logistics_tracker文件夹下,打开终端,运行:python app.py
你会看到类似下面的输出,表示服务器已经启动:
* Serving Flask app 'app' * Debug mode: on * Running on http://127.0.0.1:5000 -
访问界面:打开你的网页浏览器(如 Chrome, Firefox),在地址栏输入
http://127.0.0.1:5000并按回车。 -
测试查询:
- 在输入框中输入
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
文章转载或复制请以超链接形式并注明出处广联货运物流



