问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

火车票查询

创作时间:
作者:
@小白创作中心

火车票查询

引用
CSDN
7
来源
1.
https://blog.csdn.net/qq_42371932/article/details/136804185
2.
https://blog.csdn.net/Nanran6/article/details/136564774
3.
https://blog.csdn.net/m0_73979992/article/details/138642159
4.
https://github.com/yutao8/starred
5.
https://blog.csdn.net/qq_39980136/article/details/88846492
6.
https://developer.mozilla.org/zh-CN/docs/Learn_web_development/Extensions/Server-side/Django/Deployment#%E4%BB%80%E4%B9%88%E6%98%AF%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%EF%BC%9F
7.
https://developer.mozilla.org/zh-CN/docs/Learn_web_development/Extensions/Server-side/Django/Models

在本教程中,我们将使用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框架的核心组件和开发流程。这个项目可以进一步扩展,例如添加用户认证、历史查询记录等功能,以满足更复杂的需求。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号