2024年,如何打造惊艳的个人博客/出版系统并且赚点小钱?

个人博客网站项目 个人博客项目概述 本项目源码gitee链接 此项目为一个博客项目,仿照简书平台。用户可以登陆和注册账号、发布和预览文章、对文章进行评论。主要有四部分构成:首页、登录页面、发布文章页面、查看文章页面(含评论发布和预览)。使用ajax获取数据,使用express搭建服务器,使用moogose中间件调用mongodb数据库,使用jwt进行鉴权。 首页 正逢冬奥会开幕所以给冰墩墩做了个博客空间,配色也以蓝白为主调。 构成 首页主要分为以下几个部分: 博客头部:网站名称+个人主页入口 博客左部:最新文章+最新文章 阅读详情

几年前,我就推荐过用Markdown写作静态博客。静态博客几乎是零托管成本,比较适合个人博客起步。Markdown便于本地搜索,也可当作是个人知识库方案。

现在有了新的进展。我不仅构建了一个视觉上相当不错的个人网站,还美化了github、构建了个人出版系统 – 将文章导出为排版精美的图片和pdf的能力。


这一方案的核心是Mkdocs和Mkdocs-material。前者是Python技术文档构建系统,后者是与之适配的主题。我在《Python能做大项目》这本书中,深入介绍过这两种技术。

现在,基于这两种技术,我们可以走得更远:不仅可以撰写技术文档,更可以打造博客和门户网站。

下图就是截取的大富翁量化的网站界面:

在这里插入图片描述


你可以在大富翁量化网站上看到它最新的样式。更有创意的是,虽然它只是一个静态网站,但你每次刷新它,都能看到一些新的内容 – 至少配图会变!

这是首页。菜单栏、搜索这些是常规配置。标签云、首页的卡片式布局,是提升站点气质的地方。

所有的文档都有版本管理,我使用了github来托管文档和图片,所以,也顺便把github的个人主页美化了一下:

75%

实在说,之前我没有想过,github主页也可以做得像个人网站。不得不说一张好图,能大大提升颜值。


此外,作为创作者,我还希望自己的文章能在多个渠道上发布,包括公众号、知乎、优快云和小红书,有时候还需要把文章导出为PDF。这些渠道采用的技术大不相同,它们的排版要求也不一样,所以,要想不把时间无谓地浪费在枯燥、重复的排版上,我们就得用好各种工具。

1. Mkdocs + Mkdocs - Material

基础搭建我都写在《Python能做大项目》这本书的第10章中了,这里我们只介绍如何开通博客功能,以及定制首页。

Material自带了博客插件,我们只需要在配置中启用它(以及其它相关插件):

plugins:
  - awesome-pages:
      collapse_single_pages: true
  - blog:
      post_excerpt_separator: <!--more-->
  - tags:
      tags_file: tags.md
  - rss:
      match_path: "(blog|articles)/.*"
      categories:
        - categories
        - tags
      date_from_meta:
        as_creation: "date"
        as_update: true
        datetime_format: "%Y-%m-%d %H:%M"
        default_timezone: Asia/Shanghai
      use_git: false

其中rss插件需要安装mkdocs-rss-plugin插件。关于如何定制标签云,请参考Code Inside Out上的这篇文章。

该文也提到了如何实现最新博文的功能。不过,博主最后决定自己用Python撸一个方案,以实现本文开头提到的效果 – 动态和卡片式,并且能自动更新github的profile。

2. 自定义脚本生成卡片式首页和github profile

这个方案主要使用了python-frontmatter库。通过一个脚本,搜索articles和blog目录下所有的md文件,读取它们的front matter,再按日期排序,将最新发表的文章和博文的摘要、日期、title和首图抽取出来,通过模板生成一个新的README.md文件,放到项目根目录下。

github会读取这个文件作为我们的profile,mkdocs-material也会根据这个文件,生成网站首页。

这个readme.md实际上是一个带部分html标签的md片段。我先用脚本生成了供mkdocs使用的README.md,待网站发布后,再生成供github的profile使用的readme.md。区别主要在于,github的profile中不能使用’<style>'标签来定义样式,它只允许在README.md中html标签中,使用少量的样式语法。

!!! tip
如果对这个方案的细节感兴趣,可以直接访问zillionare这个项目。mkdocs-material的定制在docs/overrides目录下。构建Readme.md的脚本在根目录下,名字为publish.py。

为了生成响应式的卡片布局,我使用了bootstrap中card样式。它简单到只要把父容器声明为card-columns类,card元素的样式声明为card就可以了。此外,为了根据不同的屏幕大小,显示不同的card列数,可以使用媒体查询和column-count属性,在docs/assets/templates/homepage.tpl文件中有示例。

在publish.py脚本中,我使用了frontmatter来提取文章中的meta,但它的速度有点慢。不过这是一个使用多进程加速的好场景:

metas = []
articles = glob.glob("./docs/articles/**/*.md", recursive=True)
with ProcessPoolExecutor() as executor:
    results = executor.map(extract_article_meta, articles)
    metas.extend([meta for meta in results if meta is not None])

这样就可以多进程处理文件了。最终结果会汇总到metas这个数组中。

!!! tip “图片自动换新技巧”
图片自动换新,可以给静态网站增加动态内容。让读者每次访问,都有不一样的感觉。这是通过unsplash网站的gallery功能来实现的。unsplash是一个免费图片资源共享网站,提供了大量高清、很高质量的免费图片。如果我们将img元素的url指向’https://source.unsplash.com/random/360x200?{word}'这样的地址,unsplash就会返回一个360x200,并且其类别为word的图片。

3. 发布到小红书

小红书发文不能超过1000字,并且很难格式化。如果要分享文字、代码并且做到混排,惟一的方法就是将其转换成为图片。这个步骤有点繁琐,不过,这也成为一种壁垒,导致深度内容在小红书上比较稀缺。因此,如果能搞定格式排版,这样就可以有效地利用小红书的分发。

我的方案是使用slidev。它是一个基于markdown语法来创作在线演示的方案,提供了转换为图片的功能。因此,我们基于mkdocs+material创作的文档,只要加上少量的标记和定制,就可以很容易地转换成为图片。



要实现这个功能,在安装slidev之后,先进行主题定制。最重要的是cover layout的定制。左图就是我之前为小红书日更设计的一个首页样式。

我们可以设计多个样式,在导出时,使用下面的命令:

npx slidev export --format png -t /path/to/slidev_themes/special_theme_dir --output /tmp/xhs /path/to/src.md

我们需要在markdown内容中的合适位置,增加"—"作为分页符,这样就能导出一页页适合在小红书上发布的图片了。

4. 发布到微信公众号

微信公众号排版一直是个问题。我甚至一度放弃了公众号创作。作为技术极客,我拒绝了几乎任何不是基于Markdown的排版方案 – 都什么年代了,写个自媒体都是赔钱的,平台还好意思要求我们专门为你们排版?

直到我遇到了mdnice。

它甚至比我自己使用mkdocs-material的排版还要漂亮 – 特别是它对代码的处理部分 – 我超爱她深色主题下的50道阴影!

我现在也超爱写公众号了!不过,什么时候mdnice能实现markdown的admonition语法就更好了。毕竟,这是个信息过载的时代,我们必须用一些留白来缓解密集信息恐惧症,同时用一些闪耀的装饰吸引读者,避免他们走掉。



当然,mdnice也可以直接发到优快云上。不过,这样会失去定时发布以及自定义标签、选择专栏、定制首图的能力,所以,我宁愿自己登录到优快云的网站上去编辑,好在,它提供了markdown编辑器,并且能自动处理图片链接。因此,我并不需要一个个地从本地上传,这省了我不少时间。

5. 发布到知乎

如果你使用的是vscode来编辑markdown的话,就可以使用一个名为Zhihu On VSCode的扩展。它支持定时发布(一天以内)、选择专栏,但不支持添加话题,另外,它不能正确处理(去掉)frontmatter。

但是它能处理markdown中的图片链接。这样就省去了我上传图片的时间。它对代码也能很好处理。

不过,知乎的文档格式确实太素净了。

6. 转换为pdf

slidev也可以转换成为pdf。不过,我更喜欢使用vscode的markdown preview enhanced来转换pdf。最终提供转换的是chrome+puppetter。通过在文档的frontmatter中加上适当的标记,就能生成页眉和页脚。

右图就是它导出的一例。

此外,slidev也可以导出pdf。要实现页眉和页脚,需要要定制global-top和global-bottom,一旦定制完成,这种方案似乎更好,毕竟,它是手动分页,我们对页面的控制力更强。

7. 赚点小钱

辛苦辛苦写了博客,想办法赚点钱吧。我们可以通过前面提到的ovrrides方案,让mkdocs-material为每个页面插入一个js脚本。

如果你加入了广告联盟,它们一般就会为你提供一个js脚本,把这个js插入进去就可以了。也可以自己写一个js,把自己要发布的广告,以html片段的形式,放在docs目录下的某一个子目录中,然后通过下面的代码把这些片段插入进来:

function insertAd(minParas, minWords){
    var links = document.querySelectorAll("a[href*='" + link + "']");
    if (links.length > 0){
        console.log("已添加")
        return
    }

    var paras = document.querySelectorAll("article p");
    var wordCount = 0
    var paraCount = 0
    var inserted = 0
    for (var i = 0; i < paras.length; i++){
        var p = paras[i];
        paraCount ++
        wordCount += p.innerText.length
        if (inserted >= 2){
            break
        }

        if (paraCount >= minParas && wordCount >= minWords) {
            console.log("find para", p, paraCount, wordCount)
            p.insertAdjacentHTML("afterend", ad)
            paraCount = 0
            wordCount = 0
            inserted += 1
        }
    }
    if (inserted == 0 & paras.length >= 5){
        var article = document.getElementsByTagName("article")[0]
        article.insertAdjacentHTML("beforeend", ad)
    }
}

document$.subscribe(function() {
    console.log("call in ad")
    insertAd(40, 4000)
})

这段代码实现了文中和文末插入。只有在文章内容足够长时,才会插入广告。同样地,完整的代码可以在zillionare这个项目下找到。具体位置是docs/overrides/javascripts/course.js。注意不要使用ad.js这样好听好记的名字,它会被adblock这样的浏览器扩展拦截!

个人博客系统的设计与实现 【代码】springboot个人博客系统的设计与实现 阅读详情

相关推荐

个人博客系统项目总结

个人博客系统:注册、登录、博客展示、发布博客、查看博客以及退出等

qq_50977605的博客 1600

个人博客系统设计与实现

1.1数据库的选择SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理。SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。SQL Server 2005 基于 SQL Server 2000 的强大功能之上,提供了一个完整的数据管理和分析解决方案,它将会给不同规模的组织带来帮助:•构建、部署和管理企业应用程序,使其更加安全、伸缩性更强和更可靠。

qq_61141142的博客 2239

博客系统项目详解

1.创建maven项目 2.导入写好的前端代码 3.设计数据库 4.封装数据库操作 1)创建 DBUtil 类 2)创建 Blog类 3)创建 User 4 )创建BlogDao类 5)创建UserDao类 5.实现博客主界面 1)约定前后端交互接口 2)编写服务器代码 3)编写客户端代码 6.实现博客详细界面 1)约定前后端交互接口 2)编写服务器代码 3)编写客户端代码 7.实现博客登陆页面 1)约定前后端交互接口 2)编写服务器代码 3)编写客户端代码 8.实现用户状态判定功能 1)约定前后端交互接口

weixin_46429649的博客 2510

个人博客项目

一.项目功能描述: 主要分为4大功能模块,用户登录功能,文章评论功能,发布和修改文章功能,文章分类。登录首页之后可以查看所有文章的信息,但是此时只能查看,不能修改。如果想要对文章进行操作,就需要用户登录(利用数据库保存的用户名和密码)。用户登陆之后可以对文章进行评论,发布新的文章,修改和删除已经发布的文章,创建和删除新的文章类型。 二.项目流程 首先在输入url,根据不同的url调用后台 Controller 中的方法,Controller 中的方法再调用 Servise 逻辑层中的方法,Service 中

qq_44773719的博客 9465

HTML做一个个人博客页面(纯html代码)

📔网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。📓网站程序方面:计划采用最新的网页编程语言HTML5+CSS3+JS程序语言完成网站的功能设计。并确保网站代码兼容目前市面上所有的主流浏览器,已达到打开后就能即时看到网站的效果。📘网站素材方面:计划收集各大平台好看的图片素材,并精挑细选适合网页风格的图片,然后使用PS做出适合网页尺寸的图片。📒网站文件方面:网站系统文件种类包含:html网页结构文件、css网页样式文件、js网页特效文件、images网页图片文件;

网页设计与制作 2311

nmap、X-Scan漏洞扫描和Metasploit中用永恒之蓝漏洞入侵靶机并上传冰河

利用nmap、X-Scan扫描靶机的漏洞,在Metasploit中用扫描出的永恒之蓝漏洞入侵靶机,建立连接后上传冰河木马控制靶机,最后用冰河陷阱清除靶机的冰河木马,记一次完整的入侵控制实验。

m0_59302403的博客 4407

从0到1编写个人博客项目使用springboot+vue(前后端分离) 到 购买服务器上传项目 到 GitHub开源项目、此过程下所遇问题及解决方法,至少你帮你少走70%弯路

记录个人博客项目从0到1过程中遇到的所有困难及其解决方案、因为是遇到一个困难就记录一个困难,所以当你也写类似项目时,很有可能从中找到答案、文章集百家所长、参考他人博客的解决方案、有的会有原文链接、有的可能会漏掉。望海涵

小邹的博客 125万+

Gitee自动创建PR之——评审模式

一 创建PR的常规操作 本地更新主干(一般为master分支),基于主干新建一个分支并(如Dev分支)切换; 进行新的需求开发; 将这个分支推送到远端; 打开 Gitee ,进入创建 Pull Request 界面; 选定目标分支(及我们需要合并到主干分支的分支,一般即为我们的开发分支); 填写 Title 以及 Description; 点击提交 Pull Request。 二 更快的常见PR的方式— — 评审模式 现在 Gitee.

calm_encode的博客 2992

【项目实战】博客系统设计与实现

前端:展示文章,文章分类,评论,用户登录。后端 :系统管理:用户管理,菜单管理,角色管理。内容管理:文章管理,分类管理,标签管理数据库:mysql8.0.28项目结构:maven数据库连接池:Druid前端框架:Vue后端框架:SpringBoot,SpringSecurity语言:Javajdk版本:17编写的IDE:IDEA。

qq_52183856的博客 7231

PyGPT:桌面AI助手整合大模型与本地知识库,打造高效工作流

大语言模型(LLM)通过理解和生成自然语言,正深刻改变人机交互方式。其核心原理是基于海量数据训练的Transformer架构,能够根据上下文进行预测和生成。这一技术价值在于将强大的AI能力平民化,广泛应用于代码生成、文档分析、创意写作和智能问答等场景。通过API调用云端模型或本地部署开源模型,开发者可以构建个性化的AI应用。本文聚焦于PyGPT这一桌面AI助手,它巧妙地将ChatGPT、Claude、Gemini等主流大模型与LlamaIndex、Ollama等本地化工具整合,实现了聊天、文件分析、代码解释

weixin_28679635的博客 437

DELL Precision T7920加装显卡遇到的坑

文章目录DELL Precision T7920加装显卡服务器原有配置介绍选购过程确认型号确认PCIE x16插槽确认电源功率和电源线安装过程电源模组线不够多单装一个3090显卡尺寸问题加装上1080Ti非常重要!官方文档 DELL Precision T7920加装显卡 实验室由于显卡计算能力不够,以及显卡显存不够,请老师花了大价钱购入了两张GeForce 3090显卡。老师赛高!记录一下这次加装显卡过程中学到的一些知识。 服务器原有配置介绍 服务器原有一张1080Ti显卡,一个16核Xeon CPU。

weixin_45520982的博客 1万+

SpringBoot实战——个人博客项目

springboot实战,从零开始搭建一个web个人博客项目(持续更新中)

日常学习记录、分享,愿我们都遇见更好的自己,与诸君共勉 2万+

Android开发者必看:F2FS文件系统如何优化你的手机存储性能(附实测数据对比)

本文深入解析了F2FS文件系统如何针对闪存特性优化Android设备存储性能。通过对比ext4,F2FS采用追加写和冷热数据分离策略,将随机写转化为顺序写,显著提升写入速度并减少GC卡顿。实测数据显示,其在随机写入和SQLite事务等场景下性能提升显著,为开发者提供了优化应用IO性能的关键思路。

weixin_29248313的博客 325

【课程设计】(附源码)基于Spring Boot的个人博客系统的设计与实现 毕业设计271611

个人博客系统主要为用户提供博客资讯、博客资讯分类、博客分类、博客中心、数据分析等功能,用户通过Internet可以发表一些自已撰写的文章以和其他网友进行交流。博客系统主要实现了文章管理的数字化、信息化、智能化,是打破传统报刊、杂志发表文章方式的新尝试。 本系统的开发设计实现采用springboot技术,系统后台使用JavaScript的Mysql数据库,并通过使用Java技术访问。

Biye_Design的博客 5637

Linux PE vs WinPE:为何麒麟系统修复需要专属工具?

本文探讨了Linux PE与WinPE在修复国产麒麟系统时的关键差异,强调了专属工具的必要性。通过分析文件系统兼容性、引导修复、硬件适配和安全合规等方面,揭示了通用PE工具的局限性,并提供了构建专属修复工具链的实用方案,确保系统维护的高效与安全。

weixin_29290863的博客 1057

【Matlab】多旋翼无人机视觉伺服跟踪控制程序

本文介绍了基于Matlab的多旋翼无人机视觉伺服跟踪控制程序开发方法。该系统采用视觉感知、坐标转换、伺服控制和仿真验证四个核心模块,通过HOG+SVM目标检测、Shi-Tomasi特征提取和PID双闭环控制算法实现动态目标跟踪。详细阐述了相机标定、目标检测、坐标转换及伺服控制等关键环节的Matlab实现代码,并进行了仿真验证。结果表明该系统在±0.1m的跟踪精度下可实现100Hz的实时处理,适用于室内外复杂场景。文章还提出了工程应用中的优化建议,为无人机视觉伺服系统的开发提供了完整的技术方案。

unber的博客 507

个人网站、个人博客的设计案例,仅供参考

关于网站的内容,我也是纠结了好久,我这里说的是网站建设的内容。个人网站,大多数人还是做个博客,想着能平时写点内容,发点文章,图片,一些简短的分享什么的。

程序人生 6858

Unreal Engine Profiler:动画系统性能分析教程_2024-07-23_03-05-38.Tex

Unreal Engine Profiler 是一个内置的性能分析工具,它可以帮助开发者识别和解决游戏中的性能瓶颈。Profiler 提供了详细的性能数据,包括 CPU 使用率、GPU 负载、内存使用情况等,特别针对动画系统,可以查看动画蓝图的执行时间、骨骼动画的计算成本、以及动画混合和重定向的效率。通过这些数据,开发者可以定位到具体的问题,比如哪些动画状态消耗了过多的 CPU 时间,或者哪些动画资源导致了内存泄漏。

825

从零开始搭建自己的个人博客——实践篇【基础页面设计】

从本篇博客开始就要正式进行博客系统的实战编写了,我们首先要要确定个人博客系统需要具备哪些功能和页面。目前来说我们想要实现的页面是:主页、发布博客、博客详情页面、登录、注册。虽然,我们的个人博客页面和功能设计的不是很多,但是,我们可以通过后期更新不断的增加内容,既然如此话不多说,先给大家展示一下页面效果。

星墨漓尘的博客 3027

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

1.个人博客系统项目

本项目为一个功能完善的个人博客系统,支持文章的编辑、修改、删除和发布,以及作者个人信息的展示等功能。

xiaolin的博客 1443

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

个人博客搭建指南——保姆级教程

如何搭建个人博客,其实是很简单的!建立个人网站呢,初衷其实非常简单,说不定你也想过,只是没去做而已。我是想:现在的网络中有好多的写作平台,比如我现在在用的C站,它已经非常成熟,社区讨论、问题发布、Blink动态等等,一应俱全。我在学完相关知识后,为什么不能自己写一个呢?也许更多的是我爱折腾罢了,哈哈​最开始接触是在C站文章发布“板块自定义”模块中,输入几行代码,就能有漂亮的界面。当时因为还没有接触到CSS、Web前端这些,是从网上白嫖来的,更是激起了我深入学习的兴趣。

01101 9333

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot Vue学生个人博客系统的设计与实现

通过对博客类系统的需求分析,系统主要分为用户和管理员两类角色,以下是管理员和用户的主要功能模块。管理员用户角色管理员是通过操作后台进行系统所有数据管理的角色用户,主要包括了内容管理、会员管理、页面管理、运营管理以及系统管理五个主要模块。管理员用户角色用例图如图3.1所示。图3.1 管理员角色用例图1)内容管理内容管理是对系统所有的博客文章以及相关的内容信息进行的综合管理,包括了话题管理、问答管理、留言管理以及友情链接管理等子模块。2)会员管理。

欧阳小白闯天涯 1523

个人博客项目开发总结(一) 项目架构及后端开发

个人博客项目开发总结(一) 项目架构及后端开发

这里是阿安的博客 8397

博客系统(页面设计)

之前我们已经学习了前端的三剑客(HTML、CSS、JS),今天我们来设计一个博客系统的页面设计,具体设计过程比较长,但是其中如果学会了博客列表页的设计,之后的详情页、登录页、编辑页就是一个复制粘贴的过程,稍微添加点细节就能完成博客系统的设计,重点是博客列表页的设计

m0_72161237的博客 8007

一个简单的个人博客小项目

一个简单的个人博客小项目 简介 一个主要靠拼凑而成的个人博客项目,共分为了 前台 、 后台 、 api 三个部分。 api 后端基于 SpringBoot 。主要依赖 mybatis 、 fastjson 、 DruidDataSource 、 Lombok 、 java-jwt 、 aliyun-sdk-oss 、 knife4j 等,数据库使用的是 MySQL8.0+ 前台 前台的主要样式是来源于网络上了一个 BizBlog 模板,最初来源于哪我不得而知,在原本的基础上改写成了 nuxtJs 项

windSnowLi 2177
上一篇: 2024年初私募量化策略大盘点
下一篇: 单元测试:Testing leads to failure, and failure leads to understanding
量化风云
博客等级 码龄10年 1581粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化风云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值