说到CMS系统,可能大家都能想起WordPressDrupal之类的框架,作为.NET爱好者,一般也是知道一些基于.NET的CMS框架的,典型的比如DNNUmbraco之类的。我很早之前听过Orchard,现在已经出了Core版本了,因此就直接在项目上用用。

前言

CMS系统(内容管理系统)可以方便我们快速建站,其他的概念我就不再多说了。重点说说三个重要的内容。

  • Full CMS

全功能模式,基本上不需要开发干啥,网站的内容直接套上模板就可以建站了,自由度较低,上手及其简单。

  • Decoupled CMS

解耦模式,除了后台还是使用CMS自带的后台以外,前台使用Razor Pages或者MVC进行页面调取后台的数据进行页面的呈现。前台和后台可以分开并行工作,只要在前后端定义好占位符和数据,网站就能正常使用。

  • Headless CMS

极简模式(我也不知道咋翻译合理),和解耦模式一样,CMS只是发挥内容管理工作;不同的是,前端完全独立开发,使用CMS提供的各种API访问后台的数据,不需要符合各种模板,也完全前后端分离。

大家可以按照自己的需求找自己合适的模式。OrchardCore支持上面的所有三种模式。如果是前端比较独立的情况,可以选择使用Headless进行开发。

关于CMS的选型,除了这个以外,还有一个Piranha.CMS也极简风格,很快就上手了,有兴趣大家可以去研究。

OrchardCore部署

按照官方文档就可以进行部署了,提示一下大家,建议大家添加上他们自己自带的nuget源,要不很容易出现不好编译的情况。如果大家喜欢docker,他们还提供docker的镜像,默认的用户名是admin,密码是password,安装更加方便,不过少了很多可以直接定制的地方,大家自行选择。细节的内容我就不多说了,网上很多了。(本文使用Docker进行默认部署)

定义内容

进入了管理后台之后,首先进入Configuration-》features中添加需要的Content Management组件,然后在Content Definitions中定义内容类型,我新建了一种Article类型的内容。然后我添加了一个正文区域的Html Field,添加了几个Parts,如下图。请注意,在设置Fields的过程中,我手动设置了编辑器Trumbowyg,大家可以根据自己的需要选择。

配置完了就可以新建文章了,体验还是不错的,图片等资源可以使用Media Library进行管理,然后插入的时候,会提示你选择对应的文件,非常方便,然后写好了之后还可以预览。

使用GraphQL访问数据

OrchardCore没有使用WebApi,而是使用了GraphQL作为自己的对外API提供的方法。

有关GraphQL的使用,我之前写过一篇文章,他使用库不是HotChocolate,但是对外查询方式是一样的。

因此,前端需要使用GraphQL替代REST API访问后台的数据。默认GraphQL是不开通的,需要在后台中Configuration-》features中启用。启用后,可以发现在OrchardCore集成了GraphQL开发控制台(通过Configuration-》GraphQL打开)。



这里,已经可以发现我们新建的article类型了。并且可以直接通过GraphQL进行查询了。通过F12查看请求,可以发现编辑好的GraphQL请求是通过特定的格式发送给后台endpoint(/api/graphql)的,这篇文章详细解释了前台怎么向后台请求数据。

使用JWT保护接口

如果网站启用了OpenID,那么前端直接访问后台会弹401错误。我们可以使用ASP.NET CORE Data Protection或者JWT来进行认证和鉴权。

OrchardCore支持OpenID和OAuth2.0规范,可以通过/.well-known/openid-configuration查看各个服务的终结点以及其他基本信息。这两个规范不是本文的重点,请自行查阅相关资料。

我们在Security-》OpenID Connect进行Authorization server的设置,启用必要的endpoint和需要使用到的Flow,最底下,Token Format选择JWT。接下来,在Management-》Application中新建一个应用,就可以获取Token了。

上图是使用Password Flow请求TOKEN需要发送的信息,POST过去,就可以获得token。接下来前端把这个access_token放在后续的请求头中,就能正常获得数据了。

结语

至此,网站编辑已经可以通过后台自己去编写文章了,还可以新建多种类别,包括菜单等等功能;前端也可以按照返回的数据使用自己熟悉的框架(VUE/REACT)构建WEB界面了。

OrchardCore Headless建站的更多相关文章

  1. OrchardCore Headless建站拾遗

    书接上回,OrchardCore的基本设置写了,但是有一说一,这个东西还是挺复杂的,如果需要构建一个简单的企业网站,还需要干点别的活. 本文考虑在尽量少编程的基础上,完成一个Headless网站的设置 ...

  2. WordPress建站和搭独立博客

    之前有帮外面的公司建站的经历 不去管html css js 服务器脚本等 对于菜鸟新手而言, 一个WAMP + WordPress(博客程序)就够了 都弄好了再部署到云端服务器上 其实整个过程只是安装 ...

  3. WordPress建站 新手入门

    WordPress建站 新手入门教程系列 1. WordPress入门 之 什么是WordPress? 2. WordPress入门 之 搭建WordPress站点需要什么条件? 3. WordPre ...

  4. [web建站] 优课急送《零基础快速学习建站》视频+课件【价值399元】

    [课程介绍]你想快速建一个网站出来吗?你想从什么都不懂到一两天出一个漂漂亮亮的站吗?你想完成领导交给你的任务找人建站吗?你想自己建站来创业吗?你想学会建站之后,利用给别人建站来赚钱吗?你想建一个跟某个 ...

  5. 浅析 Magento网站建站空间的选择

    对 Magento稍有了解的人都知道,作为一个功能异常强大的网络商城程序,Magento的运行对主机空间的要求是非常高的:很多 Magento建站公司都会推荐 VPS 甚至独立服务器来运行 Magen ...

  6. 建站随手记:about server stack

    建站需要,随手记: Server Stack: ----------- 标准的mezzanine的Stack设置 前端:Nginx wsgi:gunicorn cms tool: mezzanine ...

  7. vps云服务器建站后绑定域名的方法?

    有很多的新手站长们,都不知道vps建站后该如何绑定自己的域名,这里就Windows系统的VPS主机利用iis绑定网站域名的方法,简要介绍一下. 通常情况下,我们在使用IIS建站的时候,都会有一步提示, ...

  8. 国庆送干货——前端建站实用UI工具vajoyJS

    差不多是从七月开始有空就写一写,写到现在也算是可以拿出来展示了,vajoyJS是一款可以提供多项建站常用UI功能的插件库,让你轻松创建简易幻灯片.模态窗口和单屏滚页等效果.vajoyJS依赖于 jQu ...

  9. Nodejs学习笔记(三)——一张图看懂Nodejs建站

    前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...

随机推荐

  1. 【LeetCode】723. Candy Crush 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力 日期 题目地址:https://leetcode ...

  2. 【LeetCode】973. K Closest Points to Origin 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 小根堆 日期 题目地址:https://leetco ...

  3. JVM调参

    今天看了下之前做的一个异步处理任务的服务,发现占用内存量比较大,达到2G,但我检查了代码,基本没有static对象.但这个服务有个特点,就是每次执行一个任务的时候,会从数据库中捞大量的数据做处理,因此 ...

  4. CS5266替代AG9311设计TYPEC转HDMI带PD3.0音视频拓展坞方案

    CS5266替代AG9311设计TYPEC转HDMI带PD3.0音视频拓展坞方案台湾安格AG9311是一款TYPEC转HDMI带PD3.0的音视频转换芯片,它主要用在USB TYPEC拓展坞或者USB ...

  5. 基于Spring MVC + Spring + MyBatis的【超市会员管理系统】

    资源下载: https://download.csdn.net/download/weixin_44893902/22035329 一. 语言和环境 实现语言:JAVA语言. 使用:MyEclipse ...

  6. Java_Swing中让窗口居中显示的方法(三种方法)

    方法一: int windowWidth = frame.getWidth(); // 获得窗口宽    int windowHeight = frame.getHeight(); // 获得窗口高 ...

  7. Python 元类实现ORM

    ORM概念 ORM(Object Ralational Mapping,对象关系映射)用来把对象模型表示的对象映射到基于 SQL  的关系模型数据库结构中去.这样,我们在具体的操作实体对象的时候,就不 ...

  8. nginxWebUI

    nginx网页配置工具 github: https://github.com/cym1102/nginxWebUI 功能说明 本项目可以使用WebUI配置nginx的各项功能, 包括http协议转发, ...

  9. vue将HTML字符串解析为HTML标签

    如果返回的数据是html标签字符串的话,在vue里要通过v-html来渲染 <div v-html="rawHtml"></div> //v-html=&q ...

  10. 第10组 Beta冲刺 (5/5)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14018671.html ·作业博客:https://edu.cnblogs.co ...