摘 要
随着人们生活水平的不断提高,旅游已成为人们生活中重要的组成部分。旅游日记分享平台可以帮助用户记录和分享自己的旅行经历,同时也可以为其他用户提供有价值的参考信息。因此,在当前信息技术高速发展的背景下,开发基于Python的旅游日记分享平台具有重要的现实意义。
本设计旨在打造一个集人性化、高效率和信息化等优点于一身旅游日记分享平台,通过先进的信息技术和科学管理方式,提供一个旅游分享、交互、交流的平台,减少数据存储错误和遗漏。系统运用MVC模型,采用B/S模式,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用,后端部分基于python语言的djnago框架进行开发,采用MySQL作为后台数据的主要存储单元,实现对系统数据的添加、修改、查看和删除。并通过系统组件化设计,对数据库中各表的增删查改和表间约束关系进行分析与设计,实现商业级应用的功能。最终设计的旅游日记分享平台界面简洁大方,布局合理,易操作易上手,能够高响应地对用户操作做出反馈,为用户提供了多元多样的功能,提供了良好的体验。
关键词:python语言;旅游日记分享平台;djnago框架;MySQL数据库
ABSTRACT
With the continuous improvement of people's living standards, tourism has become an important component of people's lives. The travel diary sharing platform can help users record and share their travel experiences, while also providing valuable reference information for other users. Therefore, in the context of the rapid development of information technology, developing a travel diary sharing platform based on Python has important practical significance.
This design aims to create a tourism diary sharing platform that combines the advantages of humanization, efficiency, and informatization. Through advanced information technology and scientific management methods, it provides a platform for tourism sharing, interaction, and communication, reducing data storage errors and omissions. The system uses the MVC model and B/S mode to concentrate the core components of system functionality on the server, simplifying system development, maintenance, and usage. The backend is developed based on the djnago framework of Python language, and MySQL is used as the main storage unit for backend data, achieving the addition, modification, viewing, and deletion of system data. And through system componentization design, analyze and design the addition, deletion, query and modification of various tables in the database, as well as the constraint relationships between tables, to achieve the functionality of commercial level applications. The final design of the tourism diary sharing platform has a simple and elegant interface, a reasonable layout, and is easy to operate and get started. It can provide high response feedback to user operations, providing users with diverse functions and a good experience.
Keywords: Python language; Travel diary sharing platform; DJNAGO framework; MySQL database
目 录
第一章 绪 论
1.1 研究背景
随着人们生活水平的不断提高,旅游已成为人们生活中重要的组成部分。旅游日记分享平台可以帮助用户记录和分享自己的旅行经历,同时也可以为其他用户提供有价值的参考信息。因此,在当前信息技术高速发展的背景下,开发基于Python的旅游日记分享平台具有重要的现实意义。
本设计旨在打造一个集人性化、高效率和信息化等优点于一身旅游日记分享平台,通过先进的信息技术和科学管理方式,提供一个旅游分享、交互、交流的平台,减少数据存储错误和遗漏。系统运用MVC模型,采用B/S模式,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用,后端部分基于python语言的djnago框架进行开发,采用MySQL作为后台数据的主要存储单元,实现对系统数据的添加、修改、查看和删除。并通过系统组件化设计,对数据库中各表的增删查改和表间约束关系进行分析与设计,实现商业级应用的功能。最终设计的旅游日记分享平台界面简洁大方,布局合理,易操作易上手,能够高响应地对用户操作做出反馈,为用户提供了多元多样的功能,提供了良好的体验。
本旅游日记分享平台的设计与实现,着眼于满足用户记录和分享旅行经历的需求,能够为用户提供一个方便的旅游日记分享和交流的平台,同时可以为其他用户提供有价值的旅游信息,和推荐个性化用户日记信息,方便用户快速获取自己所需或喜爱的信息,有助于推动旅游业的发展。并且利用Python开发旅游日记分享平台,可以提高Python在实际应用中的运用能力,为相关技术的发展做出贡献。此外,本平台不仅仅是一个旅游日记分享的工具,更是一个促进人们之间交流和连接的平台。通过用户之间的日记分享和评论交流,不仅可以增加用户之间的互动和社交,还能够为其他准备旅行或者寻找旅行灵感的人提供宝贵的经验和建议。同时,平台的管理员角色能够有效地管理平台的运行,保障平台的稳定和安全,为用户提供良好的使用体验。
总之,基于Python的旅游日记分享平台的研究和开发,对于满足用户需求、推动旅游业发展以及提升技术应用等方面具有重要意义。
国内的研究现状方面,目前在中国旅游市场上,已经存在着一些旅游日记分享平台,例如“去哪儿”、“马蜂窝”等。这些平台主要提供了用户发布旅行攻略、游记和景点评价等功能,使用户能够分享自己的旅行经历和获取他人的游记和攻略。然而,目前国内的旅游日记分享平台大多只提供单一功能,缺乏综合性和个性化的服务。
而在国外,旅游日记分享平台的发展较为成熟。例如,TripAdvisor、Lonely Planet和Travelog等国外平台提供了一站式的旅行日记分享服务,用户可以在这些平台上发布游记、上传照片、记录旅行路线等。此外,一些社交媒体平台如Instagram和Facebook也成为了用户分享旅行日记的重要平台,用户可以通过上传照片、发布状态和标记位置等方式,与亲友分享自己的旅行见闻。
综上所述,国内的旅游日记分享平台在功能和用户体验方面仍有一定的提升空间。而国外的平台已经较好地满足了用户分享旅行经历的需求,提供了更为综合和个性化的服务,以及与社交媒体的融合。因此,在设计和开发旅游日记分享平台时,可以借鉴国外平台的经验和做法,提高平台的综合性。
本文共有七章,如下所示。
第一章简要说明了旅游日记分享平台的研究背景、意义、研究现状、论文的组成结构。
第二章简要概述了本文所用的开发技术和工具。
第三章简要对系统各业务流程进行需求分析、可行性分析。
第四章对旅游日记分享平台进行设计。
第五章对旅游日记分享平台进行实现,并贴出相关页面截图,语言描述出具体功能实现的操作方法。
第六章对旅游日记分享平台采用测试用例的方式来对一些主要功能模块测试,最后得出测试结果。
第七章总结。
本章主要概述了旅游日记分享平台的研究背景与意义;同时精炼地总结了研究开发现状,最后给出了论文的结构安排。
第二章 相关技术介绍
作为一种简洁、易读、功能丰富的编程语言,python编程语言是一种面向对象的高级编程语言,以其简单、可移植、安全和高性能等特点在软件开发领域广泛应用。Python可以利用其丰富的库和工具,如OpenCV用于图像处理、Dlib用于人脸检测、NumPy用于数据处理等,从而快速实现身份识别、信息记录、数据分析等功能。此外,Python还具有跨平台性,可以在不同操作系统上运行,这也使得基于Python的考勤系统更具灵活性和通用性,能够满足用户需求。
Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。这也正是OpenStack的Horizon组件采用这种架构进行设计的主要原因。另外,在Dj ango框架中,还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性。Django 项目源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。它鼓励快速开发,并遵循MVC设计。Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。Django已经成为web开发者的首选框架,是一个遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。MTV是Model、Template、View三个单词的简写,分别代表模型、模版、视图。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。
2.3 MySQL数据库
现在MySQL数据库在网络上它可以支撑许多个用户,而且也可以适应客服机和服务器的部署或者配置等,我们这里的服务器和客户机其实就是一种软件上的概念,并且我们使用的计算机硬件也与他们不存在一一对应的关系。
MySQL是一款非常流行的关系型数据库管理系统,它的出现一直都是佼佼者,它不仅功能非常强大,而且使用起来非常方便,并且MySQL的跨平台能力也很好,软件开发人员非常喜欢它的这些强大的优点。不同于其他关系型数据库,对于数据库的管理它有着自己的一套方案,通过对用户设定相应的权限和角色来达到对数据库的管理。由此可见,MySQL是一个能够适用于吞吐量高,可靠性高,效率高的一款数据库管理软件。具有以下优点:
MySQL中对于不同身份的用户都设定其不同的权限来完成不同的业务逻辑,这使得MySQL在安全和完整性远远超出了其他关系型数据库。并且对于那些动画、图形和声音的数据类型MySQL也可以支持,这说明多数据类型MySQL也是可以支持的。
优点三:MySQL还可以做到多个平台的开发,软件开发的多种编程语言都可以实现对MySQL数据库的操作。。
本文研究的旅游日记分享平台主要采用python开发技术,使用djnago框架,结合MySQL数据库完成了整个平台设计与开发。
第三章 系统分析
3.1 可行性分析
3.1.1 技术可行性分析
djnago作为一个成熟的开发框架,常作为数据源较简单的web项目的框架,具有丰富的功能和广泛的社会支持。它提供了快速开发和部署应用程序的能力,适合构建旅游日记分享平台所需的功能和性能要求。python作为一种流行的编程语言,具有广泛的库和工具生态系统,和丰富的功能,可以满足项目的需求。MySQL是一种可靠的关系型数据库管理系统,具备良好的性能和稳定性。因此,在技术层面上,该项目是可行的。
djnago框架的自动配置功能可以根据应用程序的依赖和环境来进行自动配置,减少了大量的手动配置工作,可以降低开发成本,同时,代码质量和可维护性较高,可以降低后期维护成本,缩短开发周期。此外,djnago框架具备良好的性能和稳定性,可以降低系统的运行成本和维护成本。因此,在经济层面上,该项目是可行的。
3.1.3 操作可行性分析
使用djnago框架设计与实现基于python的旅游日记分享平台,该系统采用MySQL数据库进行数据储存,具有高效、便捷、安全的特点,能够提供一个界面直观友好和操作简单高效的系统,能满足用户的各项要求。该系统采用模块化开发设计,使系统能快速响应新需求并与其他系统进行集成,具有很强适应性和扩展性。因此,在操作层面上,该项目是可行的。
3.2.1 功能性分析
根据旅游日记分享平台的角色需求分析,可以划分为普通用户和管理员两大模块。具体功能说明如下:
普通用户模块:
- 注册登录:游客可以通过注册成为系统用户,使用账号密码可进行登录,使用系统功能。
- 首页:普通用户可查看轮播图、公告、新闻信息、用户日记推荐、日记信息推荐(根据协同过滤推荐用户点击类型优先推荐)等信息,并可使用系统其他功能。
- 公告:普通用户可查看包括关于我们、联系方式、网站介绍等管理员发布的所有公告信息详情。
- 新闻信息:普通用户可查看管理员发布的所有新闻信息信息详情,支持局部、筛选、排序搜索,同时支持热门文章推荐,进行点赞、收藏和评论。
- 用户日记:普通用户可查看发布的所有用户日记信息详情,支持日记标题、热门地点、排序搜索,可进行点赞、收藏和评论,并可点击规划操作,填写并提交规划信息。
- 日记信息:普通用户可查看发布的所有日记信息信息详情,支持日记标题、热门地点、排序搜索,进行点赞、收藏和评论,并可点击购买操作,填写并提交购买信息。
- 我的账户:普通用户可对自己的个人资料进行管理,包括修改密码和修改资料。
- 个人中心:普通用户可对自己的个人首页、用户日记、消息通知、收藏等信息进行管控和查阅信息详情。例如,可以添加自己的用户日记信息,需经过管理员审核才可显示在前台界面,发布成功后可查看自己用户日记的评论信息;可查询管理员发送的消息通知信息。
管理员模块:
- 登录:管理员账号密码由系统生成,可使用账号密码可进行登录,使用系统功能,并对个人信息和密码进行管理。
- 后台首页:管理员登录系统后台后,首先进入后台首页界面,可查看普通用户、用户日记等统计信息数据分析图表。
- 系统用户:可对普通用户和管理员等系统用户信息进行管控和查看信息详情,可进行增改删查操作。
- 日记分类管理:可查看所有日记分类信息详情,进行增改删查操作,支持日记类型搜索。
- 用户日记管理:可查看所有用户日记信息详情,进行增改删查操作,支持日记标题、热门地点搜索,可进入详情页审核用户日记信息,并可查看评论信息。
- 日记信息管理:可查看所有日记信息信息详情,进行增改删查操作,支持日记标题、热门地点搜索,并可查看评论信息。
- 消息通知管理:可查看所有消息通知信息详情,进行增改删查操作,支持通知标题、通知类型搜索。
- 系统管理:可对首页的轮播图进行管理和查看其信息详情,进行增删改查操作,支持标题搜索。
- 公告管理:可对公告进行管理和查看其信息详情,进行增删改查操作,支持标题搜索。
- 资源管理:可对新闻信息和新闻分类进行管理和查看其信息详情,进行增删改查操作;其中新闻信息支持标题、标签、分类搜索,可查看其查看评论信息;新闻分类支持类型名称搜索。
3.2.2 非功能性分析
旅游日记分享平台的非功能性需求比如平台的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
表3-1旅游日记分享平台非功能需求表
安全性 | 主要指旅游日记分享平台数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指旅游日记分享平台能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响旅游日记分享平台占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着旅游日记分享平台的页面展示内容进行操作,就可以了。 |
可维护性 | 旅游日记分享平台开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
3.3 系统用例分析
通过上文的功能的分析,得出了本旅游日记分享平台的用例图:
普通用户角色用例如图3-1所示。

图3-1 旅游日记分享平台普通用户角色用例图
管理员角色用例如图3-2所示。

3.4 系统流程分析
旅游日记分享平台开发时,首先进行需求分析,进而对系统进行总体的设计规划,设计系统功能模块,数据库的选择等,本系统的开发流程如下图所示。

图3-3系统开发流程图
为了保证系统的安全性,要使用本系统对系统信息进行管理,必须先登陆到系统中。如下图所示。

图3-4 登录流程图
用户打开并进入系统后,会先显示登录界面,输入正确的用户名和密码,系统自动检测信息,若信息无误,则用户会进入系统功能界面,进行操作,否则会提示错误无法登录,操作流程如下图所示。

图3-5 系统操作流程图
管理员可以对信息的添加,用户也可以对自己权限内的信息进行添加,输入信息后,系统会自行验证输入的信息和数据,若信息正确,会将其添加到数据库内,若信息有误,则会提示重新输入信息,添加信息流程如下图所示。

图3-6 添加信息流程图
管理员可以对信息等进行修改,用户也可以对自己权限内的信息进行修改,首先进入修改信息界面,输入修改信息数据,系统进行数据的判断验证,修改信息合法则修改成功,信息更新至数据库,信息不合法则修改失败,重新输入。修改信息流程图如下图所示。

图3-7 修改信息流程图
管理员可以对信息等进行信息的删除,对要删除的信息进行选中后,点击删除按钮,系统会询问是否确定,若点击确定,则系统会删除掉选中的信息,并在数据库内对信息进行删除,删除信息流程图如下图所示。

图3-8 删除信息流程图
一层数据流程图包括了登录注册、用户功能和检索维护等模块,在登录注册模块使用到的数据存储有用户账户文档,用户功能模块需要的存储是用户各功能模块数据文档,检索维护是使用以上这些数据文档通过关键词进行检索。
系统的一层数据流图如下图所示。

图3-9 系统数据流图(一层)
二层数据流程是对一层数据流层图中填写登录注册信息、用户功能的细化。即:填写登录注册信息细化为填制信息、后台审核,用户功能细化为搜索和浏览公告、新闻信息、用户日记、日记信息、消息通知等操作。
系统的二层数据流图如下图所示。

图3-10 系统数据流图(二层)
本章主要通过对旅游日记分享平台的可行性分析、功能需求分析、系统用例分析、系统流程分析,确定整个旅游日记分享平台要实现的功能。同时也为旅游日记分享平台的代码实现和测试提供了标准。
第四章 总体设计
4.1 系统功能模块设计
4.1.1整体功能模块设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本旅游日记分享平台中的用例。那么接下来就要开始对本旅游日记分享平台的架构、主要功能和数据库开始进行设计。旅游日记分享平台根据前面章节的需求分析得出,其总体设计模块图如图4-1所示。

图4-1 旅游日记分享平台功能模块图
4.2 数据库设计
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
4.2.1 数据库概念结构设计
下面是整个旅游日记分享平台中主要的数据库表总E-R实体关系图。

图4-6 旅游日记分享平台总E-R关系图
4.2.2 数据库逻辑结构设计
通过上一小节中旅游日记分享平台中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 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 | diary_classification_id | int | 10 | 0 | N | Y | 日记分类ID | |
2 | diary_type | varchar | 64 | 0 | Y | N | 日记类型 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | diary_information_id | int | 10 | 0 | N | Y | 日记信息ID | |
2 | diary_title | varchar | 64 | 0 | Y | N | 日记标题 | |
3 | diary_type | varchar | 64 | 0 | Y | N | 日记类型 | |
4 | diary_date | date | 10 | 0 | Y | N | 日记日期 | |
5 | diary_image | varchar | 255 | 0 | Y | N | 日记图片 | |
6 | popular_locations | varchar | 64 | 0 | Y | N | 热门地点 | |
7 | number_of_comments | int | 10 | 0 | Y | N | 0 | 评论数量 |
8 | number_of_likes | int | 10 | 0 | Y | N | 0 | 点赞数量 |
9 | diary_content | text | 65535 | 0 | Y | N | 日记内容 | |
10 | travel_routes | text | 65535 | 0 | Y | N | 旅行路线 | |
11 | diary_details | longtext | 2147483647 | 0 | Y | N | 日记详情 | |
12 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
13 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
14 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
15 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
16 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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_notification_id | int | 10 | 0 | N | Y | 消息通知ID | |
2 | notify_users | int | 10 | 0 | Y | N | 0 | 通知用户 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | notification_title | varchar | 64 | 0 | Y | N | 通知标题 | |
5 | notification_date | date | 10 | 0 | Y | N | 通知日期 | |
6 | notification_type | varchar | 64 | 0 | Y | N | 通知类型 | |
7 | notification_content | text | 65535 | 0 | Y | N | 通知内容 | |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | regular_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 | sensitive_vocabulary_id | int | 10 | 0 | N | Y | 敏感词汇ID | |
2 | sensitive_vocabulary | varchar | 64 | 0 | Y | N | 敏感词汇 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | 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 | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | user_diary_id | int | 10 | 0 | N | Y | 用户日记ID | |
2 | publish_users | int | 10 | 0 | Y | N | 0 | 发布用户 |
3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
4 | diary_title | varchar | 64 | 0 | Y | N | 日记标题 | |
5 | diary_type | varchar | 64 | 0 | Y | N | 日记类型 | |
6 | diary_date | date | 10 | 0 | Y | N | 日记日期 | |
7 | diary_image | varchar | 255 | 0 | Y | N | 日记图片 | |
8 | popular_locations | varchar | 64 | 0 | Y | N | 热门地点 | |
9 | diary_content | text | 65535 | 0 | Y | N | 日记内容 | |
10 | travel_routes | text | 65535 | 0 | Y | N | 旅行路线 | |
11 | diary_video | varchar | 255 | 0 | Y | N | 日记视频 | |
12 | diary_details | longtext | 2147483647 | 0 | Y | N | 日记详情 | |
13 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
14 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
15 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 更新时间: |
本章主要讨论的内容包括旅游日记分享平台的功能模块设计、数据库系统设计。整个旅游日记分享平台的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
第五章 系统详细设计与实现
5.1 前台用户功能模块
5.1.1 注册界面
旅游日记分享平台的注册界面设计简洁明了。用户在注册界面上填写用户名+密码+确认密码+邮箱+头像+身份等必要信息,并点击注册按钮提交注册请求。为确保安全性,系统可能会要求用户输入验证码。如果填写信息有误或缺失,系统会提供相应的错误提示。注册界面还包含登录链接,方便已注册用户直接登录系统。此外,用户协议和隐私政策也会显示在界面上,用户需同意相关条款才能完成注册。通过这样的设计,旅游日记分享平台的注册界面旨在提供用户友好的注册体验,保障用户信息的安全性和隐私权,并确保符合相关法规和政策要求。其用注册界面展示如下图所示。

图5-1 注册界面图
注册的关键代码如下:
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.1.2 登录界面
旅游日记分享平台的登录界面设计简洁明了。用户可以在登录界面上输入自己的用户名、注册时使用的电子邮箱或手机号码,并填写与账号对应的密码。通过点击“登录”按钮,用户可以完成登录操作。如果用户忘记密码,登录界面提供了相应的“忘记密码”链接,方便找回或重置密码。同时,登录界面也可能包含一个注册链接,以便新用户可以直接跳转到注册界面进行账号注册。通过这样的设计,旅游日记分享平台的登录界面旨在提供用户友好、便捷的登录体验,确保用户能够安全、快速地进入系统,用户登录时需身份识别(摄像头、图片)才可登录,使用系统功能,并对个人信息和密码进行管理界面如下图所示。

图5-2登录界面图
登录代码如下:
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))
找回密码代码如下:
def Forget_password(self, ctx):
print("===================修改密码=====================")
ret = {
"error": {
"code": 70000,
"message": "用户信息不能没有"
}
}
body = ctx.body
if not body["code"]:
return {
"error": {
"code": 70000,
"message": "验证码不存在或者错误"
}
}
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if not obj:
return {
"error": {
"code": 70000,
"message": "用户名不存在或者错误"
}
}
password = md5hash(body["password"])
if not password:
return {
"error": {
"code": 70000,
"message": "密码不存在或者错误"
}
}
bl = service_select("user").Set({"user_id": obj["user_id"]}, {"password": password})
if bl:
ret = {"result": {"bl": True, "message": "修改成功"}}
else:
ret = {
"error": {
"code": 70000,
"message": "修改失败",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
普通用户可查看轮播图、公告、新闻信息、用户日记推荐、日记信息推荐(根据协同过滤推荐用户点击类型优先推荐)等信息,并可使用系统其他功能。界面如下图所示。

普通用户可查看发布的所有用户日记信息详情,支持日记标题、热门地点、排序搜索,可进行点赞、收藏和评论,并可点击规划操作,填写并提交规划信息。界面如下图所示。

图5-4 用户日记详情界面图
普通用户可查看发布的所有日记信息信息详情,支持日记标题、热门地点、排序搜索,进行点赞、收藏和评论,并可点击购买操作,填写并提交购买信息。界面如下图所示。

图5-5日记信息界面图
5.1.6 个人中心界面
普通用户可对自己的个人首页、用户日记、消息通知、收藏等信息进行管控和查阅信息详情。例如,可以添加自己的用户日记信息,需经过管理员审核才可显示在前台界面,发布成功后可查看自己用户日记的评论信息;可查询管理员发送的消息通知信息。界面如下图所示。

图5-6 个人中心界面图
管理员登录系统后台后,首先进入后台首页界面,可查看普通用户、用户日记等统计信息数据分析图表。界面如下图所示。

图5-7 后台首页界面图
5.2.2 系统用户界面
管理员可对普通用户和管理员等系统用户信息进行管控和查看信息详情,可进行增改删查操作。界面如下图所示。

图5-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": "已存在"}}
管理员可查看所有用户日记信息详情,进行增改删查操作,支持日记标题、热门地点搜索,可进入详情页审核用户日记信息,并可查看评论信息。界面如下图所示。

图5-9 用户日记管理审核界面图
管理员可查看所有日记信息信息详情,进行增改删查操作,支持日记标题、热门地点搜索,并可查看评论信息。界面如下图所示。

图5-10 日记信息管理界面图
管理员可查看所有消息通知信息详情,进行增改删查操作,支持通知标题、通知类型搜索。界面如下图所示。

图5-11消息通知管理添加界面图
管理员可对首页的轮播图进行管理和查看其信息详情,进行增删改查操作,支持标题搜索。界面如下图所示。

图5-12 系统管理界面图
管理员可对新闻信息和新闻分类进行管理和查看其信息详情,进行增删改查操作;其中新闻信息支持标题、标签、分类搜索,可查看其查看评论信息;新闻分类支持类型名称搜索。界面如下图所示。

图5-13 资源管理界面图
旅游日记分享平台的详细设计与实现主要是根据前面的旅游日记分享平台的需求分析和旅游日记分享平台的总体设计来设计页面并实现业务逻辑。主要从旅游日记分享平台界面实现、业务逻辑实现这两部分进行介绍。
第六章 系统测试
6.1 测试目的
测试目的是为了评估旅游日记分享平台在功能、用户体验、性能、安全性、可靠性、兼容性和可维护性等方面的表现。通过测试,我们可以验证系统是否按照需求规格正确实现各个功能模块,并提供直观友好的用户界面和良好的用户体验。同时,测试还能评估系统在处理大量并发请求、数据负载和复杂业务场景下的性能表现,以及安全机制的有效性和系统在异常情况下的稳定性。此外,测试还关注系统在不同操作系统、浏览器和设备上的兼容性,以及代码结构的清晰度和易维护性。通过进行系统测试,可以及时发现问题和缺陷,并进行修复和优化,确保旅游日记分享平台的质量和稳定性,满足用户的期望和需求。
根据系统测试目的并结合面向对象的测试方法,给出如下系统测试方案:
尽可能早的、并且不断地进行系统测试。因为错误发现的越早,修正它所付出的代价以及费用就会越小。
设计本测试用例时,应该给出测试的预期结果。一个合理的测试用例由两部分组成:主要有测试用的输入数据和该输入数据所期望的系统运行结果。
在设计本测试用例时,不仅需要有合法的输入测试用例,还应该要有非法的输入测试用例。因为,因为在系统的实际使用过程中,通常由于各种原因,用户往往会使用一些非法的输入测试用例来进行测试。测试用例为了测试系统的正确性和完整性,本节将对系统中重点模块的测试进行介绍。
用户登录功能测试用例如下表所示。
表6-1 登录测试用例
测试用例编号 | YL_01 | |
测试用例名称 | 系统使用者登录 | |
测试用例描述 | 登录者输入用户名、密码和验证码 | |
系统入口 | 浏览器 | |
步骤 | 预期结果 | 实际结果 |
输入正确的用户名、密码 | 提示“登录成功”,并进入系统 | 预期结果 |
输入错误的用户名、密码 | 提示“登录失败”,并返回登录界面 | 预期结果 |
不输入用户名、密码 | 提示“请输入完整” | 预期结果 |
(2)创建数据测试
在系统中,创建功能也是基础功能之一,因此创建功能的测试很有代表性。在此章节主要列举在创建时各种情况下系统结果的测试。由于系统涉及创建功能操作过多,因此将多处统称创建功能。
创建数据用例如下表所示。
表6-2 创建数据测试用例
测试用例编号 | YL_02 | |
测试用例名称 | 系统使用者进行创建数据 | |
测试用例描述 | 使用者输入要创建的数据 | |
系统入口 | 浏览器 | |
步骤 | 预期结果 | 实际结果 |
输入完整并且格式正确的数据 | 提示“创建成功”,并显示所有数据 | 预期结果 |
核心位置数据但非必要位置不输入数据 | 提示“创建成功”,并显示所有数据 | 预期结果 |
核心数据位置不输入数据 | 提示“创建失败” | 预期结果 |
在系统中,修改功能是系统主要实现功能,因此修改功能的测试很有代表性。在此章节主要列举在修改时各种情况下系统结果的测试。由于系统涉及修改功能操作过多,因此将多处数据表记录修改和状态修改统称修改功能。
修改数据用例如下表所示。
表6-3 修改数据测试用例
测试用例编号 | YL_03 | |
测试用例名称 | 系统使用者进行修改数据 | |
测试用例描述 | 使用者对可修改的数据项进行修改 | |
系统入口 | 浏览器 | |
步骤 | 预期结果 | 实际结果 |
将现有数据修改成正确的数据 | 提示“修改成功”,并显示所有数据 | 预期结果 |
将现有数据修改成错误的数据 | 提示“修改失败” | 预期结果 |
在系统中,会存在不少已经过期或不需要的数据,因此删除功能的测试很有代表性。在此章节主要列举在删除时各种情况下系统结果的测试。
删除数据用例如下表所示。
表6-4 删除数据测试用例
测试用例编号 | YL_04 | |
测试用例名称 | 系统使用者进行删除数据 | |
测试用例描述 | 全部删除以及输入关键词删除 | |
系统入口 | 浏览器 | |
步骤 | 预期结果 | 实际结果 |
在可删除的界面选择所有数据进行全部删除 | 显示是否确认删除,确认后删除成功 | 预期结果 |
在可删除的界面选择部分数据进行 | 显示是否确认删除,确认后删除成功 | 预期结果 |
没有选中任何数据 | 显示删除失败 | 预期结果 |
(5)查询数据测试
在系统中,查询功能是使用系统使用最多也是最基础的功能,因此查询功能的测试很有代表性。在此章节主要列举在查询时各种情况下系统结果的测试。
查询数据用例如下表所示。
表6-5 查询数据测试用例
测试用例编号 | YL_05 | |
测试用例名称 | 系统使用者进行查询数据 | |
测试用例描述 | 全部查询以及输入关键词查询 | |
系统入口 | 浏览器 | |
步骤 | 预期结果 | 实际结果 |
界面自动查询全部 | 显示对应所有记录 | 预期结果 |
输入已存在且能匹配成功的关键字 | 显示所查询到的数据 | 预期结果 |
输入不存在的关键字 | 显示数据界面为空 | 预期结果 |
6.4 测试结果
在本次测试的过程主要针对用户登录和所有功能下的添加操作,修改操作、删除操作和查询操作,并以真实数据一一进行相关功能项目的输入,最终能够保证每个项目涉及的功能都是能够正常运行,因此能够保证本次设计的,已实现的功能能够正常运行并且相关数据库的信息也同样保证正确。经过对此系统的测试,得出该系统足以满足用户日常需求,在功能项目和操作等方面也能满足操作员对于其他用户的管理。但是,还有很多功能有待添加,这个系统仅能满足大部分的需求,还需要对此系统的功能更进一步的完善,这样使用起来才能更加的完美。
本章旨在评估旅游日记分享平台在功能、性能、安全性和用户体验等方面的质量。本旅游日记分享平台经过全面的测试和试运行后,确保本旅游日记分享平台功能全面,性能优良,运行稳定,能够满足用户的需求和期望。
第七章 总结与展望
经过对旅游日记分享平台的设计与开发,我们成功地使用djnago框架构建了一个便捷、高效的基于python的旅游日记分享平台。在系统的开发过程中,我们充分利用了python开源和djnago框架的优势,如自动配置、快速开发、功能丰富等特点,加快了项目的迭代和部署速度。同时,借助其提供的丰富的生态系统,我们引入了一些常用的第三方库和组件,增强了系统的功能和性能。
然而,旅游日记分享平台仍有进一步的改进空间。首先,我们可以继续优化系统的用户界面和交互体验,使其更加直观友好。其次,可以引入更多的智能化技术,提升用户的个性化体验和服务质量,为用户提供更全面的租赁服务。
未来,我们将继续关注用户的需求变化和行业趋势,持续优化旅游日记分享平台。通过不断的迭代和创新,我们希望将该系统打造成为行业的领先平台,为用户提供更便捷、高效的旅游日记分享平台体验。同时,我们也将加强与合作伙伴和供应商的合作,共同推动旅游日记分享平台行业的发展和创新。
总之,旅游日记分享平台在设计与实现过程中取得了一定的成果,但仍有进一步的改进和发展空间。未来我们将持续努力,不断提升系统的功能和性能,为用户提供更好的租赁服务体验。
参考文献
[1]韦鑫.基于用户兴趣模型的个性化旅游线路生成建模研究[J].自动化技术与应用,2024,43(03):177-180.DOI:10.20033/j.1003-7241.(2024)03-0177-04.
[2]Huang J .The Effect of UGC Food Travel Sharing on Impulse Travel Intention: Based on Presence[J].EconomicsManagement Review,2024,5(1):
[3]Luan Y ,Zhu X .Research on the Application of Intelligent Tourism Data Analysis Based on Python[J].Advances in Computer and Communication,2024,4(6):
[4]周喜平,杜航勤.基于协同过滤算法的附近景点推荐[J].电脑知识与技术,2023,19(36):13-15.DOI:10.14004/j.cnki.ckt.2023.1914.
[5]张启宁,吴国俊.基于Python网络爬虫技术的乡村旅游数据采集与分析[J].产业科技创新,2023,5(06):66-68.
[6]郭鹤楠.基于Django和Python技术的网站设计与实现[J].数字通信世界,2023,(06):60-62.
[7]班航.基于旅游大数据的用户画像建模及个性化推荐研究[D].安徽工程大学,2023.DOI:10.27763/d.cnki.gahgc.2023.000038.
[8]Dong F .Discussion on the Teaching Reform of Python Language Programming Course for Engineering Majors Based on OBE[J].Journal of Big Data and Computing,2023,1(1):
[9]Xiya Y ,Xianhe L ,Changping W , et al.Design and Deployment of Django-based Housing Information Management System[J].Journal of Physics: Conference Series,2023,2425(1):
[10]陈玲.基于Django的中国红色旅游推荐系统的设计与实现[J].软件,2022,43(09):100-103.
[11]谢红博,张伟建,张晓晶.旅游心得分享平台的研究与设计[J].现代信息科技,2022,6(10):21-24.DOI:10.19850/j.cnki.2096-4706.2022.10.004.
[12]郭瀚亭.基于Django框架的文件分享平台的设计与开发[J].信息记录材料,2022,23(03):139-141.DOI:10.16009/j.cnki.cn13-1295/tq.2022.03.075.
[13]Aditra G P ,Mahendra G I D .Web-Based System for Bali Tourism Sentiment Analysis during The Covid-19 Pandemic using Django Web Framework and Naive Bayes Method[C]//[出版者不详],2022:
[14]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
[15]宋永生,黄蓉美.基于Python的个性化教学资源分享平台[J].现代信息科技,2021,5(14):121-123.DOI:10.19850/j.cnki.2096-4706.2021.14.031.
[16]常佳宁,李阳齐.基于Django的个人博客系统设计开发[J].中国科技信息,2021,(02):75-77.
[17]杨柳,林晓华.旅游地点推荐系统开发[J].信息技术与信息化,2020,(11):13-15.
[18]师嘉名,严张凌.旅游日记APP的设计与开发[J].信息与电脑(理论版),2020,32(17):94-96.
[19]谢建华,梁杰华,郑剑.基于Django实现四方博客[J].电脑知识与技术,2019,15(23):51-54.DOI:10.14004/j.cnki.ckt.2019.2567.
[20]徐景芳.基于Python的旅游信息化与文化遗产旅游体验内生机理研究[J].当代旅游,2019,(04):59-60.
致 谢
在本文的最后,我要对许多人表示诚挚的感谢,他们为旅游日记分享平台的研发和完成做出了重要的贡献。首先,我要感谢我的导师,您给予了我悉心的指导和支持,在选题和研究过程中提供了宝贵的意见和建议。您的专业知识和严谨态度使我受益匪浅,让我能够顺利地完成毕业设计。其次,我要感谢我的同学和朋友们,你们在我写作和排版过程中给予了热情的帮助和鼓励。与你们一起度过的大学生活是我宝贵的回忆,你们的友谊让我感到无比温暖和快乐。
此外,我也要感谢那些为我们提供参考和指导的学者和专家们。他们的研究成果为我们的论文提供了宝贵的指导,使我们能够更好地理解问题和展开思考。
最后,我要感谢我的家人和爱人,你们一直以来对我无条件的支持和理解让我能够专注于学业。你们的鼓励和陪伴是我坚持不懈的动力。
在这段时间里,我收获了很多宝贵的经验和知识。尽管我的能力有限,但我会继续努力去完善这篇论文,并且真诚地希望各位老师和同学们能够给予宝贵的指导与意见。
最后,再次向所有支持和帮助过我的人表示深深的感谢!我会将所学所得用于实践,为社会做出自己的贡献。
关注+点赞+收藏+私信博主,免费领取项目源码