火车票查询
火车票查询
在本教程中,我们将使用Django框架搭建一个简单的火车票信息查询系统,实现从广元到汉中的高铁票价查询功能。这个项目不仅展示了后端开发的技术细节,还提供了前端展示的基本思路。无论是学习还是实际应用,都是一个很好的案例。
1. 创建Django项目和应用
首先,我们需要创建一个新的Django项目和应用。在命令行中依次执行以下命令:
django-admin startproject train_ticket_project
cd train_ticket_project
python manage.py startapp ticket_query
这将创建一个名为train_ticket_project
的Django项目,并在其中创建一个名为ticket_query
的应用。
2. 设计模型
在ticket_query/models.py
中,我们需要定义一个模型来存储车次信息。虽然在这个简单的示例中我们不会实际存储数据,但定义模型有助于理解Django ORM的工作方式。
from django.db import models
class TrainTicket(models.Model):
train_number = models.CharField(max_length=10)
departure_station = models.CharField(max_length=50)
arrival_station = models.CharField(max_length=50)
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return f"{self.train_number} - {self.departure_station} to {self.arrival_station}"
3. 编写视图函数
在ticket_query/views.py
中,我们需要创建一个视图函数来处理用户的查询请求。这里我们将使用12306的API来获取实时票价信息。
import requests
from django.shortcuts import render
def query_ticket(request):
if request.method == 'POST':
departure_station = request.POST.get('departure_station')
arrival_station = request.POST.get('arrival_station')
# 调用12306 API获取票价信息
api_url = "https://kyfw.12306.cn/otn/leftTicket/query"
params = {
'leftTicketDTO.train_date': '2023-10-01',
'leftTicketDTO.from_station': 'GYW',
'leftTicketDTO.to_station': 'HZH',
'purpose_codes': 'ADULT'
}
response = requests.get(api_url, params=params)
data = response.json()
# 处理API返回的数据
tickets = []
for result in data['data']['result']:
ticket_info = result.split('|')
train_number = ticket_info[3]
price = ticket_info[30] # 假设30位置是票价
tickets.append({'train_number': train_number, 'price': price})
return render(request, 'ticket_query/result.html', {'tickets': tickets})
return render(request, 'ticket_query/query.html')
4. 配置URL路由
在ticket_query/urls.py
中,我们需要配置URL路由,将查询请求映射到query_ticket
视图。
from django.urls import path
from . import views
urlpatterns = [
path('query/', views.query_ticket, name='query_ticket'),
]
同时,不要忘记在项目的urls.py
中包含应用的URL配置:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('ticket_query.urls')),
]
5. 创建前端模板
最后,我们需要创建两个简单的HTML模板:一个用于显示查询表单,另一个用于显示查询结果。
在ticket_query/templates/ticket_query/query.html
中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>火车票查询</title>
</head>
<body>
<h1>火车票查询</h1>
<form method="post" action="{% url 'query_ticket' %}">
{% csrf_token %}
<label for="departure_station">出发站:</label>
<input type="text" id="departure_station" name="departure_station" value="广元">
<label for="arrival_station">到达站:</label>
<input type="text" id="arrival_station" name="arrival_station" value="汉中">
<button type="submit">查询</button>
</form>
</body>
</html>
在ticket_query/templates/ticket_query/result.html
中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>查询结果</title>
</head>
<body>
<h1>查询结果</h1>
<table border="1">
<tr>
<th>车次</th>
<th>票价</th>
</tr>
{% for ticket in tickets %}
<tr>
<td>{{ ticket.train_number }}</td>
<td>{{ ticket.price }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
运行项目
完成以上步骤后,你可以运行Django开发服务器来测试你的应用:
python manage.py runserver
打开浏览器,访问http://127.0.0.1:8000/query/
,你应该能看到查询表单。输入出发站和到达站,点击查询按钮,你将看到从广元到汉中的高铁票价信息。
通过这个简单的Django项目,我们不仅实现了基本的火车票信息查询功能,还展示了Django框架的核心组件和开发流程。这个项目可以进一步扩展,例如添加用户认证、历史查询记录等功能,以满足更复杂的需求。