私人博客定制

 

项目背景 

可行性方面

需求分析:

详细设计:

数据库设计

博客管理API的设计

标签相关API

服务器端的实现

对数据库操作进行封装

对服务器操作进行封装

客户端实现

具体操作

使用markdown

具体实现

测试

项目效果展示

维护

完整代码


项目背景 

       现在的时代信息越来越多,我们每时每刻都在学习和接受各种信息,我们要怎样保存这些信息,并且 向他人展示,写博客就是一个很好的方法。
        现在有很多的博客网站就是实现这样的功能,这个项目就是实现一个自己的博客网站,可以把我们平时的学习和生活记录下来。

可行性方面

  • 经济可行性——低成本
  • 操作可行性——简单
  • 技术可行性——借助其他工具

需求分析:

       支持单个用户

       我们的客户端是在浏览器上实现的,要在浏览器上进行对博客的操作,编辑,修改,删除,增加等。

       服务器器端在Linux上实现,针对每一个客户端的按钮都要有对应的事件处理。

       存储用MySQL数据库,调用c/c++API进行对博客的管理

博客服务器端要实现的功能

  1.  对博客的管理能力
  2.  对标签的管理能力

博客客户端要实现的功能

  1. 博客标题列表页面 
  2. 博客内容展示页面
  3. 博客管理页面
  4. 博客内容编辑页面

数据存储要实现的功能

  1. 服务器存储 markdown 格式的数据
  2.  前端通过 editor.md 这个工具将markdown的文档内容提交给服务器, 或者解析服务器返回的 markdown 作为 前端页面内容. 

详细设计:

数据库设计

       对于博客管理而言,一个博客除了自己的编号外,一但博客量比较大,我们还需要标签来对其进行管理。所以我们的数据库需要两张表

对于博客表,那么它肯定有博客编号,标题,正文,创建时间,还有所对应的标签信息

drop table if exists blog_table
create table blog_table(blog_id int(6) not null primary key auto_increment,title varchar(50),content text,tag_id int,create_time varchar(50));

对于标签表而言,我们只需要有标签的编号,和标签所对应的名字即可

drop table if exists tag_table
create table tag_table(tag_id int not null primary key auto_increment  ,tag_name varchar(50)
);

有了这两张表后接下来我们就要实现服务器端的程序了

博客管理API的设计

 新增博客
 

POST/blog
{title:xxxx,content:xxxx,create_time:xxxx,tag_id:xxxxx,
}
成功返回一个:
HTTP/1.1 200 OK
{ok:truereason: " "        //失败的原因
}


展示博客列表
 

GET/blog                    //获取所有
GET/blog?tag_id = 1;    //按照标签来筛选HTTP/1.1 200 OK
[{blog_id:1,title:"我的第一篇博客",create_time:"2019/--/--"tag_id:1    },
]



展示博客详细内容
 

GET/blog/:blog_id        //冒号后面代表一个真正的博客id,是一个数字。类似于/blog/10HTTP/1.1 200 OK
{"blog_id":1,"title":"我的第一篇博客",create_time:"2019/--/--",tag_id:1
}



 删除博客
 

DELETE/blog/:blog_idHTTP/1.1 200 OK
{ok:true;
}


 修改博客
 

PUT/blog/:blog_id
{title:"修改后的标题",content:"修改之后的正文",tag_id:"修改之后的tag_id",
}HTTP/1.1 200 OK
{ok:true
}

 

标签相关API


 新增标签
 

POST/tag
{"tag_name": "新增的标签名"
}HTTP/1.1 200 OK
{ok:true
}


 

删除标签
 

DELETE/tag/:tag_idHTTP/1.1 200 OK
{ok:true
}

查看所有标签
 

GET/tagHTTP/1.1 200 OK
[{tag_id:1,tag_name:c++}
]

服务器端的实现

由于数据库封装和服务器端封装代码比较多,所以另写两篇博客


对数据库操作进行封装

封装数据库

对服务器操作进行封装

服务器封装的链接

客户端实现

HTML-----网页的骨架

CSS-----网页的样式(大小/颜色/位置/边框/...)

JavaScript-----网页和用户之间的交互动作

我并没有专门学过前端,但是考虑到开发项目客户端,我还是专门学了一些简单前端知识

JS教程     css教程    HTML教程

最后综合各种的前端开发语言,我还是决定选择用JQuery+Vue.js来实现

使用 Vue.js

为什么使用Vue.js。?

因为它的开源社区是中文的,而且作者是中国人(尤雨溪),既然是中国人肯定按照中国人的思维开发出的vue.js。所以因该用起来不是很难

网页中需要动态交互的部分, 使用 JS 来实现. 但是原生的基于 Dom API 的交互方式比较麻烦, 因此 Vue.js 提供了更简
单更方便的做法.

使用ajax来获取数据

ajax具体操作学习----->学习网站

具体操作

使用markdown

提交,存储博客的时候,都可以用markdown格式的数据来表示,展示的时候,就自动把markdown数据转成html格式的数据

我们需要第三方库来实现这样的操作,Editor.md第三方的JS库,完成markdown和html相互转换,以及markdown在线编辑器的功能

具体的操作需要看官网介绍

http://editor.md.ipandao.com/

1. 博客列表页

2.博客详情页

以上实现由于html静态网页实在是代码量比较大,不方便在此展示,只能放到GitHub上,如果有需要请自行下载

上面两个页面都是给大家看的

而下面的页面则是只能自己看

3.博客管理页面

删除博客

编辑博客:点击博客进入编辑页面,编辑页面中应该有一个

插入博客:markdown编辑器,编辑器里的内容已经是博客当前内容了,编辑完成后,点击提交按钮,就把服务器发送到服务器上

 

具体实现

由于前端代码量过大,不易展示,访问下面网站查看详情

https://github.com/514467952/Private-blog_workstation.git

测试

在完成三个面的实现后,我们需要对整个项目进行测

测试方式:在数据库和服务器相应功能实现上,采用单元测试,且测试方法采用白盒测试

具体的测试代码均在上面的网址。

文件加载测试:按钮中实现跳转页面,确认是否能够跳转

总体测试:完整操作,验证是否能和功能对应

项目效果展示

首页展示

查看博客页面

后台管理博客页面

后台插入博客页面

维护

  • 这是一个轻量级的项目,目前只针对单人使用。以后等我技能提升后,会支持多用户登陆并进行操作。
  • 底层用的httplib的库,这个底层实现了多线程,可以支持多用户访问。
  • 目前实现的功能,尚且只有博客的增删改查,虽然关于标签的增改,后台功能已实现,但由于本人前端编程语言并不是很熟所以还无法实现
  • 博客的内容不易过长,因为本人端编程语言不是很熟,没有实现翻页的功能,

完整代码

https://github.com/514467952/Private-blog_workstation.git

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

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

相关文章

初识c++中的函数模板

函数模板 函数模板概念 函数模板:编译器生成代码的一个规则。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。 函数模板格式 //要让这个函数与类型无关 //Add函数模板 template…

深入理解c++中的函数模板

非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使…

c++中的IO流

c语言中的IO操作 标准类型的输入输出: 输入------>数据来源是通过键盘进行输入输出------>程序中的数据输出到控制台 c语言中: scanf:输入 printf:输出 两个函数的相同点 1 —格式串 2 —不定参数 两个函数的缺陷 1 —用户要提供数据的格式—用户要记忆大量的格式串—…

201301 JAVA2~3级---走格子

请编写一个函数(允许增加子函数),计算n x m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即&…

复习Linux基本操作----常见指令

Linux基本操作 ls命令 ls(list):相当于windows上的文件资源管理器 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目…

复习Linux基础操作---权限操作

shell命令以及运行原理 Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟…

【剑指offer】_01 (二维数组中的查找)

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该…

再谈c++中的多态

何为多态 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 多态的实现 在继承的体系下 基类中必须有虚函数(被virtual关键字修饰的成员函数),在派生类中必须…

再谈c++中的继承

继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了…

红黑树概念及其相关操作的实现

红黑树的概念 红黑树,是一种二叉搜索树,但它并不像AVL树一样,每个结点绑定一个平衡因子。但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过 对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c…

模拟实现STL中map和set容器

红黑树的迭代器 //红黑树的迭代器 template<class T> struct RBTreeIterator {typedef RBTreeNode<T>Node;typedef RBTreeIterator<T> Self; public:RBTreeIterator(Node* pNode nullptr):_pNode(pNode){}//具有指针操作T& operator*(){return _pNode-…

排序上---(排序概念,常见排序算法,直接插入,希尔排序,直接选择排序,堆排序)

排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&…

排序下---(冒泡排序,快速排序,快速排序优化,快速排序非递归,归并排序,计数排序)

排序上 排序上 交换类排序 基本思想&#xff1a;所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&#xff1a;将键值较大的记录向序列的尾部移动&#xff0c;键值较小的记录向序列的前部移动。 冒泡…

哈希的概念及其操作

哈希概念 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较。顺序查找时间复杂度为O(N)&#xff0c;平衡树中为树的高度&#xff0c;即O( Log2N)&#xff0c;搜索的效率取决…

软件工程---1.概述

软件的特征 抽象&#xff1a; 不可触摸&#xff0c;逻辑实体&#xff0c;可记录&#xff0c;但看不到复制成本低&#xff1a;不受物质材料的限制&#xff0c;不受物理定律或加工过程的制约&#xff0c;与开发成本相比&#xff0c;复制成本很低无折旧、受硬件制约、未完全摆脱手…

软件工程---2.软件过程

三个模型 瀑布模型增量模型集成和配置模型 没有适用于所有不同类型软件开发的过程模型。 瀑布模型 需求定义系统和软件的设计实现与单元测试集成与系统测试运行与维护 瀑布模型的特征 从上一项活动中接受该项活动的工作成果&#xff08;工作产品&#xff09;&#xff0c;作…

软件工程---4.需求工程

需求工程定义 找出、分析、文档化并且检查需求的过程被称为需求工程 需求的两个描述层次 用户需求&#xff0c;指高层的抽象需求。使用自然语言、图形描述需求。系统需求&#xff0c;指底层的详细需求。使用系统需求文档&#xff08;有时被称为功能规格说明&#xff09;应该…

软件工程---5.系统建模

从不同视角对系统建模 外部视角&#xff0c;上下文模型&#xff0c;对系统上下文或环境建模交互视角&#xff0c;交互模型&#xff08;功能模型&#xff09;&#xff0c;对系统与参与者或系统内构件之间的交互建模结构视角&#xff0c;结构模型&#xff08;静态模型&#xff0…

软件工程---6.体系结构设计

体系结构模型是什么&#xff1f; 体系结构模型&#xff0c;该模型描述系统如何被组织为一组相互通信的构件 体系结构分类 小体系结构关注单个程序的体系结构。在这个层次上&#xff0c;我们关注单个的程序是如何补分解为构件的。大体系结构关注包括其他系统、程序和程序构件…

【剑指offer】_07 矩形覆盖

题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形&#xff0c;总共有多少种方法&#xff1f; 解题思路 依旧是斐波那契数列 2n的大矩形&#xff0c;和n个21的小矩形 其中target*2为大矩阵的大小 有以下几种情形…