一个诗词网站的设计与实现

诗词网

0、前言

​  前段时间非常喜欢诗词,又恰逢想开发一个社区类的系统,于是便有将两者结合起来的构想,说干就干,便有了诗词网(诗词社区系统)这个项目。

​  由于是利用空闲时间进行开发,为了加速开发,则选择以开源的模板项目为基础进行二次开发及拓展开发,后端选择了人人开源这个项目,小程序也使用了一个开源项目为模板,不过距今有些时日,竟找不着原出处了,有知道的小伙伴可以帮助指出。


1、简介

​  该系统采用了前后端分离的总体架构,整个系统由三个子系统构成:微信小程序客户端、管理员后台系统、数据接口后台。微信小程序客户端采用了微信小程序原生开发技术和ColorUI样式组件库;管理员后台系统采用了Vue2技术和ElementUI组件库;数据接口后台采用目前市面上比较主流的分布式架构:SpringCloud微服务架构,采用MySQL作为数据库,采用Redis作为缓存数据库以及消息中间件RabbitMQ来提高系统的运行效率。

​  数据接口后台提供对管理员后台系统和微信小程序客户端的数据支持;管理员后台系统则提供一个可视化的平台(以网站形式呈现)供管理人员对诗词社区系统进行管理和维护;微信小程序客户端则直接面向用户,提供诗词查阅、发布诗词鉴赏文章和一系列社区功能。

​  该系统实现的功能主要体现为两个方面,第一方面,客户端用户对诗词的交互,包括浏览、收藏、建议等;对文章的交互,包括创作、管理、浏览、搜索、点赞、评论、收藏等;对用户的交互,包括私信、关注等。第二方面,后台管理员对诗词、文章、用户的管理功能以及流量监控、词云等拓展功能。

​  该系统的结构性优点主要体现在前后端分离的总体架构、微服务后台架构和中间件的采用保证了系统的可维护性、高稳定性、高拓展性和高性能,功能性优点主要体现将诗词系统和社区系统的特点相融合,将社区属性注入诗词文化中。


2、需求分析及设计

​  本诗词社区系统从用户的使用角度出发,将系统分为管理员后台系统和微信小程序客户端。管理员后台系统主要供管理员使用,用于系统的管理和维护;微信小程序客户端主要供用户使用,用于系统的使用。

​  系统需求分析图如下所示。请添加图片描述

​  系统E-R图如下所示。

在这里插入图片描述

​  系统总体功能结构图如下所示。
在这里插入图片描述


3、架构设计

总体设计

​  本系统以SpringCloud微服务框架为核心进行构建,使用SpringBoot作为各个服务的启动器;使用Nacos作为服务的注册中心和配置中心;使用SpringGateway作为各服务的网关,过滤和转发各服务的请求;使用OpenFeign作为各个服务间通信的远程调用;使用MySQL作为各服务的数据存储层;使用Redis作为系统的缓存数据库;使用RabbitMQ作为系统的消息中间件,用于业务的解耦、异步、削峰。系统架构图如下所示。

请添加图片描述

通信框架

​  微信小程序客户端通过Http协议发送请求到SpringCloud微服务后台进行处理并返回对应的数据。

​  Http请求首先到达SpringGateway网关,由SpringGateway网关对请求进行过滤并分发到相对应的微服务模块,再由对应的微服务模块对请求进行处理并返回相对应的数据。通信框架如下所示。

请添加图片描述

认证流程

​  当用户通过微信小程序客户端进行登录(或注册)时,会发送请求到认证模块,由认证模块进行认证处理。

​  认证模块的认证服务由OAuth2认证和JWT实现,首先用户点击登录(当未注册点击登录时,会在认证服务中完成注册并登录),微信小程序客户端调用wx.login()获取code,再通过wx.request()发送Http请求将code发送到认证服务,认证服务再解析code并调用微信官方的登录凭证校验接口完成对code的校验。如果校验通过,会从微信接口服务获取session_key和openid等数据,如果校验不通过,则返回登录失败,此过程为OAuth2认证。

​  当校验通过时,认证服务会申请一个Token令牌(经加密算法加密)返回给客户端,客户端接收到此Token后将其存Cookie中,并在此后的每一次业务请求中携带上Cookie。当携带Cookie(含Token)的请求到达SpringGateway网关时,SpringGateway网关就可以对Token进行解析校验,而不用每次都去认证服务进行认证,此过程为JWT。认证时序图如下所示。

请添加图片描述


4、系统实现

开发环境:

(1) JDK版本:JDK11;

(2) 服务器系统版本:CentOS8;

(3) 开发环境系统版本:Windows11;

(4) 开发工具:IDEA、VSCode、微信小程序开发者工具;

(5) 数据库:MySQL8

(6) SpringCloud版本:Hoxton.SR9。

效果图:

管理员后台系统
请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

微信小程序客户端

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述
请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/695137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode | 寻找两个正序数组的中位数 Python C语言

Problem: 4. 寻找两个正序数组的中位数 文章目录 思路解题方法Code结果结果一些思考 思路 先合并,后排序,最后找中间轴。 解题方法 由解题思路可知 Code 这是python3的代码。 class Solution(object):def findMedianSortedArrays(self, nums1, num…

PyTorch深度学习实战(37)——CycleGAN详解与实现

PyTorch深度学习实战(37)——CycleGAN详解与实现 0. 前言1. CycleGAN 基本原理2. CycleGAN 模型分析3. 实现 CycleGAN小结系列链接 0. 前言 CycleGAN 是一种用于图像转换的生成对抗网络(Generative Adversarial Network, GAN),可以在不需要配…

docker 安装Oracle19c

一、下载镜像 docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c通过docker images 命令查看 如下图:已经有oracle 19c镜像。 二、创建挂载文件 # 创建文件 mkdir -p /home/data/oracle/oradata# 授权,不授权会导致后面安装失败 c…

六西格玛培训揭秘:线上与线下费用差异背后的原因

在当今知识经济的时代,六西格玛作为一种先进的质量管理方法,受到越来越多企业和个人的青睐。然而,当我们在选择六西格玛培训时,不难发现线上和线下的培训费用存在明显的差异。那么,究竟是什么原因导致了这种差异呢&…

NDK的log.h使用__android_log_print报错app:buildCMakeDebug[x86_64]

org.gradle.api.tasks.TaskExecutionException: Execution failed for task :app:buildCMakeDebug[x86_64] 重点是 Execution failed for task :app:buildCMakeDebug[x86_64]. 我的代码&#xff1a; #include <android/log.h> #define LOG_TAG "MyJNI" #d…

ElasticSearch聚合操作

目录 ElasticSearch聚合操作 基本语法 聚合的分类 后续示例数据 Metric Aggregation Bucket Aggregation ES聚合分析不精准原因分析 提高聚合精确度 ElasticSearch聚合操作 Elasticsearch除搜索以外&#xff0c;提供了针对ES 数据进行统计分析的功能。聚合(aggregation…

压缩感知中常用的稀疏基

稀疏基的基本概念 在压缩感知中&#xff0c;稀疏基是指可以将信号表示为少数几个非零系数的基。信号在这组基下的表示称为稀疏表示。理想情况下&#xff0c;信号在稀疏基下的大部分系数都应该为零&#xff0c;只有少数几个系数是非零的。稀疏基的选择对信号的稀疏表示和压缩感…

第3.4章:StarRocks数据导入-Routine Load

注&#xff1a;本篇文章阐述的是StarRocks-3.2版本的Routine Load导入机制 一、概述 Routine Load&#xff08;例行导入&#xff09;支持用户提交一个常驻的导入任务&#xff0c;可以将消息流存储在 Kafka 的Topic中&#xff0c;通过订阅Topic 中的全部或部分分区的消息&#…

AN7525 集成锂电池充电管理和轻触三功能 LED 驱动专用芯片 实现全亮、25%亮、暴闪和灭 三种功能

AN7525是一款单片集成锂电池充电管理和轻触三功能 LED 驱动专用芯片。其内部集成了锂电池充电管理电路&#xff0c;可提供高达 600mA的充电电流:内部集成了高达 800m 的 LED 驱动电路&#xff0c;可驱动单颗 LED 实现全亮25%亮、暴闪和灭循环的轻触三功能切换控制。 AN…

【MySQL】报错 Incorrect string value: ‘\xE5\xA4\xA9\xE5\x96\x9C‘ for column的解决方法

目录 解决方法如下&#xff1a;例如&#xff1a; 在向数据库中插入中文时遇到报错Incorrect string value: \xE5\xA4\xA9\xE5\x96\x9C for column &#xff0c;此时为数据库的编码格式有问题&#xff0c;可以按照如下方法修改 解决方法如下&#xff1a; 使用show create table…

Hash 算法详解!

什么是Hash算法 散列算法&#xff08;Hash Algorithm&#xff09;&#xff0c;又称哈希算法&#xff0c;杂凑算法&#xff0c;是一种从任意文件中创造小的数字「指纹」的方法。Hash算法就是一种以较短的信息来保证文件唯一性的标志&#xff0c;这种标志与文件的每一个字节都相…

COMSOL在光电领域应用(常见案例合集)

随着科技的飞速发展&#xff0c;光电领域作为现代科学与技术的交汇点&#xff0c;正受到越来越多的关注。在这一领域中&#xff0c;COMSOL作为一款强大的多物理场仿真软件&#xff0c;正发挥着不可或缺的作用。本文将通过一些常见的案例&#xff0c;探讨COMSOL在光电领域的应用…

学习数仓工具 dbt

DBT 是一个有趣的工具&#xff0c;它通过一种结构化的方式定义了数仓中各种表、视图的构建和填充方式。 dbt 面相的对象是数据开发团队&#xff0c;提供了如下几个最有价值的能力&#xff1a; 支持多种数据库通过 select 来定义数据&#xff0c;无需编写 DML构建数据时&#…

基于EasyCVR视频汇聚系统的公安网视频联网共享视频云平台建设思路分析(一)

随着社会的发展和科技的进步&#xff0c;视频监控系统在各个领域的应用越来越广泛&#xff0c;视频云平台建设已经成为了行业数字化转型的重要一环。公安网视频汇聚联网共享云的建设需要充分考虑技术、架构、安全、存储、计算等多方面因素&#xff0c;以确保平台的稳定性和可用…

openEuler2203 LTS安装VMware WorkStation Pro 17并远程桌面连接Linux服务器

openEuler 2203 LTS默认只有命令行&#xff0c;没有GUI图形界面&#xff0c;在其中安装VMware WorkStation需要有图形界面的支持。这里以安装深度的DDE桌面环境&#xff0c;最后通过VNC远程桌面连接Linux服务器操作VMware WorkStation。 以下操作请保持网络能正常连接 1、安装…

智能搬运机器人|海格里斯将如何持续推进工业和物流的智能化升级与发展?

存取、搬运、分拣是物流行业中的通用功能&#xff0c;但具体到每个行业又十分不同&#xff0c;例如&#xff1a;新能源电池领域&#xff0c;它所搬运的东西是电池&#xff0c;50KG~200KG&#xff1b;快递行业领域&#xff0c;所要处理的物料是那种扁平件和信封等等&#xff0c;…

AN7523 轻触三功能LED驱动芯片 全亮、25%亮和暴闪三种功能的切换 适用于头灯、手电筒等

AN7523是一款轻触三功能 LED 驱动芯片。可驱动单颗 LED 实现全亮、25%亮、暴闪和灭循环的轻触三功能切换控制。AN7523内部集成按键防抖模块&#xff0c;可实现对轻触开关的检测与按键防抖。通过轻触开关控制LED实现全亮、25%亮和暴闪三种功能的切换&#xff0c;并可通过长按开关…

音频常用测试参数(一)

一、总谐波失真&#xff08;THDN&#xff09; 总谐波失真指音频信号源通过功率放大器时&#xff0c;由于非线性元件所引起的输出信号比输入信号多出的额外谐波成份。谐波失真是由于系统不是完全线性造成的&#xff0c;我们用新增加总谐波成份的均方根与原来信号有效值的百分比来…

2.5《Python3 网络爬虫开发实战》学习之实例实战1

目录 1 实战内容 2 确定思路 3 代码实操 3.1 实现一个个网页的爬取 3.2 爬取每一个网页的电影详情页url ​编辑 3.3 连接链接&#xff0c;针对每个详情页链接进行爬取、汇总内容 3.4 存储在txt文件中 4 结尾&#xff1a;整体代码 1 实战内容 爬取Scrape | Movie中所有…

板块一 Servlet编程:第七节 ServletContext对象全解与Servlet三大域对象总结 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程&#xff1a;第七节 ServletContext对象全解与Servlet三大域对象总结 一、什么是ServletContext对象二、获取ServletContext对象及常用方法&#xff08;1&#xff09;获取 ServletContext 对象&#xff08;2&#xff09;ServletContext对象提供的方法 三、se…