基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客?

前言

OK,我也来造轮子了

博客系统从一开始用WordPress,再到后来用hexo、hugo之类的静态博客生成放github托管,一直在折腾

折腾是为了更好解决问题,最终还是打算自己花时间搞一个好了

本系列文章将记录博客的开发过程~ 将会持续更新,欢迎关注~

后端基于最新的.Net6Asp.Net Core框架,遵循RESTFul接口规范,前端基于Vue+ElementUI开发,可作为 .Net Core 入门项目学习~

博客项目的开发已经基本完成,项目代码完全开源,点击原文可以查看项目地址,有兴趣的同学欢迎star/fork~

为啥要自己开发博客

  • 找不到一个让我满意的在线博客

  • 在线写博客体验不如在本地用typora写

  • 写公众号推文的话注意力会分散一部分到如何写得吸引读者而不是文章本身

  • 自己的网站才有完整的控制权,不会被垃圾平台添加不良信息污染

整体设计

虽然博客没啥技术含量,但还是要说一下我的想法

前面说到自己开发博客的原因有一点是我喜欢在本地用typora写博客,但markdown作为一种纯文本文件,有一个短板就是图片资源,无论是使用图床还是链接到本地,在发布的时候都有一定的麻烦。

图床可能失效,我还是习惯把资源放在本地可以自己掌握,但放在本地的话,要发布到博客园、公众号这类平台就免不了要一张张上传图片,很麻烦。

静态博客生成器可以把markdown转换成HTML然后放在github或者gitee托管,但前者国内几乎没法访问,后者自定义域名需要付费,加上现在管控严格,已经没法开启gitee pages了…

结合上述,我开发的博客最核心的一点就是要支持本地的markdown以及本地图片,要原封不动的利用我现有的几百个markdown文档来构建一个博客。

我不想做一个静态博客生成器,限制太大了,而且很多功能例如评论互动、更新推送等没办直接支持。

所以思路已经很明确了,这个博客需要读取本地的markdown文档,在不修改原有文档的基础上,将文档内容导入数据库中,同时收集文档里的资源文件(图片)。

然后博客前台为了更好的SEO效果,而且也很简单,使用后端渲染技术,不需要前后端分离;

博客数据都存储在数据库里,当然需要一个管理后台,这个后台就做成前后端分离的单页应用好了。

PS: 本来只考虑本地写完上传,后面又加了在线编辑功能,可以满足基本的文章编辑功能,体验还行

功能要求

所以总结下来,本项目开发的博客需要具备以下功能:

  • 本地markdown文章批量上传导入,根据目录结构解析文章分类(支持多级分类嵌套),解析markdown中的图片并导入到网站目录中

  • 本地摄影作品批量上传,读取图片EXIF信息并导入

  • 可以配置的博客主页(展示置顶和置顶的文章、图片、分类)

  • 代码片段编辑与分享功能

  • 后台需要完整的文章、分类、图片、代码片段编辑功能

  • 博客前台需要有将文章快捷发表到微信公众号、知乎专栏、博客园、掘金等平台的功能

OK,大概就这些了~ 更多功能可能后面想到了就加上~

技术选型

后端本来Django是最佳选择,自带管理后台,开发这类CMS系统最合适不过了。

然而我最近C#写得很顺手,也一直在学习AspNetCore这个高性能的web框架,觉得挺好用的,造轮子不能用太简单的工具来造,不然就失去挑战性也学不到太多新东西了… 于是就确定是AspNetCore了

前端选择之前用过的vue,前端技术栈除了不久前学了一点React之外就没怎么更新,所以先凑合一下快速实现,后面再考虑用blazor或者flutter之类好玩的新技术来重构~

所以很明确了

  • 后端:C# + AspNetCore

  • ORM:FreeSQL

  • 博客前台:Bootstrap + Vue + editor.md + bootswatch

  • 管理端:Vue + Vuex + VueRouter

  • 管理端UI:SCSS + ElementUI

博客截图

放几个截图咯

博客主页

d6dd9071ca4957cf46665d8058e22c99.png

文章列表

92df66b131a95f9be097b6225589813b.png

摄影页面(虽然现在还没把拍的照片放上去就是了)

46c2ec0523be70b9d1777fe376cc96e4.png

管理后台主页

4734d0b484b74461f3f87a5859943d26.png

后台文章列表

7fab9491b6dc2e7f38326e955f20b71a.png

文章编辑界面

0ac00a224777d6be283bbea33f7769c8.png

后台图片列表

3fc09745e955cae7ec3c374ffca72f8b.png

篇幅关系就放这些图片了~

博客马上就部署上线了,到时直接上demo链接!

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

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

相关文章

Diocp截图

跑了个数据库的查询和插入,删除。 Http SVR DEMO http://123.232.98.202:8081/

【C语言简单说】五:常用运算符

其实。。。这一节我我猜大家几分钟就会了&#xff08;&#xff09;…(⊙_⊙;)… ○圭~○列~~怎麼酱&#xff1f; 因为我相信大家的智商&#xff0c;我就随便给大家提一下就好了。我们看以下的代码&#xff1a; #include<stdio.h> #include<stdlib.h> int main(){…

sql 注入神器sqlmap 源码分析之调试sqlmap

为什么80%的码农都做不了架构师&#xff1f;>>> 相信大家平时 用sqlmap 命令&#xff0c;比如 python sqlmap.py -u"https://team.oschina.net/action/team/create" --data"nameonlyGuest&identonlyGuest&sidentonlyGuest&temp1431349…

【C语言简单说】六:取模运算符以及变量的扩展

┴┴ &#xff08;╰(&#xff40;□′)╯&#xff08; ┴┴ … 这一节我们就来说另外的运算符——取模运算符&#xff08;说白了跟取余数差不多…&#xff1c;—_-)&#xff01;&#xff01;&#xff01;&#xff09; 先看看好难懂的定义&#xff1a;取模运算和取余运算两个…

ExtJs5.0在WebStorm上的使用之入门教程(一)编写第一个网页 HelloExt

首先&#xff0c;必须声明一下笔者使用的软件版本&#xff1a; 前端开发工具&#xff1a;WebStorm 11.0.3 辅助插件&#xff1a;ext-5.0.0-gpl 以上工具包括下面的代码我已经打包上传在此处了&#xff1a;点击打开链接 先上代码&#xff0c;再废话&#xff1a;<!DOCTYPE htm…

腾讯视频涨价:一年多赚74亿!关注我领取腾讯VIP会员,周卡低至7元

不久前&#xff0c;腾讯视频的用户又一次“喜迎会员价格上涨”&#xff0c;甚至让腾讯视频因此登上了微博热搜。但要知道的是&#xff0c;此前在去年4月的时候&#xff0c;腾讯视频就已经涨过一次价了。4月9日&#xff0c;腾讯视频方面发布通知称&#xff0c;将于4月20日零点调…

使用JUnitParams简化Parameterized tests

为什么80%的码农都做不了架构师&#xff1f;>>> 序 junit4的Parameterized tests的使用方法太过费劲了&#xff0c;这里介绍下如何使用JUnitParams来简化Parameterized tests。 junit4原生的Parameterized tests实例 RunWith(Parameterized.class) public class Fi…

无约束优化问题求解(4):牛顿法后续

目录 前言SR1, DFP, BFGS之间的关系 BB方法Reference 前言 Emm&#xff0c;由于上一篇笔记的字数超过了要求&#xff08;这还是第一次- -&#xff09;&#xff0c;就把后续内容放到这篇笔记里面了&#xff0c;公式的标号仍然不变&#xff0c;上一篇笔记的连接在这&#xff1a;…

【C语言简单说】七:自定义函数(1)

在最开始的说过&#xff0c;函数可以比喻工具箱&#xff0c;那么我们现在开始自己开始制作函数了&#xff0c;自己制作函数是很简单的&#xff0c;如下代码&#xff1a; #include<stdio.h> #include<stdlib.h> //头文件下面 void dy(){printf("这里是dy函数\…

哈夫曼编码算法 java_我所知道的算法之哈夫曼编码

上一篇文章中提到数据结构&#xff1a;哈夫曼树&#xff0c;今天接着学习由哈夫曼提出编码方式&#xff0c;一种程序算法。简称&#xff1a;哈夫曼编码一、什么是哈夫曼编码&#xff1f;与哈夫曼树一样&#xff0c;会不会有小伙伴对哈夫曼编码很陌生&#xff0c;有疑惑问题疑惑…

Windows之Wireshake之抓HTTP请求包(过滤目的IP)

1 问题 用Wireshake抓取HTTP请求包 2 解决办法 直接在在WireShare里面过滤条件输入http 然后在浏览器输入http的请求,我的效果如下 看吧,都是http请求 如果数据太多,我只需要过滤一个目的的ip,我们可以这样设置参数 ip.addr == 目的ip && http 如下图 然后我输…

html使用element ui_Kendo UI for jQuery使用教程:自定义小部件(二)

Kendo UI目前最新提供KendoUI for jQuery、KendoUI for Angular、KendoUI Support for React和KendoUI Support for Vue四个控件。Kendo UI for jQuery是创建现代Web应用程序的完整UI库。Kendo UI通过继承基本窗口小部件类为您提供创建自定义窗口小部件的选项。处理事件1. 将更…

ASP.NET MVC 个人学习笔记之 Controller传值

2019独角兽企业重金招聘Python工程师标准>>> //ControllerViewBag.Message "Modify this template to jump-start your ASP.NET MVC application."; // View<section class"featured"><div class"content-wrapper"><…

Dapr 和 Spring Cloud 对比分析

很多人都是使用SpringBoot 和 Spring Cloud来开发微服务。Dapr 也是开发微服务的框架&#xff0c;它和Spring Cloud有什么区别呢&#xff0c;其实这不是一个区别的问题&#xff0c;它是不同的时代需要不同的框架。Spring Cloud 是一种产品&#xff0c;提供了分布式应用程序所需…

【C语言简单说】七:自定义函数(2)

刚刚说了如何自定义函数。那只是最简单的形式&#xff0c;那我们现在开始来说函数的返回值。我们先贴上之前的代码&#xff1a; #include<stdio.h> #include<stdlib.h> //头文件下面 void dy(){printf("这里是dy函数\n");} //main函数上面 int main() …

jdk源码分析书籍 pdf_什么?Spring5 AOP 默认使用Cglib?从现象到源码深度分析

推荐阅读&#xff1a;阿里工作十年拿下P8&#xff0c;多亏了这些PDF陪我成长&#xff08;Spring全家桶源码解析Redis实战等&#xff09;​zhuanlan.zhihu.com从入门到熟悉&#xff0c;一步一步带你了解 MySQL 中的「索引」和「锁」​zhuanlan.zhihu.comSpring5 AOP 默认使用 Cg…

Nginx monitor

为什么80%的码农都做不了架构师&#xff1f;>>> 最近在初步研究了一下nginx的监控&#xff0c;主要是想监控一些和业务相关的信息&#xff0c;发现能用的方案不多&#xff0c;主要有如下&#xff1a; 1 监控解析nginx log&#xff1a;ngxtop 官方的解释是可以…

ASP.NET 6 中间件系列 - 执行顺序

这篇文章是 ASP.NET 6 中间件系列文章的第 3 部分&#xff0c;你还可以阅读第1部分和第2部分。我们通过中间件创建的管道是有执行顺序的&#xff0c;执行顺序与中间件的添加顺序是相同的&#xff0c;接下来我们讨论一下为什么要有执行顺序&#xff0c;以及它的重要性。示例项目…

OSChina 周四乱弹 ——程序员怎么撩外国妹子攻略

2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单&#xff08;2017&#xff09;请戳&#xff08;这里&#xff09; 【今日歌曲】 冬天之雪 &#xff1a;听歌听到苏菲玛索和刘欢演唱《玫瑰人生》。有网友评论&#xff1a;法语专业的刘欢老师等的就是这一刻。…

【C语言简单说】七:自定义函数(3)

前一节说了返回值的内容&#xff0c;那么这一节就说一下参数的内容 手打码了几章内容了。。。。困。&#xff3e;(&#xffe3;&#xff09;&#xffe3;)《(&#xffe3;&#xff09;&#xffe3;)&#xff3e;困.困.困. 相比看过前一节的知道我说自定义函数如果你要做一个运…