(免费领源码)基于Python的智能城市旅游推荐系统56366-计算机毕设JAVA、PHP、python、爬虫、APP、小程序、C# 、C++、数据可视化、大数据、全套文案
本论文旨在基于Python语言开发一种智能城市旅游推荐系统,以改善游客在城市旅行中的体验。该系统通过分析游客的兴趣偏好、实时交通情况、天气状况等多方面因素,为其提供最佳的旅游路线规划和景点推荐。
基于Python的智能城市旅游推荐系统的主要使用者分为管理员和普通用户,实现功能包括管理员:系统用户、景点信息管理、景点预约管理、城市信息管理、景点路线管理、系统管理、留言管理、公告管理、资源管理模块;普通用户:首页、公告、旅游资讯、留言信息、景点信息、城市信息、景点路线、我的账户、个人中心等功能。由于本网站的功能模块设计比较全面,所以使得整个智能城市旅游推荐系统信息管理的过程得以实现。
基于Python的智能城市旅游推荐系统是以Django这一框架为基础,系统利用Python的数据处理和机器学习库Pandas,结合城市地图数据和游客反馈信息,实现了智能推荐算法的设计和优化。通过实验验证,系统的推荐准确性和实用性得到了有效验证,为游客提供了更加个性化和便捷的城市旅游体验,具有广阔的应用前景和推广价值。
关键词:智能城市旅游推荐;数据爬取;Django;Python
This paper aims to develop an intelligent urban tourism recommendation system based on Python language to improve the experience of tourists during urban travel. The system provides tourists with the best travel route planning and scenic spot recommendations by analyzing various factors such as their interests and preferences, real-time traffic conditions, and weather conditions.
The main users of the intelligent city tourism recommendation system based on Python are divided into administrators and ordinary users. The implementation functions include administrators: system users, attraction information management, attraction appointment management, city information management, attraction route management, system management, message management, announcement management, and resource management modules; Ordinary users: functions such as homepage, announcements, travel information, message information, attraction information, city information, attraction routes, my account, personal center, etc. Due to the comprehensive design of the functional modules on this website, the information management process of the entire intelligent city tourism recommendation system can be realized.
The intelligent city tourism recommendation system based on Python is based on the Django framework. The system utilizes Python's data processing and machine learning library Pandas, combined with city map data and tourist feedback information, to design and optimize intelligent recommendation algorithms. Through experimental verification, the accuracy and practicality of the system's recommendations have been effectively verified, providing tourists with a more personalized and convenient urban tourism experience, with broad application prospects and promotion value.
Keywords: Smart city tourism recommendation; Data crawling; Django; Python
目录
第 1 章引 言
1.1研究背景和意义
随着城市化进程的不断加快和信息技术的快速发展,智能城市的概念越来越受到人们的关注。智能城市通过整合信息和通信技术,实现城市基础设施的智能化管理和优化,提升城市居民的生活质量,促进城市可持续发展。旅游业是城市的重要组成部分之一,也是城市经济发展和文化交流的重要载体。因此,在智能城市发展的背景下,如何利用信息技术提升城市旅游服务质量、提高游客体验,成为当前研究的热点之一。
随着互联网、大数据、人工智能等技术的不断成熟和应用,智能城市旅游推荐系统作为智能城市旅游服务的一种重要形式,具有巨大的发展潜力。Python作为一种功能强大且易于学习和使用的编程语言,已经成为了数据科学、机器学习等领域的主流之一,对于开发智能城市旅游推荐系统来说也有很大的应用潜力。智能城市旅游推荐系统可以根据游客的个人偏好和需求,结合城市的实时数据和情况,通过智能算法和模型,为游客提供个性化的旅游推荐,并优化旅游路径和行程安排,提升旅游体验,促进城市旅游业的发展,提高城市旅游的质量和效益,具有重要的实践和推广价值。
1.2国内外研究现状
随着城市化进程的不断加快和信息技术的快速发展,智能城市正逐渐成为未来城市发展的重要方向。智能城市通过整合信息技术和物联网技术,实现城市基础设施的智能化管理,优化城市运行效率,提升居民生活质量。旅游作为一个重要的城市经济支柱产业,随着人们对于旅游体验和服务质量要求不断提高,智能城市旅游推荐系统应运而生。在国内外,关于智能城市旅游推荐系统的研究还处于起步阶段,但已经取得了一定的进展。
美国纽约市的“NYCgo”应用程序是一个典型的智能城市旅游推荐系统。该应用程序利用大数据技术和个性化推荐算法,为游客提供个性化的旅游推荐服务,包括景点浏览、美食推荐、活动推荐等。德国柏林的“VisitBerlin”应用程序是另一个智能城市旅游推荐系统的案例。该应用程序结合了人工智能和虚拟现实技术,为游客提供高度个性化的旅游推荐服务,帮助他们更好地了解柏林城市的历史文化和特色风情。
在国内,一些城市如北京、上海也开始尝试建设智能城市旅游推荐系统。这些系统主要依托于城市的信息化建设和互联网平台,通过数据分析和算法优化,为游客提供个性化的旅游推荐服务。
综上所述,智能城市旅游推荐系统是智能城市建设的重要组成部分,通过整合信息技术和旅游资源,为游客提供个性化、便捷的旅游体验。未来,随着人工智能和大数据技术的不断发展,智能城市旅游推荐系统将会更加智能化、人性化,为城市旅游产业的发展注入新的活力。
1.3本系统开发特色
本论文旨在设计并实现一种智能城市旅游推荐系统,通过结合大数据分析等技术手段,为游客提供更加个性化、精准化的旅游推荐服务。
(1)融合多种数据源:本系统将整合多种数据源,包括用户行为数据、城市景点路线等,通过数据融合和挖掘,实现更为全面、精准的推荐服务。
(2)个性化推荐算法: 采用先进的推荐算法,结合用户的历史行为和偏好,实现个性化、精准的旅游推荐,提高用户满意度和体验。
(3)交互式用户界面: 设计用户友好的交互界面,支持用户对推荐结果的反馈和调整,提高系统的可定制性和用户参与度。
(4)实时更新: 基于实时数据更新机制,系统能够及时响应用户的需求和变化,保持推荐结果的新鲜度和准确度。
(5)智能优化: 结合用户反馈和系统运行情况,不断优化推荐算法和系统性能,提高系统的智能化水平和服务质量。
1.4论文章节安排
论文将分层次经行编排,除去论文摘要致谢文献参考部分,正文部分还会对网站需求做出分析,以及阐述大体的设计和实现的功能,最后罗列部分测试记录,论文主要架构如下:
第一章:绪论。主要介绍了选题的背景意义以及本文的主要研究内容和章节安排。
第二章:相关技术介绍。主要对本系统使用的相关技术和开发环境进行介绍。
第三章:系统需求分析。主要从系统的用户、功能等方面进行需求分析。
第四章:系统概要设计。主要对系统框架、系统功能模块、数据库进行功能设计。
第五章:系统实现。主要介绍了系统框架搭建、系统界面的实现。
第六章:系统测试。主要对系统的部分界面进行测试并对主要功能进行测试。
第七章:结论。
第 2 章相关技术介绍
2.1B/S体系结构
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Chrome、Safari、Microsoft Edge、Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MySQL等数据库。浏览器通过Web Server同数据库进行数据交互。
在 B/S 模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。
2.2Python爬虫技术
Python是一种高级编程语言,以其简洁、易读和易于学习的特点而受到广泛欢迎。作为一门通用编程语言,Python在各个领域都有广泛的应用,包括Web开发、数据分析、人工智能、科学计算等。Python的设计理念注重代码的可读性和简洁性,使得开发者可以更加专注于问题的解决而不必过多关注语法细节。同时,Python拥有丰富的标准库和活跃的社区,这为开发者提供了大量的工具和资源。Python还支持面向对象编程、函数式编程以及模块化开发,使得代码的组织和复用变得更加便捷。此外,Python还具备良好的跨平台性,可以在多种操作系统上运行。总之,Python的简洁性、可读性和强大的生态系统使其成为众多开发者的首选编程语言。
2.3Django框架介绍
Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。这也正是OpenStack的Horizon组件采用这种架构进行设计的主要原因。另外,在Django框架中,还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性。Django 项目源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。
Django已经成为web开发者的首选框架,是一个遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV的设计模式。MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。
2.4MySQL数据库
MySQL是一种广泛使用的开源关系型数据库管理系统。它具有高性能、可靠性和可扩展性等优点,被广泛应用于Web应用程序和大型企业级系统中。MySQL的核心特性包括关系型数据库管理系统的基本概念、数据模型和类型、SQL语言支持、事务处理和并发控制,以及安全性和权限管理。其架构由连接管理器、查询解析器和优化器、存储引擎、日志系统和恢复机制等组件构成。MySQL在实际应用中的优势体现在高性能、可伸缩性、可靠性、灵活性和易用性等方面。然而,MySQL也面临着一些局限性和挑战,如大规模数据处理的限制、复杂查询和性能优化、高并发和负载均衡,以及安全性和数据保护等方面。为了最大化MySQL的性能和效益,最佳实践和性能优化建议涉及数据库设计和规范化、索引设计和查询优化、缓存和分区技术,以及负载测试和容量规划等方面。总之,通过深入研究MySQL的描述,我们可以更好地理解其工作原理和适用场景,并为数据库开发人员和管理员提供有价值的参考。
3.1系统设计的开发目标
本研究旨在设计并开发一款智能城市旅游推荐系统,以提供个性化、实时的旅游推荐服务,帮助游客高效地发现和体验城市中的优质景点、活动和美食。通过构建基于用户偏好和行为的个性化推荐模型,为用户推荐符合其兴趣和偏好的旅游内容。结合实时位置信息和实时用户反馈,为用户推荐附近的推荐景点、活动和美食。预期将实现用户个性化推荐、实时位置推荐和用户行为分析等功能,提升城市旅游的便利性和体验度。
3.2可行性分析
3.2.1技术可行性分析
智能推荐是一种有效的推荐算法,可以根据用户的历史行为和偏好向用户推荐符合其口味的城市旅游推荐服务。本文结合大数据和智能推荐,可以实现对用户个性化需求的精准城市旅游景点推荐,提升用户体验。我们选择使用Python作为开发语言,结合相应的库和框架,如Django和Pandas,以实现系统的功能需求。Python作为一种简洁而强大的编程语言,具有丰富的库支持和成熟的开发社区,可以满足智能城市旅游推荐系统的开发需求。Django作为Python的Web框架,提供了高度可扩展的开发环境,使得系统的设计和实现更加便捷和高效。
3.2.2经济可行性分析
首先,建立智能城市旅游推荐系统可以提高用户的旅游体验,推荐系统能够提升用户满意度和忠诚度,增加用户的再次访问频率,从而促进系统的经济效益。其次,投入建立推荐系统的成本相对较低,收益回报较快,具有较高的经济效益。在开发智能城市旅游推荐系统并不需要投入太多,开发工具、服务器、数据库等,都可以通过网络搜索、下载、安装,只需要一台普通的计算机就可以完成操作,因此系统的开发在经济方面是可行的。
3.2.3操作可行性分析
操作方面主要考虑的是用户在使用以及管理人员在管理的时候,是否简单可行,没有任何计算机基础的用户能否使用,开发的智能城市旅游推荐系统在设计的时候秉承简单易学的理念,在用户进入系统后都会有固定的导航按钮,只要认字就可以操作完成,而且管理员在管理方面也只需简单的增删改查即可完成,因此在操作上也是可行的。
3.3系统需求分析
3.3.1功能需求分析
系统在功能上划分为普通用户端和管理员端两部分。
普通用户端:
(1)注册登录:当用户想要对系统中所实现的功能进行查询管理的时候,就必须进行登录到系统当中,如果没有账号的话,可以在登录窗口中进行注册,然后再通过账号密码登录。
(2)公告:用户点击“公告”以后,系统当中所有的公告都会展示出来,如果想要了解某一公告的详细信息,点击后面的“详情”会进入详情界面。
(3)旅游资讯:用户点击“旅游资讯”可以搜索查看资讯信息,并可对资讯信息进行点赞、收藏和发表评论等操作。
(4)留言信息:用户点击“留言信息”可以输入留言内容进行留言,由管理员审核通过后展示在前台。
(5)景点信息:点击菜单栏“景点信息”就会显示出所有的景点信息,可以根据搜索景点名称查看景点详细信息,包括景点中文名、景点英文名、景点排名、景点预约、攻略数量、评论数量、驴友占比、景点描述、景点详情等,可对景点信息进行景点预约、点赞、收藏和评论等操作。
(6)城市信息:用户可以查看城市信息,在查询到自己想要了解的城市信息的时候,可以进入查看详细的介绍,在城市信息详情这个界面,同时支持用户对喜欢的城市信息进行点赞、收藏以及评论的功能。
(7)景点路线:用户可以查看景点路线信息,在查询到自己想要了解的景点路线的时候,可以进入查看详细的介绍,在景点路线详情这个界面,同时支持用户对喜欢的景点路线进行点赞、收藏以及评论的功能。
(8)我的账户:用户点击右上角的“用户名”进入到我的账户便可对自己的昵称、密码和头像进行更改操作。
(9)个人中心:用户点击右上角的“用户名”,然后点击“个人中心”便可对景点预约和个人收藏信息进行管理。
智能城市旅游推荐系统中普通用户角色用例图如图3-1所示:

图3-1 普通用户角色用例图
后台管理员端:
(1)个人资料:对个人的基本信息以及对自己账号登录的密码进行修改;
(2)系统用户:在系统用户管理模块中主要分了两部分,分别是管理员和普通用户,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。
(3)景点信息管理:管理员执行管理景点信息列表,可以对景点信息进行查询、添加、重置或删除。如果需要添加新的景点数据,可以输入想要爬取的城市名称、点击爬取按钮添加新的景点信息,一次可爬取十条数据。也可以对用户提交的景点评论的信息进行管控。
(4)景点预约管理:管理员点击“景点预约管理”系统会把智能城市旅游推荐系统当中所有用户提交的景点预约信息都显示出来,可以对景点预约信息进行审核回复管理。
(5)城市信息管理:管理员点击“城市信息管理”菜单可以对系统展示的城市信息进行增删改查。如果想要添加新的城市信息,点击“添加”按钮,输入城市详情信息,点击“提交”按钮就可以添加了。也可以对用户提交的城市评论的信息进行管控。
(6)景点路线管理:点击“景点路线列表”这个按钮可以查看到系统中所有的景点路线信息,管理员可进行查询、重置或删除等相应操作。
(7)系统管理:点击“轮播图管理”这个按钮可以查看到系统中所有的轮播图信息,如果想要添加新的轮播图信息,点击“添加”按钮然后根据提示输入轮播图信息,点击“提交”后,在轮播图管理界面就会显示新增的轮播图信息,可以点击某一轮播图信息查看轮播图信息的详情,也可以直接点击“删除”进行删除轮播图。
(8)留言管理:管理员点击“留言管理”可以对用户提交的留言信息进行审核回复。
(9)公告管理:管理员点击“公告”以后,系统当中所有的公告都会展示出来,可以通过关键词查询公告,也可以添加新的公告或者删除某一条公告。
(10)资源管理:管理员在“资源管理”页面可对旅游资讯以及资讯分类进行增删改查等操作。
智能城市旅游推荐系统中管理员角色用例图如图3-2所示:
图3-2管理员角色用例图
3.3.2非功能需求分析
智能城市旅游推荐系统的非功能性需求比如智能城市旅游推荐系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1 智能城市旅游推荐系统非功能需求表
| 安全性 | 主要指智能城市旅游推荐系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
| 可靠性 | 可靠性是指智能城市旅游推荐系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
| 性能 | 性能是影响智能城市旅游推荐系统占据市场的必要条件,所以性能最好要佳才好。 |
| 可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
| 易用性 | 用户只要跟着智能城市旅游推荐系统的页面展示内容进行操作,就可以了。 |
| 可维护性 | 智能城市旅游推荐系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
3.4数据需求分析
对系统的数据流进行分析,系统的使用者分为二类,前端用户和后台管理员。管理员权限下的工作流程主要为:管理员通过系统界面提供登录按钮并点击,转入管理员登录界面,并在界面上填入相应的管理员账户和管理员密码,进入管理员权限下的后台系统,并且在系统左侧导航条设置了相应的操作功能。
用户权限下的工作流程主要为:用户通过系统提供的注册功能,进行身份验证并注册,而后在登录界面进行个人身份验证,并且进入用户的个人后台界面,并进行相应的操作。
开发基于Python的智能城市旅游推荐系统的设计与实现系统最主要的一个目的就是实现用户在线浏览景点信息并进行景点预约,因此系统的业务流程图如下所示。
图3-3系统业务流程图
在分析了项目开发的背景、意义以及其开发的可行性后,接下来就是探讨项目的功能划分,以及具体实现的时候对项目数据库各种表的设计,在本章会做一个系统的介绍。
4.1系统总体架构设计
系统功能模块的设计就是把系统具体要实现哪些功能,功能如何划分做一个系统的架构,以模块图的方式展示出来,方便我们进行功能得罗列以及涉及。在系统的功能方面,项目分成了管理员+用户两个模块,每个模块登录进去对应相应的功能,具体的功能模块图如图4-1所示。
图4-1 智能城市旅游推荐系统功能模块图
4.2数据库设计
一个成熟的系统,数据库的好坏直接影响着其运行,如果没有一个好的数据库对数据存储,那么系统中所有的数据就没有办法调用,数据库是由很多个表组成,然后表和表之间相互联系,形成一个大大的数据库实体。
4.2.1数据库概念结构设计
下面是整个智能城市旅游推荐系统中主要的数据库表总E-R实体关系图。
图4-2智能城市旅游推荐系统总E-R关系图
4.2.2数据库逻辑结构设计
通过前面E-R关系图可以看到项目需要创建很多个表。下面罗列一下本智能城市旅游推荐系统当中的几个主要的数据库表:
表access_token (登陆访问时长)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
| 2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
| 3 | info | text | 65535 | 0 | Y | N | ||
| 4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
| 5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
| 2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
| 3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
| 4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
| 5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
| 9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
| 10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
| 11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
| 12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
| 13 | description | text | 65535 | 0 | Y | N | 文章描述 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
| 2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
| 3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
| 4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
| 5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
| 6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
| 7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
| 8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表attraction_information (景点信息)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | attraction_information_id | int | 10 | 0 | N | Y | 景点信息ID | |
| 2 | chinese_names_of_tourist_attractions | text | 65535 | 0 | Y | N | 景点中文名 | |
| 3 | english_names_of_tourist_attractions | text | 65535 | 0 | Y | N | 景点英文名 | |
| 4 | scenic_spot_ranking | text | 65535 | 0 | Y | N | 景点排名 | |
| 5 | scenic_spot_rating | text | 65535 | 0 | Y | N | 景点评分 | |
| 6 | scenic_spot_pictures | varchar | 255 | 0 | Y | N | 景点图片 | |
| 7 | strategy_quantity | text | 65535 | 0 | Y | N | 攻略数量 | |
| 8 | number_of_comments | text | 65535 | 0 | Y | N | 评论数量 | |
| 9 | the_proportion_of_donkey_friends | text | 65535 | 0 | Y | N | 驴友占比 | |
| 10 | description_of_attractions | text | 65535 | 0 | Y | N | 景点描述 | |
| 11 | attraction_details | varchar | 255 | 0 | Y | N | 景点详情 | |
| 12 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
| 13 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表attraction_reservation (景点预约)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | attraction_reservation_id | int | 10 | 0 | N | Y | 景点预约ID | |
| 2 | chinese_names_of_tourist_attractions | varchar | 64 | 0 | Y | N | 景点中文名 | |
| 3 | scenic_spot_ranking | varchar | 64 | 0 | Y | N | 景点排名 | |
| 4 | scenic_spot_rating | varchar | 64 | 0 | Y | N | 景点评分 | |
| 5 | appointment_users | int | 10 | 0 | Y | N | 0 | 预约用户 |
| 6 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 7 | appointment_date | date | 10 | 0 | Y | N | 预约日期 | |
| 8 | number_of_reservations | varchar | 64 | 0 | Y | N | 预约人数 | |
| 9 | appointment_instructions | text | 65535 | 0 | Y | N | 预约说明 | |
| 10 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
| 11 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
| 12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
| 2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
| 3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
| 4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
| 5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
| 6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
| 7 | position | varchar | 32 | 0 | Y | N | 位置: | |
| 8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
| 9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
| 10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
| 11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
| 12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
| 13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
| 14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
| 15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
| 16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
| 17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
| 18 | option | text | 65535 | 0 | Y | N | 配置: | |
| 19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | city_information_id | int | 10 | 0 | N | Y | 城市信息ID | |
| 2 | city_name | varchar | 64 | 0 | Y | N | 城市名称 | |
| 3 | attraction_name | varchar | 64 | 0 | Y | N | 景点名称 | |
| 4 | city_ranking | varchar | 64 | 0 | Y | N | 城市排名 | |
| 5 | city_rating | varchar | 64 | 0 | Y | N | 城市评分 | |
| 6 | travel_pictures | varchar | 255 | 0 | Y | N | 旅游图片 | |
| 7 | introduction_to_scenic_spots | text | 65535 | 0 | Y | N | 景点介绍 | |
| 8 | traffic_information | text | 65535 | 0 | Y | N | 交通信息 | |
| 9 | catering_recommendations | text | 65535 | 0 | Y | N | 餐饮推荐 | |
| 10 | accommodation_recommendations | text | 65535 | 0 | Y | N | 住宿推荐 | |
| 11 | city_details | longtext | 2147483647 | 0 | Y | N | 城市详情 | |
| 12 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
| 13 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
| 3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 6 | title | varchar | 255 | 0 | Y | N | 标题: | |
| 7 | img | varchar | 255 | 0 | Y | N | 封面: | |
| 8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 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: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
| 3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | message_id | int | 10 | 0 | N | Y | 留言板ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 用户ID: |
| 3 | title | varchar | 64 | 0 | Y | N | 标题: | |
| 4 | content | longtext | 2147483647 | 0 | N | N | 内容: | |
| 5 | nickname | varchar | 32 | 0 | N | N | 昵称: | |
| 6 | avatar | varchar | 255 | 0 | Y | N | 头像: | |
| 7 | | varchar | 125 | 0 | Y | N | 留言者邮箱 | |
| 8 | phone | varchar | 11 | 0 | Y | N | 留言者手机号码 | |
| 9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 11 | reply | longtext | 2147483647 | 0 | Y | N | 回复 | |
| 12 | reply_state | tinyint | 4 | 0 | Y | N | 0 | 回复状态 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
| 2 | title | varchar | 125 | 0 | N | N | 标题: | |
| 3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
| 4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
| 3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | registered_users_id | int | 10 | 0 | N | Y | 注册用户ID | |
| 2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 3 | user_gender | varchar | 64 | 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 | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
| 2 | title | varchar | 64 | 0 | Y | N | 标题: | |
| 3 | content | varchar | 255 | 0 | Y | N | 内容: | |
| 4 | url | varchar | 255 | 0 | Y | N | 链接: | |
| 5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
| 6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
| 7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表tourist_attraction_routes (景点路线)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | tourist_attraction_routes_id | int | 10 | 0 | N | Y | 景点路线ID | |
| 2 | name_of_scenic_spot | varchar | 64 | 0 | Y | N | 景点名称 | |
| 3 | category_of_attractions | varchar | 64 | 0 | Y | N | 景点类别 | |
| 4 | travel_season | varchar | 64 | 0 | Y | N | 旅行季节 | |
| 5 | travel_days | varchar | 64 | 0 | Y | N | 旅游天数 | |
| 6 | scenic_spot_pictures | varchar | 255 | 0 | Y | N | 景点图片 | |
| 7 | transportation | varchar | 64 | 0 | Y | N | 交通工具 | |
| 8 | travel_expenses | varchar | 64 | 0 | Y | N | 旅游费用 | |
| 9 | recommended_cuisine | text | 65535 | 0 | Y | N | 推荐美食 | |
| 10 | route_planning | text | 65535 | 0 | Y | N | 路线规划 | |
| 11 | journey_planning | text | 65535 | 0 | Y | N | 行程规划 | |
| 12 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
| 13 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
| 2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
| 3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
| 4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
| 5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
| 6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
| 7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
| 8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
| 2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
| 3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
| 4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
| 5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
| 6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
| 7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
| 8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
| 9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
| 10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
| 11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
| 12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
| 13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
| 14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
| 16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
| 2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
| 3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
| 4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
| 9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5.1系统首页模块
当进入智能城市旅游推荐系统的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,下面是轮播图,其主界面展示如下图5-1所示。
图5-1系统首页界面图
5.2登录模块
管理员和用户在登录界面输入用户名+密码,点击“登录”按钮,系统在用户数据库表中会对管理员、普通用户的账号进行匹配,用户名+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,用户登录流程图如下图5-2所示,其登录主界面展示如下图5-3所示。
图5-2注册流程图
图5-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))
5.3注册模块
注册模块满足普通用户角色的注册,想要进行登录系统,就必须进行登录,如果没有系统的账号,可以通过注册,然后再登录。用户注册流程图如下图5-4所示,其注册主界面展示如下图5-5所示。
图5-4注册流程图
图5-5注册界面图
注册关键代码如下:
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))
5.4公告模块
当访客点击智能城市旅游推荐系统中导航栏上的“公告”后将会进入到该“公告”列表的界面,然后选择想要看的公告,点击进入到详细界面。公告列表展示界面如下图所示。
图5-6公告界面图
5.5旅游资讯模块
用户点击“旅游资讯”可以搜索查看资讯信息,并可对资讯信息进行点赞、收藏和发表评论等操作。旅游资讯详情界面如下图5-7所示。
图5-7旅游资讯界面图
5.6留言信息模块
用户点击“留言信息”进入到留言信息页面,点击“留言”输入标题和留言内容完成提交留言,由管理员审核回复后会展示在前台。提交留言流程图如图5-8所示,提交留言界面如下图5-9所示。
图5-8提交留言流程图
图5-9提交留言界面图
5.7景点信息模块
当用户点击前台“景点信息”按钮后就可以看到所有的景点信息列表,选择你想要了解的景点信息后将会进入该景点信息的详情界面,可以了解到景点中文名、景点英文名、景点排名、景点评分、攻略数量、评论数量、驴友占比、景点描述、景点详情等信息,可以进行景点预约、点赞、收藏、和发表评论。景点信息操作流程图如下图5-10所示,景点信息详情界面如下图5-11所示,景点预约界面如下图5-12所示。
图5-10景点信息操作流程图
图5-11景点信息详情界面图
图5-12景点预约界面图
5.8城市信息模块
用户可以查看城市信息,在查询到自己想要了解的城市信息的时候,可以进入查看详细的介绍,支持用户对喜欢的城市信息进行点赞、收藏、评论的功能。城市信息详情界面如下图5-13所示。
图5-13城市信息详情界面图
5.9景点路线模块
用户可以查看景点路线信息,在查询到自己想要了解的景点路线信息的时候,可以进入查看详细的介绍,支持用户对喜欢的景点路线信息进行点赞、收藏、评论的功能。景点路线详情界面如下图5-14所示。
图5-14景点路线详情界面图
5.10系统用户管理模块
管理员可以对系统中所有的用户角色进行管控,包含了管理员和普通用户这两种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。系统用户管理流程图如下图5-15所示,系统用户管理界面如下图5-16所示。
图5-15 系统用户管理流程图
图5-16系统用户管理界面图
用户列表管理代码如下:
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}}
5.11景点信息管理模块
管理员执行景点信息管理,并可以操作相关内容,管理员可以单个添加景点信息,也可以通过爬取技术添加景点信息,输入想要爬取的城市名称、点击爬取按钮添加新的景点信息,一次可爬取十条数据。也可以对用户提交的景点评论的信息进行管控。景点信息管理界面如下图5-17所示。
图5-17 景点信息管理界面图
添加景点信息代码如下:
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": "已存在"}}
5.12系统管理模块
智能城市旅游推荐系统中的管理人员在“系统管理”这一菜单下是可以对智能城市旅游推荐系统内的轮播图进行添加修改的,其管理界面如下图5-18所示。
图5-18系统管理界面图
第 6 章系统部署与测试
这部分内容主要是把前期编码完成的系统,当成是计算机系统的一部分,并结合一些数据,计算机硬件和支持的软件进行集成测试和确认测试。之所以要进行最后的测试步骤,原因在于检查制作的系统与需求说明书的比较中,存在的差异问题。进一步确认制作的系统在功能与性能上跟需求说明书当中的要求相符。
6.1 系统测试的类型
检测系统是否合格,需要用到很多的测试类型。接下来就对这部分内容进行描述。
功能测试:这是系统测试中,首先进行的测试内容,其属于黑盒测试。主要检验制作的系统与需求说明文档的相符程度,还有它们之间存在的差异问题。
性能测试:主要测试制作的系统,在同时面对很多的用户请求时,该系统的应对能力。同时也是检查制作的系统跟事先预定的系统性能存在的差距问题。这样的方法通常在实时系统中,或者是嵌入式系统中运用得比较多。
容量测试:这种方法针对数据。检查正常运行的系统对数据处理的容量值。
安全性测试:这种方法常用于检验系统中设置的安全保护机制对来自非法用户的攻击时是否有效。而检测系统中的信息保护机制就需要使用常见安全测试中的保护测试来验证。
健壮性测试:这种测试还有一个别称是容错测试,通常运用故障插入法来检测系统的容错能力,看系统是否可以忽略故障保持继续运行,或者是检测系统应对故障时的自动恢复能力。
兼容性测试:面对计算机的各种软硬件环境,检测本系统是否可以兼容。
易用性测试:这种方法主要是面向用户,检测用户是否很容易理解和使用系统。
6.2 功能测试
智能城市旅游推荐系统在经历最后的测试环节,需要检验本系统的功能安全性,功能适用性等内容,最终得出测试结论。
表6-1 功能测试数据表
| 符合要求 | |
| 符合要求 | |
| 符合要求 | |
| 符合要求 | |
| 符合要求 |
6.3可用性测试
通常来说,一个布局合理,显示的内容无错别字,并具备合理正常的操作逻辑的系统往往很受欢迎,而且可以提升访问者的使用时间以及访问率。
表6-2 可用性测试数据表
| 测试内容 | 测试结果 |
| 合理 | |
| 合理 | |
| 能 | |
| 无 | |
| 检查系统功能有无友好性 | 有 |
| 能 | |
| 无 | |
| 检查系统有无提供帮助信息 | 有 |
6.4测试结果分析
智能城市旅游推荐系统经过了编码阶段的单元测试,和最后的系统整体测试等测试后,对于用户要求的功能,本系统都进行了实现,各个模块都运行正常。在面对一些故障性问题时,本系统也有相应的应对办法,并且本系统可以保持24小时正常运转。因此,智能城市旅游推荐系统可以交付用户使用。
基于Python的智能城市旅游推荐系统能够为用户提供个性化、准确的城市驴友景点推荐,提升用户体验。通过收集和分析用户的历史行为、偏好和评价等数据,系统能够了解用户的喜好,并进行智能推荐。
这样的系统可以帮助用户发现新的城市景点推荐,扩展他们的旅游范围,并提供与兴趣相关的景点推荐内容。同时,系统也能为用户提供详细的城市信息和景点路线信息,帮助他们做出更加明智的选择。
对于城市文旅局管理者来说,基于Python的智能城市旅游推荐系统可以提供深入的数据洞察和市场分析,帮助他们了解旅游用户需求和趋势,并做出相应的决策。这样的系统还能提供统计报告和数据可视化工具,帮助管理者监控城市旅游推荐表现和效果。
综上所述,基于Python的智能城市旅游推荐系统能够为用户提供个性化的景点推荐,帮助他们发现新的城市旅游推荐并丰富旅游者体验。对于城市文旅局管理者来说,这样的系统提供了数据驱动的决策支持和市场洞察。因此,基于Python的智能城市旅游推荐系统具有重要的实际意义和应用前景。
[1]Wang Y .Innovative Research on Deep Learning Algorithm in Intelligent Attractions Recommendation Technology[J].Applied Mathematics and Nonlinear Sciences,2024,9(1):
[2]王必祥.基于景区状态信息的景点推荐系统的设计与实现[D].南京邮电大学,2023.DOI:10.27251/d.cnki.gnjdc.2023.000110.
[3]郭鹤楠.基于Django和Python技术的网站设计与实现[J].数字通信世界,2023,(06):60-62.
[4]Zhang S ,Wang L ,Fei R , et al.Attraction Recommendation Based on Tourism Context Modeling and Multi‐neural Collaborative Filtering Algorithm[J].IEEJ Transactions on Electrical and Electronic Engineering,2023,18(8):1280-1295.
[5]班航.基于旅游大数据的用户画像建模及个性化推荐研究[D].安徽工程大学,2023.DOI:10.27763/d.cnki.gahgc.2023.000038.
[6]占贻畅.旅游景点客流量预测与个性化推荐算法研究[D].长春工业大学,2023.DOI:10.27805/d.cnki.gccgy.2023.000583.
[7]李恩.基于用户推荐算法的武汉市红色旅游平台设计与实现[D].长江大学,2023.DOI:10.26981/d.cnki.gjhsc.2023.001455.
[8]Yegulalp S .Plunge into Python with 'Python Crash Course 3rd Edition'[J].InfoWorld.com,2023,
[9]Tyson M .Error tracking with Sentry, Python, and Django[J].InfoWorld.com,2022,
[10]陈勇.基于协同过滤算法的旅游推荐系统的设计[J].价值工程,2022,41(30):160-162.
[11]李志敏.基于数字文化旅游系统的推荐算法研究[D].青海师范大学,2022.DOI:10.27778/d.cnki.gqhzy.2022.000223.
[12]蒋佳媛.基于点评数据的个性化景点推荐研究[D].上海财经大学,2021.DOI:10.27296/d.cnki.gshcu.2021.002275.
[13]邱红丽,张舒雅.基于Django框架的web项目开发研究[J].科学技术创新,2021,(27):97-98.
[14]杨舒涵.基于情境感知的兴趣点推荐算法研究与应用[D].中国矿业大学,2021.DOI:10.27623/d.cnki.gzkyu.2021.000202.
[15]汪洋,姜新通.MVC框架在Python与Django下的设计研究[J].电脑与信息技术,2021,29(01):55-57+63.DOI:10.19414/j.cnki.1005-1228.2021.01.017.
[16]左华煜.个性化旅游推荐方法研究与应用[D].江苏科技大学,2021.DOI:10.27171/d.cnki.ghdcc.2021.000424.
[17]史睿瑶.基于协同过滤算法的旅游推荐系统的设计与实现[J].电脑知识与技术,2020,16(35):64-66.DOI:10.14004/j.cnki.ckt.2020.3784.
[18]钱学明,基于媒体大数据的景点及位置相关服务推荐.广东省,广东顺德西安交通大学研究院,2020-12-02.
[19]史睿瑶.基于改进协同过滤算法的旅游推荐系统设计与实现[D].河北工程大学,2020.DOI:10.27104/d.cnki.ghbjy.2020.000602.
[20]崔春生,王雪,李文龙.基于用户在线评论的旅游景点推荐算法研究[J].系统科学与数学,2020,40(06):1103-1116.
致谢
至此论文结束,感谢您的阅读。在此我要特别的感谢我的导师,虽然我在实习期间很忙,论文撰写的时候经常是停停改改,但是我的导师依旧十分的负责,时不时的询问我的任务进展情况,跟进我的论文进度,在指导老师的帮助下,我逐步完成了自己的论文和程序,从导师身上也学习到很多知识和经验,这些知识和经验令我受益匪浅。同时我也从导师身上看到了自己的不足,不论是在技术层面上还是在对待工作的态度上,导师如同明镜一般照出了我的缺点我的不足。此外,我还要感谢在我实习期间在论文和程序上帮助过我的同学和社会人士,此前我对于大数据和智能推荐方面的一些知识还不了解,是他们在我编写程序过程中给了我很多的启发和感想,也帮助了我对于程序的调试和检测。没有他们我是不能顺利完成本次毕业设计的。至此,我的毕业设计就花上了一个圆满的句号了。
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢!
更多推荐


所有评论(0)