django旅游景点查询与推荐小程序的设计与实现 毕业设计-附源码90603

目  录

摘要

1 绪论

1.1研究背景

1.2开发现状

1.3爬虫技术

2 旅游景点查询与推荐小程序系统分析

2.1 可行性分析

2.1.1 技术可行性分析

2.1.2 经济可行性分析

2.1.3 法律可行性分析

2.2 系统功能分析

2.2.1 功能性分析

2.2.2 非功能性分析

2.3 系统用例分析

2.4 系统业务流程分析

2.5本章小结

3 旅游景点查询与推荐小程序总体设计

3.1 系统功能模块设计

3.1.1整体功能模块设计

3.1.2用户模块设计

3.1.3 评论管理模块设计

3.1.4景点管理模块设计

3.2 数据库设计

3.2.1 数据库概念结构设计

3.3.2 数据库逻辑结构设计

3.4本章小结

4 旅游景点查询与推荐小程序详细设计与实现

4.1用户功能模块

4.1.1 前台首页界面

4.1.2 用户注册界面

4.1.3 用户登录界面

4.1.4旅游资讯详情界面

4.1.5景点详情界面

4.1.6门票预订界面

4.1.7路线推荐界面

4.2管理员功能模块

4.2.1系统用户管理界面

4.2.2 景点信息管理界面

4.2.3路线推荐管理界面

4.2.4点评数量管理界面...................................................................................................................

4.2.5资源管理界面...........................................................................................................................

5系统测试

5.1 系统测试用例

5.2 系统测试结果

结论

参考文献

  

摘要

本文设计并实现了一个基于Django框架的旅游景点查询与推荐小程序,结合爬虫技术实现了景点信息的获取和更新。该小程序旨在为用户提供便捷的景点信息查询、线路推荐、景点排名和门票预订服务。通过爬虫技术,系统可以自动从多个旅游网站上获取最新的景点信息,并进行持续更新。用户可以通过小程序浏览各个景点的详细信息,包括景点介绍、图片、开放时间等。系统根据用户的偏好和历史查询记录,智能推荐符合其兴趣的旅游线路,提供个性化的旅行建议。同时,用户还可以查看景点的排名和评价,了解其他游客的反馈和体验,帮助其选择更具吸引力的景点。为了方便用户的旅行安排,小程序还提供门票在线预订功能,让用户可以直接购买景点门票,节省排队等待的时间。

通过整合现代化技术和友好的用户界面设计,该旅游景点查询与推荐小程序为用户提供了一个便捷、全面且个性化的旅游体验平台。通过爬虫技术的应用,系统可以及时更新景点信息,提供准确和最新的旅游资讯,为用户提供更好的服务。

关键词:Python;Django;旅游景点查询与推荐小程序 ;MySQL

Abstract

This article designs and implements a tourist attraction query and recommendation mini program based on the Django framework, and combines crawler technology to obtain and update attraction information. This mini program aims to provide users with convenient scenic spot information inquiry, route recommendation, scenic spot ranking, and ticket booking services. Through web scraping technology, the system can automatically obtain the latest attraction information from multiple tourism websites and continuously update it. Users can browse detailed information about various attractions through the mini program, including attractions introduction, pictures, opening hours, etc. The system intelligently recommends travel routes that meet the interests of users based on their preferences and historical query records, providing personalized travel suggestions. At the same time, users can also view the ranking and reviews of attractions, understand feedback and experiences from other tourists, and help them choose more attractive attractions. For the convenience of user travel arrangements, the mini program also provides an online ticket booking function, allowing users to directly purchase scenic spot tickets and save waiting time in queues.

By integrating modern technology and user-friendly interface design, this tourist attraction query and recommendation mini program provides users with a convenient, comprehensive, and personalized travel experience platform. Through the application of crawler technology, the system can timely update scenic spot information, provide accurate and up-to-date tourism information, and provide better services for users.

Keywords: Python; Django; Tourist attraction inquiry and recommendation mini program; MySQL

1 绪论

1.1研究背景

旅游业的快速发展使得越来越多的人选择旅行,而旅游景点的选择和推荐成为了一个重要问题。传统的旅游景点查询方式存在信息不对称、繁琐、效率低下等问题,需要一个更加便捷、智能化的旅游景点查询与推荐系统。首先,该小程序可以通过整合各类旅游景点信息和用户评价,提供一个集中的平台供用户快速查询和了解各个景点的详细信息。其次,通过利用用户的历史偏好和位置信息,小程序可以根据个性化推荐算法为用户推荐符合其兴趣和需求的旅游景点,提高用户满意度和旅行体验。此外,小程序还可以提供景点的实时动态、路线规划、交通导航等功能,帮助用户更好地组织行程和安排旅行。

这样的旅游景点查询与推荐小程序对于用户有着重要的意义。首先,它提供了一个方便、快捷的方式来获取旅游景点信息,帮助用户更好地了解和选择旅行目的地。其次,个性化推荐功能可以帮助用户发现新的旅游景点,丰富旅行体验,提高用户满意度。此外,小程序还为用户提供了便捷的路线规划和交通导航等服务,提升了旅行的便利性和安全性。

开展旅游景点查询与推荐小程序的研究具有重要的背景意义。通过提供方便、智能化的旅游景点信息查询和个性化推荐功能,该小程序可以提升用户旅行体验,促进旅游行业的发展,并为相关研究和实践提供有益的借鉴。

1.2开发现状

旅游景点查询与推荐小程序的开发在当前处于快速发展阶段。随着智能手机的普及和移动互联网的快速发展,越来越多的旅游企业、创业者和开发者开始重视这一领域的技术研究和应用。目前,已经有许多旅游景点查询与推荐小程序面世并受到用户的欢迎。这些小程序利用现代化的前端技术如微信小程序、React Native等,结合后台数据管理和算法推荐模型,为用户提供了全面的旅游景点信息查询和个性化推荐服务。通过整合各类旅游景点数据、用户评价、地理位置等信息,这些小程序能够根据用户的兴趣、偏好和位置等因素,智能化地推荐符合用户需求的旅游景点,提高用户的旅行体验。同时,许多旅游企业也积极参与到旅游景点查询与推荐小程序的开发中,借助自身的资源和优势,推出具有特色和差异化的小程序产品。他们通过与景点合作、提供实时的旅游信息和优惠活动等方式,为用户带来更多的价值和选择,增强用户对小程序的粘性和忠诚度。然而,目前旅游景点查询与推荐小程序仍面临一些挑战和改进空间。例如,数据质量的保证、个性化推荐算法的精准性和效果评估、用户隐私保护等问题仍需要进一步研究和解决。此外,小程序的功能和用户体验方面也可以不断进行优化和升级,以满足用户多样化的需求。

旅游景点查询与推荐小程序的开发已经取得了一定的成果,但仍有进一步的发展空间。随着技术的不断进步和用户需求的变化,相信未来会有更多创新和突破,为用户提供更加便捷、智能化的旅游服务体验。

1.3爬虫技术

网络是搜索引擎获取Internet资讯的重要渠道。爬虫可以分为两类:传统型和聚焦型。传统爬虫通常会先收集一个或多个初始网页URL,然后根据这些URL进行爬取,并在队列中不断加入新的URL,直到到达一个具体的停留时间。也就是说需要的功能可以通过源代码分析技术来实现。

重点关注网页分析算法,通过过滤掉与主题无关的网页,只保留有价值的网页,然后把它们加入搜索引擎的URL队列中。接下来,它会根据特定的搜索策略,从队列中选择下一个要爬取的网页网址,并在系统设定的最终目标前不断重复这一过程。此外,系统还会对所有被爬虫抓取的网页进行存储,为方便爬虫查询检索的用户提供索引,并对其进行分析筛选。通过对FoucusCloud的分析,获取有价值的信息,从而有效地指导和建议今后的抓取工作。

2 旅游景点查询与推荐小程序系统分析

系统需求分析是系统开发的一个关键环节,它在系统的设计和实现上起到了一个承上启下的位置。系统需求分析是对所需要做的系统进行一个需求的挖掘,如果分析的准确可以精准的解决现实中碰到的问题。如果分析不到位会影响后期系统的实现。一个系统的优秀程度需求分析也是占据了非常大的比例,如果需求分析不到位,后面的系统设计要实现就是一个偏离导航的设计。

2.1 可行性分析

系统可行行分析是对系统对系统可行性进行一个探讨。在探讨系统的可行性上我们主要从技术上的可行性和经济上的可行性以及法律层面的可行性上进行分析,如果三个层面度通过,我们则认为系统是比较可行的。

2.1.1 技术可行性分析

旅游景点查询与推荐小程序在数据的存储上使用的MySQL数据库,在旅游景点查询与推荐小程序开发中使用了Python、pycharm这些开发工具的使用,能够给我们的编写工作带来许多的便利。系统使用B/S模式进行开发,使系统的可扩展性和维护性更佳,减少系统配置代码,简化编程代码,目前B/S模式是目前最受欢迎的一种模式。

2.1.2 经济可行性分析

从经济可行性上看项目在开发阶段需要一台开发PC,在生产阶段需要web服务器和数据库服务器。一台个人PC从经济上来看也不是太多问题,在后期的系统部署生产上来说,服务器的投入也不会过高,在经济层面上是一个比较可行的。

2.1.3 法律可行性分析

系统从法律层面上来没有对第三方有其他放有法律层面的问题,系统数据库采用的MySQL 开源社区数据库、框架采用的是开源的Django。系统资讯和相关内容也是法律层面的。在源码的管理上采用git开源进行管理,所以在法律可行性上是成立的。

2.2 系统功能分析

2.2.1 功能性分析

旅游景点查询与推荐小程序我划分为了注册用户和管理员这两大部分。

注册用户管理模块:

(1)用户注册登录:游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现门票预订操作,就必须有这个系统的账号,如果没有账号的话,可以注册用户进行相关的操作,同时用户还可以通过“我的”这以按钮对个人信息以及操作的信息进行管控。

(2)查看旅游景点查询与推荐小程序的首页信息:旅游景点查询与推荐小程序的首页信息包含了首页、通知公告、旅游资讯、景点信息等。

(3)通知公告:当用户点击“通知公告”这一菜单按钮,会显示管理员在后台发布的所有的通知公告,可以查看详情;

(4)景点信息:用户可以查看景点信息推荐信息,在查询到自己想要了解的景点信息的时候,可以进入查看详细的介绍,点击“门票预订”这一按钮以后会跳转到门票预订信息填写的界面,根据提示填写好门票预订的信息,点击“提交”以后预门票预订就完成了,在景点信息详情这个界面,同时支持用户对喜欢的景点信息进行点赞、收藏、评论的功能。

(5)旅游资讯:用户点击“旅游资讯”菜单显示所有的旅游资讯信息,可以按照条件进行旅游资讯的筛选或者输入关键词进行局部搜索,点击可以进入旅游资讯详细展示界面,在此界面用户可以收藏、点赞和评论。

管理员管理模块:

(1)登录:管理员在后台可以输入用户名+密码进行登录,管理员的用户名和密码是在数据库中直接设定好的。

(2)系统管理:管理员点击“系统管理”菜单可以对首页展示的轮播图进行增删改查。

(3)通知公告:管理员点击“通知公告”菜单可以查看到系统中的所有通知公告信息,对已经存在的通知公告,管理员可以修改,也可以添加新的通知公告或者删除通知公告。

(4)系统用户:管理员可以对旅游景点查询与推荐小程序中的管理员以及前台注册的游客用户进行增删改查。

(5)景点信息:管理员点击“景点信息”这一菜单会所有的景点信息,管理员可以对景点信息进行增删改查操作。

(6)路线推荐:管理员点击“路线推荐”菜单可以对路线推荐进行增删改查。

(7)门票预订:管理员点击“门票预订”菜单可以对门票预订进行管控。

(8)景点排名:管理员点击“景点排名”菜单可以对景点排名进行增删改查。

(9)资源管理:管理员点击“资源管理”菜单能够对其下子菜单资讯列表和资讯的分类进行增删改查。

2.2.2 非功能性分析

旅游景点查询与推荐小程序的非功能性需求比如旅游景点查询与推荐小程序的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:

3-1旅游景点查询与推荐小程序非功能需求表

安全性

主要指旅游景点查询与推荐小程序数据库的安装,数据库的使用和密码的设定必须合乎规范。

可靠性

可靠性是指旅游景点查询与推荐小程序能够按照用户提交的指示进行操作,经过测试,可靠性90%以上。

性能

性能是影响旅游景点查询与推荐小程序占据市场的必要条件,所以性能最好要佳才好。

可扩展性

比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。

易用性

用户只要跟着旅游景点查询与推荐小程序的页面展示内容进行操作,就可以了。

可维护性

旅游景点查询与推荐小程序开发的可维护性是非常重要的,经过测试,可维护性没有问题

2.3 系统用例分析

旅游景点查询与推荐小程序的完整UML用例图分别是图2-1和图2-2。

图2-1就是注册用户角色的用例展示。

图2-1 旅游景点查询与推荐小程序注册用户角色用例图

图2-2就是管理员角色的用例展示。

图2-2 旅游景点查询与推荐小程序管理员角色用例图

2.4 系统业务流程分析

 (1)数据流程

开发旅游景点查询与推荐小程序最主要的一个目的就是实现用户对景点的门票预订,图2-3就是系统的数据流图。

图2-3景点门票预订操作展开图

2)业务流程

分析完旅游景点查询与推荐小程序的数据流,那么接下来我们来看系统的业务流程,图2-4就是业务流程图:

图2-4业务流程图

2.5本章小结

本章主要通过对旅游景点查询与推荐小程序的可行性分析、功能需求分析、系统用例分析、系统业务流程分析,确定整个旅游景点查询与推荐小程序要实现的功能。同时也为旅游景点查询与推荐小程序的代码实现和测试提供了标准。

3 旅游景点查询与推荐小程序总体设计

本章主要讨论的内容包括旅游景点查询与推荐小程序的功能模块设计、数据库系统设计。

3.1 系统功能模块设计

3.1.1整体功能模块设计

在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本旅游景点查询与推荐小程序中的用例。那么接下来就要开始对本旅游景点查询与推荐小程序的架构、主要功能和数据库开始进行设计。旅游景点查询与推荐小程序根据前面章节的需求分析得出,其总体设计模块图如图3-1所示。

图3-1 旅游景点查询与推荐小程序功能模块图

3.1.2用户模块设计

本系统的用户包括管理员和用户两种用户模块的功能基本是相同的,用户比管理员多了一个注册功能,所以以用户模块的结构图为例进行分析,用户模块结构图为例进行分析,如下图:

图3-2用户模块结构图

3.1.3 评论管理模块设计

旅游景点查询与推荐小程序是一个交流性质的公开平台,用户在平台上提交评论,增加用户之间的互动性。但是同时也为了更好的规范评论的内容,给予管理员删除不合适的评论的功能,所以需要专门设计一个评论管理模块,具体的结构图如下:

图3-3评论管理模块结构图

3.1.4景点管理模块设计

旅游景点查询与推荐小程序是中需要存储不少景点信息,其模块功能结构,具体的结构图如下:

图3-4景点信息模块结构图

3.2 数据库设计

数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。

3.2.1 数据库概念结构设计

下面是整个旅游景点查询与推荐小程序中主要的数据库表总E-R实体关系图。

图3-6 旅游景点查询与推荐小程序总E-R关系图

3.3.2 数据库逻辑结构设计

通过上一小节中旅游景点查询与推荐小程序中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。

表attraction_information (景点信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

attraction_information_id

int

10

0

N

Y

景点信息ID

2

attraction_name

varchar

64

0

Y

N

景点名称

3

scenic_spot_pictures

varchar

255

0

Y

N

景点图片

4

classification_of_tourist_attractions

varchar

64

0

Y

N

景点分类

5

strategy_quantity

int

10

0

Y

N

0

攻略数量

6

number_of_ratings

int

10

0

Y

N

0

评分数量

7

number_of_comments

int

10

0

Y

N

0

点评数量

8

scenic_spot_ranking

int

10

0

Y

N

0

景点排名

9

longitude_of_tourist_attractions

varchar

64

0

Y

N

景点经度

10

attraction_latitude

varchar

64

0

Y

N

景点纬度

11

details_link

varchar

255

0

Y

N

详情链接

12

overview_of_scenic_spots

text

65535

0

Y

N

景点概述

13

attraction_address

text

65535

0

Y

N

景点地址

14

opening_hours

text

65535

0

Y

N

开放时间

15

ticket_information

text

65535

0

Y

N

门票信息

16

introduction_to_scenic_spots

text

65535

0

Y

N

景点简介

17

transportation_guidelines

text

65535

0

Y

N

交通指南

18

hits

int

10

0

N

N

0

点击数

19

praise_len

int

10

0

N

N

0

点赞数

20

recommend

int

10

0

N

N

0

智能推荐

21

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

22

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表comment (评论)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

comment_id

int

10

0

N

Y

评论ID:

2

user_id

int

10

0

N

N

0

评论人ID:

3

reply_to_id

int

10

0

N

N

0

回复评论ID:空为0

4

content

longtext

2147483647

0

Y

N

内容:

5

nickname

varchar

255

0

Y

N

昵称:

6

avatar

varchar

255

0

Y

N

头像地址:[0,255]

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

9

source_table

varchar

255

0

Y

N

来源表:

10

source_field

varchar

255

0

Y

N

来源字段:

11

source_id

int

10

0

N

N

0

来源ID:

表my_posts (我的发布)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

my_posts_id

int

10

0

N

Y

我的发布ID

2

user_account

int

10

0

Y

N

0

用户账号

3

user_name

varchar

64

0

Y

N

用户姓名

4

user_phone_number

varchar

64

0

Y

N

用户电话

5

attraction_name

varchar

64

0

Y

N

景点名称

6

classification_of_tourist_attractions

varchar

64

0

Y

N

景点分类

7

comment_time

date

10

0

Y

N

评论时间

8

comment_content

text

65535

0

Y

N

评论内容

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表number_of_comments (点评数量)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

number_of_comments_id

int

10

0

N

Y

点评数量ID

2

attraction_name

varchar

64

0

Y

N

景点名称

3

strategy_quantity

int

10

0

Y

N

0

攻略数量

4

number_of_ratings

int

10

0

Y

N

0

评分数量

5

number_of_comments

int

10

0

Y

N

0

点评数量

6

number_of_hikers

int

10

0

Y

N

0

驴友数量

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表recommended_routes (线路推荐)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

recommended_routes_id

int

10

0

N

Y

线路推荐ID

2

attraction_name

varchar

64

0

Y

N

景点名称

3

scenic_spot_pictures

varchar

255

0

Y

N

景点图片

4

departure_location

varchar

64

0

Y

N

出发地点

5

destination

varchar

64

0

Y

N

到达地点

6

recommended_routes

varchar

64

0

Y

N

线路推荐

7

line_details

text

65535

0

Y

N

线路详情

8

hits

int

10

0

N

N

0

点击数

9

praise_len

int

10

0

N

N

0

点赞数

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表registered_users (注册用户)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

registered_users_id

int

10

0

N

Y

注册用户ID

2

user_name

varchar

64

0

Y

N

用户姓名

3

user_phone_number

varchar

16

0

Y

N

用户电话

4

examine_state

varchar

16

0

N

N

已通过

审核状态

5

user_id

int

10

0

N

N

0

用户ID

6

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

7

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表scenic_spot_ranking (景点排名)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

scenic_spot_ranking_id

int

10

0

N

Y

景点排名ID

2

attraction_name

varchar

64

0

Y

N

景点名称

3

classification_of_tourist_attractions

varchar

64

0

Y

N

景点分类

4

attraction_address

varchar

64

0

Y

N

景点地址

5

number_of_ratings

int

10

0

Y

N

0

评分数量

6

scenic_spot_ranking

int

10

0

Y

N

0

景点排名

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表ticket_booking (门票预订)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

ticket_booking_id

int

10

0

N

Y

门票预订ID

2

user_account

int

10

0

Y

N

0

用户账号

3

user_name

varchar

64

0

Y

N

用户姓名

4

user_phone_number

varchar

64

0

Y

N

用户电话

5

attraction_name

varchar

64

0

Y

N

景点名称

6

classification_of_tourist_attractions

varchar

64

0

Y

N

景点分类

7

booking_time

date

10

0

Y

N

预订时间

8

booking_quantity

int

10

0

Y

N

0

预订数量

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

3.4本章小结

整个旅游景点查询与推荐小程序的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。

4 旅游景点查询与推荐小程序详细设计与实现

旅游景点查询与推荐小程序的详细设计与实现主要是根据前面的旅游景点查询与推荐小程序的需求分析和旅游景点查询与推荐小程序的总体设计来设计页面并实现业务逻辑。主要从旅游景点查询与推荐小程序界面实现、业务逻辑实现这两部分进行介绍。

4.1用户功能模块

4.1.1 前台首页界面

当进入旅游景点查询与推荐小程序的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,下面是轮播图,再往下是公告信息,其主界面展示如下图4-1所示。

图4-1 前台首页界面图

4.1.2 用户注册界面

旅游景点查询与推荐小程序的游客和注册用户时可以进行注册登录,当用户右上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-2所示。

图4-2注册界面图

注册关键代码如下:

  def Register(self, ctx):

        print("===================注册=====================")

        userService = service_select("user")

        body = ctx.body

        if "username" not in body and body["username"] == '':

            return ctx.response(json.dumps({

                "error": {

                    "code": 70000,

                    "message": "用户名不能为空",

                }

            }, ensure_ascii=False))

        if "user_group" not in body and body["user_group"] == '':

            return ctx.response(json.dumps({

                "error": {

                    "code": 70000,

                    "message": "用户组不能为空",

                }

            }, ensure_ascii=False))

        if "password" not in body and body["password"] == '':

            return ctx.response(json.dumps({

                "error": {

                    "code": 70000,

                    "message": "密码不能为空",

                }

            }, ensure_ascii=False))

        post_param = body

        post_param['nickname'] = body["nickname"] or ""

        post_param['password'] = md5hash(body["password"])

        obj = userService.Get_obj({"username": post_param['username']}, {"like": False})

        if obj:

            return ctx.response(json.dumps({

                "error": {

                    "code": 70000,

                    "message": "用户名已存在",

                }

            }, ensure_ascii=False))

        ret = {

            "error": {

                "code": 70000,

                "message": "注册失败",

            }

        }

        bl = userService.Add(post_param)

        if bl:

            ret = {

                "result": {

                    "bl": True,

                    "message": "注册成功"

                }

            }

        return ctx.response(json.dumps(ret, ensure_ascii=False))

4.1.3 用户登录界面

旅游景点查询与推荐小程序中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当注册用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到旅游景点查询与推荐小程序的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。

图4-3用户登录界面图

登录的逻辑代码如下所示。

 def Login(self, ctx):

        print("===================登录=====================")

        ret = {

            "error": {

                "code": 70000,

                "message": "账户不存在",

            }

        }

        body = ctx.body

        password = md5hash(body["password"]) or ""

        obj = service_select("user").Get_obj(

            {"username": body["username"]}, {"like": False}

        )

        if obj:

            user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})

            if user_group and user_group['source_table'] != '':

                user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']},                                                                       {"like": False})

                if user_obj['examine_state'] == '未通过':

                    ret = {

                        "error": {

                            "code": 70000,

                            "message": "账户未通过审核",

                        }

                    }

                    return ret

                if user_obj['examine_state'] == '未审核':

                    ret = {

                        "error": {

                            "code": 70000,

                            "message": "账户未审核",

                        }

                    }

                    return ret

            if obj["state"] == 1:

                if obj["password"] == password:

                    timeout = timezone.now()

                    timestamp = int(time.mktime(timeout.timetuple())) * 1000

                    token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))

                    ctx.request.session[token] = obj["user_id"]

                    service_select("access_token").Add(

                        {"token": token, "user_id": obj["user_id"]}

                    )

                    obj["token"] = token

                    ret = {

                        "result": {"obj": obj}

                    }

                else:

                    ret = {

                        "error": {

                            "code": 70000,

                            "message": "密码错误",

                        }

                    }

            else:

                ret = {

                    "error": {

                        "code": 70000,

                        "message": "用户账户不可用,请联系管理员",

                    }

                }

        return ctx.response(json.dumps(ret, ensure_ascii=False))

4.1.4旅游资讯详情界面

用户点击“旅游资讯”菜单显示所有的旅游资讯信息,可以按照条件进行旅游资讯的筛选或者输入关键词进行局部搜索,点击可以进入旅游资讯详细展示界面,在此界面用户可以收藏、点赞和评论,旅游资讯详情界面如下图4-4所示。

图4-4旅游资讯详情界面图

4.1.5景点详情界面

当访客点击“景点信息”后就可以看到所有的景点信息,可以输入门票信息进行搜索查询,选择你想要了解的景点后将会进入该款景点信息的详情界面,可以了解到该景点的景点名称、景点简介、交通指南等,同时可以对点击下方的“门票预订”、“点赞”、“收藏”、“发布评论”进行相关操作。景点详情界面如下图4-5所示。

图4-5景点信息详情界面图

4.1.6门票预订界面

当用户在景点信息详情界面想要进行门票预订信息,点击下方的“门票预订”按钮,就会跳转到门票预订信息填写界面,根据界面提示输入门票预订信息,点击“提交”按钮,门票预订就完成了,门票预订界面如下图4-6所示。

                    

图4-6门票预订界面图

4.1.7路线推荐界面

用户点击“路线推荐”菜单可以查看所有路线推荐信息,可以按照条件查看路线推荐,或者输入关键词进行查询,点击可以进入路线推荐详细展示界面,在此界面用户可以收藏、点赞和评论,路线推荐界面如下图4-7所示。

                          

图4-7 路线推荐界面图

4.2管理员功能模块

4.2.1系统用户管理界面

管理员点击“系统用户”菜单可以对系统中存在的用户进行管理,包含了管理员和注册用户。界面如下图4-8所示。

图4-8系统用户管理界面图

系统用户管理关键代码如下:

  def Add(self, ctx):

body = ctx.body

unique = self.config.get("unique")

obj = None

if unique:

qy = {}

for i in range(len(unique)):

key = unique[i]

qy[key] = body.get(key)

obj = self.service.Get_obj(qy)

if not obj:

error = self.Add_before(ctx)

if error["code"]:

return {"error": error}

error = self.Events("add_before", ctx, None)

if error["code"]:

return {"error": error}

result = self.service.Add(body, self.config)

if self.service.error:

return {"error": self.service.error}

res = self.Add_after(ctx, result)

if res:

result = res

res = self.Events("add_after", ctx, result)

if res:

result = res

return {"result": result}

else:

return {"error": {"code": 10000, "message": "已存在"}}

4.2.2 景点信息管理界面

点击“景点信息”按钮会显示自己发布的所有的景点信息,如果想要添加新的景点信息,点击“添加”“导入”“下载导入文档”按钮根据提示输入景点信息,点击“提交”后在景点信息界面就可以显示了,如果信息有错,点击“编辑”按钮可以对景点信息进行更新维护,也可以直接删除某一景点信息,还可以管理用户提交评论信息。界面如下图4-9所示。

图4-9景点信息管理界面图

景点信息管理关键代码如下:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

if "field" in query:

field = query.pop("field")

config_plus["field"] = field

if "page" in query:

config_plus["page"] = query.pop("page")

if "size" in query:

config_plus["size"] = query.pop("size")

if "orderby" in query:

config_plus["orderby"] = query.pop("orderby")

if "like" in query:

config_plus["like"] = query.pop("like")

if "groupby" in query:

config_plus["groupby"] = query.pop("groupby")

count = self.service.Count(query)

lst = []

if self.service.error:

return {"error": self.service.error}

elif count:

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

if self.service.error:

return {"error": self.service.error}

self.interact_list(ctx, lst)

return {"result": {"list": lst, "count": count}}

4.2.3路线推荐管理界面

管理员点击“路线推荐管理”菜单可以查看到系统中的所有路线推荐,对已经存在的路线推荐,管理员可以修改,也可以添加新的路线推荐或者删除路线推荐,还可以管理评论信息。界面如下图4-10所示。

图4-10路线推荐管理界面图

路线推荐管理关键代码如下:

 def Del(self, ctx):

if len(ctx.query) == 0:

errorMsg = {"code": 30000, "message": "删除条件不能为空!"}

return errorMsg

result = self.service.Del(ctx.query, self.config)

if self.service.error:

return {"error": self.service.error}

return {"result": result}

4.2.4点评数量管理界面

点击“点评数量”按钮会显示自己发布的所有的点评数量,如果想要添加新的点评数量,点击“添加”“导入”“下载导入文档”按钮根据提示输入点评数量,点击“提交”后在点评数量界面就可以显示了,如果信息有错,点击“编辑”按钮可以对点评数量进行更新维护,也可以直接删除某一点评数量,界面如下图4-11所示。

图4-11 点评数量管理界面图

4.2.5 资源管理界面

管理员点击“资源管理”菜单能够对其下子菜单资讯列表和资讯的分类进行增删改查。界面如下图4-12所示。

图4-12资源管理界面图

5系统测试

5.1 系统测试用例

系统测试包括:用户登录功能测试、景点信息展示功能测试、景点信息添加、景点信息搜索、密码修改、门票预订功能测试,如表5-1、5-2、5-3、5-4、5-5、5-6所示:

用户登录功能测试:

表5-1 用户登录功能测试表

用例名称

用户登录系统

目的

测试用户通过正确的用户名和密码可否登录功能

前提

未登录的情况下

测试流程

1) 进入登录页面

2) 输入正确的用户名和密码

预期结果

用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入

实际结果

实际结果与预期结果一致

景点信息查看功能测试:

表5-2 景点信息查看功能测试表

用例名称

景点信息查看

目的

测试景点信息查看功能

前提

用户登录

测试流程

点击景点信息列表

预期结果

可以查看到所有景点信息

实际结果

实际结果与预期结果一致

管理员添加景点信息界面测试:

表5-3 管理员添加景点信息界面测试表

用例名称

添加景点信息测试用例

目的

测试景点信息添加功能

前提

管理员用户正常登录情况下

测试流程

1)管理员点击景点信息,然后点击添加后并填写信息。

2)点击进行提交。

预期结果

提交以后,页面首页会显示新的景点信息 

实际结果

实际结果与预期结果一致

景点信息搜索功能测试:

表5-4景点信息搜索功能测试表

用例名称

景点信息搜索测试

目的

测试景点信息搜索功能

前提

测试流程

1)在搜索框填入搜索关键字。

2)点击搜索按钮。

预期结果

页面显示包含有搜索关键字的景点信息

实际结果

实际结果与预期结果一致

密码修改搜索功能测试:

表5-5 密码修改功能测试表

用例名称

密码修改测试用例

目的

测试管理员密码修改功能

前提

管理员用户正常登录情况下

测试流程

1)管理员密码修改并完成填写。

2)点击进行提交。

预期结果

使用新的密码可以登录

实际结果

实际结果与预期结果一致

门票预订功能测试:

表5-6门票预订功能测试表

用例名称

门票预订测试用例

目的

测试用户门票预订功能

前提

用户正常登录情况下

测试流程

1)搜索查看景点信息,点击门票预订。

2)填写门票预订,点击进行提交。

预期结果

预订成功

实际结果

实际结果与预期结果一致

5.2 系统测试结果

通过编写旅游景点查询与推荐小程序的测试用例,已经检测完毕用户登录模块、景点信息展示模块、景点信息添加模块、景点信息搜索模块、密码修改模块、门票预订模块功能测试,通过这6大模块为旅游景点查询与推荐小程序的后期推广运营提供了强力的技术支撑。

结论

在开发本旅游景点查询与推荐小程序之前我胸有成竹,觉得很简单,但在实际的开发中我发现了自身的很多问题,许多编程思想和方法都还没有掌握牢靠,django框架开发技术,通过开发这个旅游景点查询与推荐小程序我成长了很多,懂得了做什么事情都要脚踏实地,不能眼高手低,在本次旅游景点查询与推荐小程序的开发中我逐渐掌握逐渐熟悉的技术。

本次旅游景点查询与推荐小程序的开发中我还学会了例如良好的编程思想和完善的规划思想。在着手编程之前需要罗列出程序框架的大概,脑海中构建出程序的主题框架。做好这一步我们才能胸有成竹的经行开发项目。当设计框架了熟于心之后,需要思考本次编程所需的主要知识点和技术点,并充分学习。如此一来项目的开发才能循序渐进、如丝般顺滑,长久以往就能养成良好的开发习惯。一个程序好不好还要看出的bug多不多,如果在项目完成前做好bug的查验与预防可能发生的事故才能保证程序的稳定长久性运行。如果项目在完工后出现各种问题自己,那么在进入社会后,不仅会给公司团队带来麻烦和增加不必要的工作,还会导致客户流失,公司对自己的评价下降。

在本次项目中我也暴露了诸多问题。对于Java的编程知识有所欠缺,环境配置和算法上出现诸多问题,时常导致项目运行出错,或者目标的实现有问题。或者实现想法时算法未优化,使得代码冗长,程序运行不顺畅。

参考文献

[1]王晓俊,易雪,赵旭等. 微信小程序在手术室医疗设备管理中的应用 [J]. 检验医学与临床, 2024, 21 (04): 552-555.

[2]曹悦,李帅,贾蒙. 微信小程序页面动态化方法、系统、设备及储存介质[P]. 北京市: CN117573277A, 2024-02-20.

[3]孙梦菲,周天源,王天澍. 基于微信小程序的校园社团管理系统设计与实现 [J]. 现代信息科技, 2024, 8 (03): 40-44.

[4]Xiao J ,Zhou H ,Lei Q , et al. Attention-Mechanism-Based Face Feature Extraction Model for WeChat Applet on Mobile Devices [J]. Electronics, 2024, 13 (1):

[5]Wu J ,Chen N ,Xia H , et al. Design and application of a game‐based WeChat mini‐program for screening cognitive impairments in Chinese older adults [J]. Alzheimer's & Dementia, 2023, 19 (S11):

[6]Wu J ,Chen N ,Xia H , et al. Design and development of the intelligent voice recognition‐based cognitive assessment WeChat mini‐program [J]. Alzheimer's & Dementia, 2023, 19 (S11):

[7]魏晓玲,刘红英. 基于Python和Django框架的琴房管理系统设计与实现 [J]. 无线互联科技, 2023, 20 (22): 51-53.

[8]庞达,温家铭,武延鑫等. Django框架在海洋平台甲板片建造管理中的应用研究 [J]. 天津科技, 2023, 50 (11): 56-58+62.

[9]张小梅,何菊,佘侃侃等. Django框架下的用户鉴权机制分析与研究 [J]. 无线互联科技, 2023, 20 (18): 146-148.

[10]HUANG H ,HU Z ,YU K , et al. 基于微信小程序的中国成年人膳食纤维摄入模式评估工具可用性和可接受度研究(英文)[C]// 亚洲营养学会联合会,中国营养学会. Abstract Book of the 14th Asian Congress of Nutrition--Nutrition Education. Société des Produits Nestlé SA.;, 2023: 1.

[11]魏凯. 基于Python Django框架的协同办公管理系统构建 [J]. 信息与电脑(理论版), 2023, 35 (16): 114-116.

[12]平欣. 基于微信小程序的智能轮椅监控系统的设计与实现[D]. 盐城工学院, 2023.

[13]Chao H L ,Fa S S . Construction of College Students’ Physical Health Data Sharing System Based on Django Framework [J]. Journal of Sensors, 2021, 2021

[14]顾子龙, 洛特物联监管智慧农林微信小程序端软件. 陕西省, 西安洛特电子信息科技有限公司, 2021-06-01.

[15]陈舟劢. 贵州旅游景点智能推荐系统的设计与实现[D]. 贵州大学, 2021.

[16]马天博,张妍,李森威等. 基于微信小程序的旅游规划程序方案 [J]. 信息技术与信息化, 2020, (07): 23-25.

[17]张骄,姜军,刘亮等. 基于GIS中国旅游景点信息查询系统的设计 [J]. 计算机产品与流通, 2020, (06): 132-133.

[18]马立,许文韬,王明珠等. 基于高德地图API的邯郸市旅游景点查询平台设计 [J]. 河北工程大学学报(社会科学版), 2019, 36 (03): 53-57.

致  谢

在此论文完成之际,感谢我的指导老师。在指导老师的网页设计课上,当时我学到了很多东西,这对于我实习过程中也打了一定的基础,而且指导老师对于我的设计也提出许多建议,并予以悉心的指导,对于一些细小的问题都耐心的指导我去完善,授予我写论文的好友,时常的鼓励我,另外感谢教导我完善此项目的前端同学,对于这个项目,我是边学习边实现完成的,有许多东西开始并不是很明白,但前端开发的同学非常耐心的引导我去将这个项目完成,在系统的后端开发中,所用到的后台开发技术也时常会给我讲解,助于我更好的将论文完成,在此对帮助到我的同学和一直予以教导的指导老师致以衷心的感谢,祝事业有成。

点赞+收藏+关注 → 私信领取本源代码、数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值