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

诗词网

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。

效果图:

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

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

微信小程序客户端

请添加图片描述

请添加图片描述

请添加图片描述

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

请添加图片描述

请添加图片描述

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序uniapp+vue校园任务跑腿接单平台java+python+nodejs+php

对于校园跑腿系统功能所牵扯的数据都是通过用户进行校园跑腿系统等相关的数据信息内容、并且可以进行管理员服务端;首页、个人中心、学生管理、跑腿者管理、系统公告管理、在线下单管理、已完成订单管理、订单评价管理、已接订单管理、系统管理,跑腿者客…

C++ Webserver从零开始:配置环境(九)——下载github的项目进行测试

前言 大家好,我又来更新Webserver的博客了。上一次更新这个专栏时2024.2.5号,离现在已经13天了。非常抱歉,中间隔了那么久。一方面是基础知识学完之后,就要开始自己写代码了。看基础知识和写代码是两回事,理论和实践的…

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习三(leetcode真题剖析)

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习三 01.字母大小写全排列02.优美的排列03.N 皇后04.有效的数独 01.字母大小写全排列 题目链接:https://leetcode.cn/problems/letter-case-permutation/ 给定一个字符串 s ,通过将字符串 s 中的每个字…

Walmart 砸23亿美元收购 Vizio | 百能云芯

美国零售巨头沃尔玛(Walmart)宣布以 23 亿美元的价格收购智能电视品牌 Vizio,该举措旨在加速其广告业务 Walmart Connect 的增长。市场研究机构 TrendForce 看好此收购案,认为这有助于 Vizio 挑战三星的地位,成为美国第…

如何在Linux搭建Inis网站,并发布至公网实现远程访问【内网穿透】

如何在Linux搭建Inis网站,并发布至公网实现远程访问【内网穿透】 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.…

苹果iPad通过Code APP应用实现SSH连接服务器远程进行开发

文章目录 1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. 配置固定TCP端口地址4.1 保留固定TCP地址4.2 配置固定的TCP端口地址4.3 使用固定TCP地址远程vscode 本文主要介绍开源iPad应用IDE Code App 如何下载安装,并…

「C#」WPF学习笔记-基础类及继承关系

1、DependencyObject DependencyObject是WPF中依赖属性系统的核心,它为WPF的数据绑定、动画和属性共享等功能提供了支持,是一个非常重要的基类。 其主要特点和职责包括: 依赖属性系统:DependencyObject 是所有支持依赖属性的类…

从中序与后序遍历序列构造二叉树

1.题目 这道题是2024-2-21的签到题,题目难度为中等。 考察知识点为递归。 题目链接:从中序与后序遍历序列构造二叉树 给定两个整数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历…

(12)ATF BL31中断

欢迎关注“安全有理”微信公众号。 概述 系统在运行过程中的任何阶段,都有可能产生中断。在Armv8架构系统中,TEE-OS运行在安全世界的EL1,Rich-OS运行在非安全世界的EL1,而BL31则运行于EL3。想实现各种中断在三种状态下被处理的统…

QT day3 作业2.22

思维导图: 作业: 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到…

JS前端高频面试

JS数据类型有哪些,区别是什么 js数据类型分为原始数据类型和引用数据类型。 原始数据类型包括:number,string,boolean,null,undefined,和es6新增的两种类型:bigint 和 symbol。&am…

2.22作业

test.c #include "test.h" seq_p creat_list(){seq_p L(seq_p)malloc(sizeof(seq_list));if(LNULL){printf("申请空间失败\n");return 0;}L->len0;return L; } int seq_p_empt(seq_p L){if(LNULL){return -12;}return L->len0?1:0; } int seq_p_fu…

PostgreSQL教程(二):pg安装、架构基础、创建并访问数据库

安装 自然,在你能开始使用PostgreSQL之前, 你必须安装它。PostgreSQL很有可能已经安装到你的节点上了, 因为它可能包含在你的操作系统的发布里, 或者是系统管理员已经安装了它。如果是这样的话, 那么你应该从操作系统…

BabylonJS 6.0文档 Deep Dive 动画(一):动画介绍

1. 动画介绍 无论动画如何实现,它都必须考虑所需的动作、时间、产生所需流动性所需的帧数以及序列中的关键点。这个介绍应该有助于理解Babylon.js是如何进行动画的,以及它们是如何实现的。 动画由一系列图像、帧生成,这些图像、帧一个接一个地…

Google插件Sider: ChatGPT Sidebar + GPTs GPT-4 Turbo Sider

Sider: ChatGPT Sidebar 可以使得满屏都是机器人,左侧栏可以打开访问GPT-4. 配置跳板机地址 google 搜索的右侧也有打开

MATLAB环境下基于短时傅里叶变换和Rényi熵的脑电信号和语音信号分析

傅里叶变换是不能很好的反映信号在时域的某一个局部范围的频谱特点的,这一点很可惜。因为在许多实际工程中,人们对信号在局部区域的特征是比较关心的,这些特征包含着十分有用的信息。这类信号因为在时域(或者是空间域)上具有突变的非稳定性和…

C语言自定义类型:结构体的使用及其内存对齐【超详细建议点赞收藏】

目录 1. 结构体类型的声明1.1 结构的声明1.2 结构体变量的创建和初始化1.3 结构的特殊声明---匿名结构体1.4 结构的自引用 2.结构体内存对齐(重点!!)2.1 对齐规则2.2 例题讲解2.3 为什么存在内存对齐?2.4 修改默认对齐…

华为全新研发中心即将启用,投资超百亿 | 百能云芯

2月19日 ,上海市发改委网站发布了《2024年上海市重大工程清单》,内容涉及科技产业、社会民生、生态文明建设、城市基础设施、城乡融合与乡村振兴等五大类,共191项重大工程。 191项重大工程中,科技产业类占比最多(76项&…

Spring Boot打war包部署到Tomcat,访问页面404 !!!

水善利万物而不争,处众人之所恶,故几于道💦 文章目录 Spring Boot打war包部署到Tomcat,访问页面404 !!!解决办法:检查Tomcat版本和Jdk的对应关系,我的Tomcat是6.x&#x…

RK3568平台开发系列讲解(Linux系统篇)通过I2C总线访问客户端方法

🚀返回专栏总目录 文章目录 一、普通I2C通信二、系统管理总线(SMBus)兼容函数三、在开发板配置文件中实例化I2C设备(弃用的旧方式)沉淀、分享、成长,让自己和他人都能有所收获!😄 串行总线事务只是访问寄存器来设置/获取其内容。I2C遵循该规则。I2C内核提供两种API,…