GithubHelp home page GithubHelp logo

tx7do / kratos-cms Goto Github PK

View Code? Open in Web Editor NEW
157.0 7.0 27.0 36.1 MB

go-kratos + vue3-antd-typescript = cms

License: MIT License

Makefile 0.32% Go 6.79% TypeScript 38.17% JavaScript 2.38% HTML 0.24% Vue 36.03% CSS 0.53% Less 2.68% Dockerfile 0.05% Starlark 12.82%
blog cms golang kratos vue3-typescript antd antd-design microservice vben vben-admin

kratos-cms's Introduction

克拉托斯波克 Kratos-Blog

一个Golang的博客系统/CMS。

项目结构

子项目名 项目路径
后端 /backend
管理前端 /admin
展现前端 /view

管理后台截图

  • 登陆界面

登陆界面

  • 分析页面

分析页面

  • 博文列表

博文列表

  • 写文章

写文章

  • 评论列表

评论列表

博客基本功能设计要点

文章(Post)

博客系统的“文章”,正确的英文表达是post,英文单词里post和article的区别在于,post只是随心所欲写的文章,而article指的是论文那样的经过精心雕琢,旁征博引,并且有可能在学术期刊上发表的文章。

文章需要具备:标题、Slug、创建时间、发布时间、修改时间、摘要和内容等要素,也会包含所属分类、标签、阅读量和点赞量等次要信息。

Slug是博客的特色,它指的是一篇文章的URL。例如:文章:《Try the New Azure .NET SDK》,它的URL为 https://edi.wang/post/2019/12/5/try-the-new-azure-net-sdk,其中try-the-new-azure-net-sdk 即为该文章的Slug。Slug讲究的是 “人类可读” ,一般情况下均为博客标题对应的英文表达,用中划线分割英文单词,Slug也对博客的SEO起到了关键作用。如果你的博客文章用的是数据库ID、文章标题的HTML Encoding等做URL,请更换为Slug。特别是遇到中文文章,如果标题被URL Encoding了,那么对于SEO和链接分享,都是灾难。一个Slug一旦定下,尽量不要改动,虽然大部分博客系统都支持修改Slug,但是对于被搜索引擎收入的文章,改了Slug就会导致404。比较完备的博客系统(如WordPress)支持采用301重定向方式告诉搜索引擎原文地址已变化。

摘要有两个作用,一是用于在列表视图中显示文章信息预览,二是用于SEO,放在description这个meta标签中,可以帮助搜索引擎精准定收入的内容。对于中文内容,需要注意是否输出的HTML源代码被Encoding过,ASP.NET Core默认的Encoding会对SEO造成灾难(我的博客系统因为面向英语用户,不考虑中文支持,所以并不解决这个问题)。摘要可以自动抓取文章前几百字,也可以像微信公众号那样要求用户手工填写。我的博客采用的是自动取文章前400字。结合SEO的关系,我的文章通常开头段落就是概要,这样可以让用户在搜索引擎预览页面就能看到准确内容,而不是页面上无关紧要的UI元素。

文章的状态通常包括:草稿、发布、回收。用户仅能看到已发布的文章,管理员可在后台更改文章状态。

评论(Comment)

评论是博客中作者和读者互动的主要方式。有些博客要求读者登录后才能发表评论,而有些可以允许游客评论。登录的好处在于可以识别你的读者,并有效防止垃广告评论。但要求登录也会给用户造成操作上多了一个步骤,嫌麻烦的用户就不会进行评论。

分类(Category)

像建文件夹一样将文章根据内容进行区分,即为分类。文章分类后,可以帮助读者快速检索同种类的文章。分类的另一个功能就是产生 OPML 及 RSS/Atom 订阅源。

分类需要一个标题、一个简介,以及一个路由名称。

标签(Tag)

一篇文章所提到的话题,即为文章的标签。和分类一样,标签也是多对多关系。标签可以作为检索文章的依据,类似关键词,快速查找相关内容的文章。

标签云(Tag Cloud)是博客中用来列出最热门标签的功能。通常使用跟大号字、更明显的颜色来标识出对应文章较多的标签。标签云可以作为博客博主的个性化属性,一眼就能看出博主热衷于什么话题。

归档(Archive)

以时间(年、月、日)整理的博客文章即为归档,它和分类的区别在于归档只以时间为标准来划分文章。Archive的SEO相对于文章、分类、标签来说,并不那么关键。所以除了URL可以按年月划分以外,并没有额外的讲究。

页面(Page)

页面是博客的可选功能之一,事实上,它更接近于CMS的功能。有些内容并不适合以文章的形式发布,比如“关于”页面。这样的页面通常与发布时候的时间无关,内容也经常更新,排版设计也非常自由,不单纯是文字。

页面通常不需要评论、标签和分类等属性,但可以有发布和编辑时间。和文章一样,页面也需要注意Slug。

订阅(Subscription)

读者订阅博客的主要方式有Feed(RSS/ATOM)及Newsletter。Feed方式本质上是被动订阅,需要客户端软件发起请求给服务器,检查是否有新文章发表,才能显示到客户端里。Newsletter一般采用Email形式主动发送给订阅用户,但这要求博客系统的编写者实现Email订阅功能,也要求管理员维护Email服务。订阅一般只推送近期发表的新文章,例如前10、20篇,而不会每次都推送全部文章导致客户端爆炸。

订阅一般可按文章分类提供,以便于只对某些分类感兴趣的读者阅读。有些博客系统也提供文章评论的订阅源,以便读者观摩吐槽大会。

版本控制(Version Control)

更接近CMS的博客系统通常提供版本控制功能,允许用户回滚文章或页面的历史版本。设计版本控制的时候,不能只考虑往前回滚,得还能再滚得回来。通常,用户每次编辑一篇已经写好的文章,就会产生一个新版本,类似于git对于一个文件的commit。博客的版本控制也类似于代码版本控制,你可以选择保存一篇文章的完整内容作为历史版本,也可以选择每次只保存变化量信息(delta)。保存完整内容不容易后续花费大量时间精力 ,但是会占用较多存储空间。保存内容变化量节省数据库空间,但实现代码容易占用大量精力。

主题及个性化(Theme)

好用的博客系统通常支持主题,毕竟个性化是博客本身应有的特点之一。WordPress积累了大量的主题库,也允许自制主题。

用户及权限(User & Permission)

博客系统分为个人、团队及博客平台。个人博客系统一般为:单用户,不需要设计权限、注册等功能;多用户博客,则需要实现不同的角色和权限,比如博客管理员、审核专员、撰稿人、评论管理员等等。

插件(Plugin)

插件功能可以在不更改博客代码的情况下,按需拓展博客的功能。

图片及附件的处理(Attachment)

图片一般有3个地方存放:文件系统、数据库、云上OSS存储服务。

敏感过滤及评论审查

静态化(Staticize)

静态化技术,即将服务端渲染完的页面保存为真正的HTML文件于磁盘上,Web服务器只需要传输静态文件,而不需要做其他工作,比如访问数据、脚本语言解析执行等,因此效率非常高,也极大减小了服务器的压力。

通知系统(Notification)

博客通可以通过Email、IM机器人,甚至语音的形式给管理员或用户发送通知。

参考资料

kratos-cms's People

Contributors

dependabot[bot] avatar tx7do avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

kratos-cms's Issues

关于自增id不连续

在验证中发现,如果一张表有个唯一索引字段,那么第一次创建成功,id为1。如果第二次以相同数据创建会报错 Duplicate key error
。然后修改请求表单,第三次创建成功,id为3,按理id=2才是。

我尝试使用了事务还是没发解决id不连续的问题。

更新一下 make docker 到 makefile

这个命令缺失了。

修改 app.mk 中docker命令的顺序,不然会 报错 “docker build" requires exactly 1 argument”

把 . 放到 -t -f 参数之后。

# build docker image
docker:
	@docker build -f ../../../.docker/Dockerfile \
				  -t $(APP_DOCKER_IMAGE) \
				  .
				  --build-arg APP_RELATIVE_PATH=$(APP_RELATIVE_PATH) GRPC_PORT=9000 REST_PORT=8000

Makefile 添加docker命令

# build docker image
docker:
	$(foreach dir, $(dir $(realpath $(SRCS_MK))),\
      cd $(dir);\
      make docker;\
    )

喵酱 PGV 的校验消息如何翻译成中文呢

RT

引入validate.Validator()中间件后,想把英文错误消息转成中文
{ "code": 400, "reason": "VALIDATOR", "message": "invalid CreatePositionRequest.Position: embedded message failed validation | caused by: invalid Position.Code: value length must be between 2 and 50 runes, inclusive" }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.