精华内容
下载资源
问答
  • 代码框架
    千次阅读
    2022-01-28 16:16:16
    import requests
    def getHTMLText(url):
        try:
            r = requests.get(url,timeout=30)
            r.raise_for_status()#如果状态不是200,引发HTMLEoor异常
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return "产生异常"
    
    if __name__== "__main__":
            url = "http://www.baidu.com"
            print(getHTMLText(url))
    
    
    更多相关内容
  • 开源 | 携程 Foxpage 前端低代码框架

    万次阅读 2022-02-25 00:01:56
    作者简介Jason Wang,携程研发经理,目前主要负责低代码类产品的设计和研发,关注低代码行业的发展及相关解决方案在企业内部的落地。一、背景随着低代码开发方式被越来越多的人接受和认可,...

    作者简介

     

    Jason Wang,携程研发经理,目前主要负责低代码类产品的设计和研发,关注低代码行业的发展及相关解决方案在企业内部的落地。

    一、背景

    随着低代码开发方式被越来越多的人接受和认可,低代码得到了蓬勃发展,更被寄希望成为 IT 行业革命性的“新生产力”。据报道,全球低代码类产品市场规模在 2021 年超百亿美元,预计 2023 年将突破两百亿美元关口。


    1.1 低代码行业现状

    国外:Salesforece,Microsoft,OutSystems,Mendix 等,是处于领导者地位的资深玩家,产品功能强大,流程完善,生态健全。

    国内: 钉钉宜搭,明道云,织信,奥哲,简道云等,大都结合某个场景提供支持方案,还处于发展阶段。

    还有些玩家在企业内部发展,并未公开。各类玩家各有优势,关注的方向也各有差异。有的是结合某个行业定制,有的是结合单个使用场景深耕,还有的执着于提供应用开发的完整低代码方案。大部分是 SaaS 产品,其中部分会有私有化部署方案。


    1.2 暗藏的隐患

    按理说,市场上低代码产品功能已经足够强大,企业内部还在自研,甚至同一个业务线的不同使用场景或不同的技术栈也都有不同的低码类实现方案。据说某大厂内部的低代码类系统或工具高达上百个。

    其实这些系统或工具前端部分的核心功能和能力大体是相似的,就拿前端可视化页面搭建这部分来讲,从技术上看大家最终的实现方案和体验上都趋于相近或相同,自研的整个过程会有大量的重复性的工作,造成了人力资源的浪费。

    为什么会造成这样的局面?大家的本意是想借助低代码方案解决业务问题,但却发现行业基建太差,借助成品的方案也难以落地。只能一遍遍重复着低代码的基础能力和设施的建设,乐此不疲也无奈地重复造轮子。


    1.3 低码通用能力建设

    基于此我们做了一些调研,整理了市面上成熟产品可能存在的问题:

    • 功能臃肿,系统复杂,对接入和二次开发成本都较高

    • 不够开放,定制化程度高,部分的产品还有技术栈的约束

    • 场景支持单一,扩展较难,对一些碎片化的场景支持不友好

    既然大而全的低码产品不能用,那就给个小而美的低码框架吧。

    为了能让前端项目快速且低成本的体验到低代码带来的便利,带着市面上成熟的产品的问题,我们决定从建设前端低代码开发平台的角度去研发一套前端低代码框架,提供前端低代码类产品的通用部分能力,帮助开发者解决重复开发,重复建设的问题。

    同时也设立了一些需要完成的目标:

    • 有多场景,多端,多技术栈的支持能力

    • 产出多个场景下前端组件化的最佳实践

    • 提供前端低代码开发所需要的基础能力和设施

    • 打造一套围绕着前端低代码开发的工程化体系


    二、Foxpage 是什么?

    Foxpage 是一个轻量级的前端低代码框架,借助 Foxpage 可以让前端项目用低代码的方式进行迭代。Foxpage 重点在前端,关注前端页面的整个生命周期,希望成为一个易用,灵活,开放且百搭的开源框架。

    特性

    • 可视化,提供在线的可视化的前端页面搭建,所见即所得

    • 组件化,提供较为完善的组件制作流程和组件化方案,制作页面先从制作组件开始

    • 可扩展,提供多端,多技术栈及多种场景的支持

    • 国际化,提供一套国际化内容管理方案

    • 平台化,给开发者、编辑、运营等提供了一个在线合作的平台

    国际化和平台化为以后建设通用的前端低代码开发平台提供了基础。


    三、架构


    3.1 整体架构

    整个框架包含 Foxpage Admin,Foxpage API,Foxpage SDK,组件库等部分,下图描述了框架各模块及它们之间的关系。

    75d38c768173e0de3126cc4f44861524.png

    • Foxpage Admin :Foxpage 的管理后台,提供组织,应用,项目,页面&模板等管理功能

    • Foxpage API:Foxpage Restful API 主要用于为 Foxpage SDK 及 Foxpage Admin 提供的接口服务,开发者也可以使用其开发其他功能

    • Foxpage SDK :目前版本只提供了 Node SDK 及 JS SDK 用于 Node 端和浏览器端应用接入

    3.2 Node SDK 架构

    Node SDK 是提供给 node 端应用使用的开发工具包,通过 SDK 开发者能够快速接入和使用 Foxpage 框架。

    1767fdf8942eb2649fa38c54ecce0cde.png

    除了上面的介绍,Foxpage 整个项目还有 Foxpage CLI、Foxpage Debugger 及组件部分相关的介绍,有兴趣的同学可以前往官方文档查看。


    3.3 核芯设计

    Foxpage 核心部分是围绕着 Foxpage 需要提供支持多场景,多端,多技术栈的能力来设计的,可以算是对低代码开发实践的沉淀。

    72040af36f77b05e9e87c382435e369b.png


    DSL(Domain Specific Language)

    DSL 译为领域特定语言,作用是通过在表达能力上做的妥协来换取在某一特定领域的高效的。最常见的 DSL 有 Html,CSS,SQL,Regex 等。

    为了各类内容编辑高效性和一致性,我们基于 JSON 设计了一套 Foxpage 的 DSL,主要用作描述页面和组件等内容。再结合自身需求做了一些扩展,如为了加强 DSL 的动态能力加入了 “变量”,“条件” 等描述。特定的语法和语义需要提供对应的解析器,结合不同的应用场景提供定制功能,再针对具体的端提供对应 SDK 实现供应用接入。

    页面 DSL 的片段

    520d95c7ef09e56534b41406a563ea22.png

    上图 DSL 中描述了一个横幅组件,包含资源,属性,事件,条件渲染等信息,当然完整的页面描述还包含模板,页面,资源详情等描述。为了减少 DSL 的冗余,我们对公共部分做了最大程度的提取和复用。同时为了防止单份 DSL 内容过大,还支持了 DSL 模块化设计。运行时在 DSL 解析时会做合并,补全等操作。

    无头 CMS(Headless CMS)

    无头 CMS 与传统的 CMS 相比,不同之处在于其将内容和展示分离,达到“前后端分离”的目的,这样可以和前端的技术栈解耦,增强扩展性。

    这里主要提供了各类内容的定义、管理、存储和分发等功能,其实就是管理着各类 DSL 数据,视为框架的基建部分。参照文件系统的设计,提供了文件夹和文件等基础的功能。并可自由的新增文件类型,让整个系统变得更自由,更易扩展。同时还提供了 Restful API 方便了各端可以自由的获取到托管的内容,也使得各接入端拥有了动态更新能力。

    ca2e2ac919e9931eb0e116e9d3078117.png

    这样的设计也为前端项目想离线的使用 Foxpage 框架提供了基础,后续 Foxpage 也会为应用提供离线使用方案,使得整个框架变得更灵活。


    解释器(Interpreter)

    这里解释器的作用,是在应用的运行过程中去读懂并理解 DSL 然后再做对应的执行。广义上来说解释器主要包含资源管理器,DSL 解析器,渲染引擎三个部分

    可以简单看下解释器在 H5 页面渲染过程中所做的工作:

    131e186cb1480ee3fbf19b33415fe4ad.png

    这种解释执行的方式会带来一定的性能损耗,但是和它带来的高扩展能力和动态能力来比还是可以接受的。整个低代码的开发方式,本身也是牺牲一定的灵活性来换取开发效率的提升的,这要看怎么平衡和取舍。


    3.4 如何工作?

    举个邮件页面渲染服务(SSR API 以下简称 API)的例子来说明下工作过程。

    首先 API 项目需要接入 Foxpage Node SDK(以下简称 SDK)。当用户请求 API 获取邮件页面 HTML 文档时,SDK 会请求 Foxpage Restful API 获取邮件页面的内容信息(DSL),拿到页面 DSL 后会走解析流程,做一些预处理、数据绑定及资源文件加载(比如组件的 umd 文件)等工作。解析完成后 SDK 会根据解析后的对象做页面的构建和渲染(SDK 默认内置 Reactjs 框架,这里的邮件页面组件为 React 实现的),最终调用 Reactjs 框架的接口输出页面的 HTML 内容。

    3045ab8612f40be77108f535d507c8a6.png

    四、Why Foxpage?

    以下是 Foxpage 的技术目标,这也是框架核心的能力,降低成本同时提高生产力。

    • 提高效率,效率包括组件开发效率,页面开发效率,发布效率等

    • 降低成本,成本包括人员成本,开发难度,迭代成本,维护成本等

    • 质量保障,质量包括稳定性,“良品率”等 (这里的质量的保障是可持续性的,不应因业务的变化而降低或缺失,是一套通用的质量保障体系)

    目前前端开发还是一个“劳动密集型行业”,需要大量的开发资源堆叠去解决业务需求。虽然有了一些工程化的加持,但在面对成倍的开发需求增长时,效率和成本问题会凸显并放大。Foxpage 的出现可以一定程度上缓解这一问题,让前端开发多一种选择。

    4.1 低码开发模式

    开发从 “pro code” 到 “low code” 的转变。拿前端页面开发举例(为方便理解,结合制造业流程来说明),传统的开发方式是在线下制作组装,经过一系列工序后发布到线上交付。而低码的方式是在线可视化搭建页面,然后产出一张张施工图纸,在交给生产线做线上的自动化组装,最后线上交付。

    47ea3615592370cc9798b65eb402eda1.png

    这种变化带来的益处:

    • 降低开发门槛,有画图能力的人就能做页面开发

    • 提升交付效率

    • 页面质量更高

    4.2 工程化的支持

    从传统前端的工程化转变为围绕着低代码开发建设的新的工程化体系。不管是新的还是传统的工程化,最终目的都是为了高效且低成本的开发并保质保量的交付。低码的开发模式中同样需要一些工程化的支持,只是会换成另外一种形式而已。

    框架提供的基础能力:

    • 零件(组件):提供了一套零件生产工具及流程(脚手架、可视化调试工具,开发、调试及使用流程)

    • 图纸(页面结构内容):提供了画图工具(可视化编辑器),模板

    • 生产线(站点):提供了自动化生产设备(解析器,渲染引擎),自建物流(资源管理器)

    • 配套(平台):提供建设各类仓库所需要的场地(按组织,团队,应用提供了相应的独立的空间),交易市场(商店)

    Foxpage 作为一款前端低代码的基建产品,会持续的探索围绕着低代码开发的工程化体系,给低代码开发带来更好的体验。

    4.3 工作流的改变

    让各个职能可以在线合作,改变了传统线性接力式的工作流程,减少了各职能之间不必要的依赖,缩短开发工期。有人用游戏中的“圆桌范式”来形容这种工作关系。我觉得有点像“手术台”的形式,这种形式更强调合作。

    995dc7fe5bcf75596ba20733aba8d5da.png

    作为框架会有约束,但更多的是支撑。在享受低代码带来益处的同时也要适应它带来的一些变化及约束。


    五、组件化

    组件是低代码类产品非常重要的部分,可以说组件化的结果会直接影响项目低代码开发的体验。

    Foxpage 作为前端低代码框架,理论上是不涉及到业务部分的。开发者需要站在整个项目角度结合业务去考虑怎么组件化,如哪些模块需要组件化来降低重复开发的成本,哪些不适合组件化;组件的主体内容是静态数据,还是通过请求接口获取的动态数据;组件数据部分的复杂逻辑是否可以交给后端;哪些信息根据具体的业务是要做成可配置的会更灵活。

    组件的粒度粗细怎么控制?粒度越细可能越灵活,但是组合起来可视化搭建过程中就会越复杂,增加使用成本。如果做的过粗,复用度就会降低,增加开发成本等。开发者需要结合自身业务综合地去考虑这些问题。

    5.1 提供的支持

    当开发者按照自己的设计去完成组件化落地时,Foxpage 会提供一些支持。包括组件开发的脚手架,可视化调试,本地构建等工具及经过大量实践后整理出的一些相对完善的流程。

    我们关注组件化落地过程中整条链路上的开发和使用体验,从组件的定义,开发实现,调试,测试,部署,注册,可视化配置使用及效果分析。同时也会提供一些自己的实践供开发者参考。

    5270aa5f1db8d88cb09edd040072a4fb.png

    当然在对组件化做支持的过程中,会有一些原则:

    • 不去影响开发者现有的开发习惯

    • 不去改变前端项目现有的工程化体系,只基于现有的体系做补充支持

    • 不去破坏组件的通用性,组件不是为 Foxpage 特制的,不能影响组件在别的项目中使用

    除了用户需要为自身业务实现的组件外,Foxpage 会提供一些基础且比较通用的组件,同时还会结合行业比较流行的 UI 库做一些组件化实践,提供给用户多样的选择。

    5.2 不提供的支持

    Foxpage 不提供组件项目静态资源存储、部署及 CDN 内容分发相关的功能。对于静态资源存储,开发者可以按照自身的情况来选择通过云服务自建或者使用第三方托管服务。Foxpage 也不提供组件项目的 CI/CD 相关的功能,因为 Foxpage 本身没有对应的构建和部署环境。开发者可以借助市面上成熟的工具或服务来完成 CI/CD,整个过程 Foxpage 不会介入。当然作为低代码配套基建的重要部分,我们未来也会去提供这部分的实践。


    六、扩展性

    扩展能力是 Foxpage 框架最重要的能力之一,主要体现在对多场景,多技术栈,多端等的支持上。

    在了解扩展能力之前,我们再回过头看看 Foxpage 的 DSL 部分。DSL 本身除了用作描述之外没有承担任何其他的职责,实体是一份 JSON 格式的数据。技术上不涉及到任何的编程语言,框架,运行环境等。它的能力会体现在对应的场景的具体实现上。

    拿建筑行业举例来说 DSL 就好比施工图纸,它是一门工程语言,建筑工人可以根据施工图纸在不同的环境和地点,选用不同的建筑材料搭建出建筑物。也正是因为如此才使得框架有了支持多场景,多技术栈,多端的可能。

    那扩展能力具体是怎么体现出来的呢?我们可以先从 DSL 的视角,通过对 Web 页面的制作和渲染这个过程的简单剖析,看下 Foxpage 是怎么运作的,其中涉及到扩展的几个关键点已标注。

    13f172e77891b2f521c62ba1c3e75a1e.png

    注 1:DSL 部分可以随意的扩展,只要提供对应 DSL 的解析器即可。

    注 2:Foxpage Node SDK 内置 Reactjs 框架,主要负责页面的构建和渲染。如果想用其他的前端框架,可以提供 SDK 中对应的渲染引擎部分的实现即可。理论上可以选用任何你想用的前端框架,这是对多前端技术栈的支持能力的体现,当然要做到多技术栈支持还有其他工作需要做,如可视化,客户端渲染等环节也要有对应技术栈支持。框架后面也会提供对 Vuejs 的支持。

    注 3:对多端,多场景的支持,Foxpage 提供了对服务端的 Node SDK 和浏览器端的 JS SDK 的实现。不同端的实现会有差异,但大体都包含资源管理,DSL 解析器,渲染引擎。其核心架构中的无头 CMS 的设计,使得整个框架拥有了更强的扩展性。针对不同的端或场景可以提供对应的的实现。具体可以参考文档进阶之路频道中 Node SDK 实现部分。

    注 4:我们在 DSL 的解析,页面的构建及渲染的过程中预置了钩子并暴露出了很多钩子函数(图中的只是一部分例子),结合框架提供的插件机制,开发者可以很方便的介入到整个运行过程中去,结合业务需求做一些定制,这样大大提高了可扩展性。

    从上图的运行的过程中看,整个框架都是围绕着 DSL 来建设的,可以这么说 DSL 的描述能力有多强,框架扩展的能力就有多强。


    七、可视化搭建

    可视化积木式的搭建其实是网页低代码开发的一个很基础的能力,Foxpage 也提供了相应的功能,与其他同类的产品不同的地方是我们提供了好几种可视化编辑器,有针对富文本类的,Markdown 类的,有页面类的,有画图类的等等,根据不同的要编辑的内容的类型可以选择对应的编辑器。

    这一部分我们也预留了常用的接口,甚至可以开放给用户定制内容编辑器,这也是 Foxpage 支持多场景能力的体现。当前 Foxpage 内置的只有针对网页内容的可视化编辑器,后续会考虑继续开发其他类型的内容编辑器。

    ffd1b004ada0d6b0d331e80a7a88e495.png

    可视化能力不仅体现在编辑的过程,还会在一些如历史版本快照,组件在线预览,页面点击曝光埋点等功能上有所体现。目前可视化核心部分已经组件化,这样可以给任何其他需要可视化功能的模块带来便利的,一致的可视化体验。


    八、平台化

    Foxpage 提供支持多应用的开发和管理,是 SaaS 产品的一种“多租户”的模式,在面对多个前端项目要使用 Foxpage 框架时,无需部署多套服务。同时为了各个应用之间的信息流通分享,还提供了商店模式,通过商店可以上架应用,页面模板,组件,变量等内容,从而大大的提高的各类内容的复用度。

    开发者在完成一个前端项目低代码框架接入工作后,可以将自己项目的应用上架商店,通过这种方式开放自己应用的前端低代码开发权限,这个时候其他使用低代码开发的用户(可以是编辑,运营或开发者,以下简称用户)也可以在你的应用上做低代码开发。

    这个过程中开发者变成了提供某一个项目的低代码开发的服务者,开发者接入低码框架后让项目拥有了低代码开发的能力,通过平台将这种能力赋予用户,这个过程中开发者相对于用户来说变成了服务方。

    开发者还可以专门开发组件,提交到商店后供其他的开发者在自己的应用中使用。使用低码开发的用户可以将自己开发的作品,如搭建的 xxx 页面上架到商店供其他用户克隆使用等等。

    Foxpage 为各种角色提供了一个在线合作的平台,同时提供在线协作能力,提高各个角色之间的合作效率。


    九、项目实践

    Foxpage 已经在 Trip.com 内部多个项目中使用,且已经稳定运行多年。这里结合几个有特点的项目来介绍下项目实践,这些项目本身的页面数非常多且结构各异,页面内容变更非常频繁。应用也都是 MPA(Multi-page applicaiton)多入口应用,业务需求决定需要支持多种渲染模式 SSR,CSR,SSG。

    其实每一个项目的低代码实践,不仅仅只是解决单个项目的问题,而是解决了这一类项目的问题。下面三个实践都各有特点,在实践的过程中也遇到了各种问题,特别是在对组件化的支持上和不同系统之间的对接上,总之就是框架结合具体业务场景落地上还有各自的路要走。这里不做详细介绍只简单让大家对 Foxpage 的使用场景有个直观的感受。


    9.1 促销页面

    为了营销需求而搭建的落地页面,有各种各样的玩法,主要有产品促销,好友拉新,秒杀,抽奖等活动。

    需求特点:

    • 短,活动有一定的时间范围,一般不会太长,由其性质决定;

    • 频,活动的需求有确定性的,周期性的和临时性的,需求繁多,玩法各异;

    • 快,一般活动上线时间都会有要求,可能配合一个热点事件,如果是突发类的,需要快速响应;

    • 高,看活动需求,每个活动都可以看成单个大小不一的项目,支持成本比较高;

    接入 Foxpage 后:

    6e9e0629b64e9c3325c3312abd81d793.png

    案例:Trip.com Eventsale 系统

    简介:Eventsale 系统是 Trip.com 的活动配置系统,包含活动的基础信息,促销信息,玩法信息,活动页信息等配置。其中页面搭建能力由 Foxpage 提供。

    现状:截至 2021 年中为止,大约有数千张的活动页面通过活动配置系统制作完成。


    9.2 SEO 页面

    为了搜索引擎优化提供的一些页面。大部分页面的主体内容都是动态生成的,不同的关键词页面的结构和内容都不一样。页面模块需要有一定的动态性,会根据模块点击和曝光动态排序以及控制是否展示。

    接入 Foxpage 后:

    3b102bc2a3fa975a3371de9cfddf80ab.png

    案例:Trip.com SEO 管理平台

    简介:SEO 管理平台管理着 Trip.com Hot 频道的内容,包括关键词管理,页面 TDK 信息,结构信息,内容等。其中页面搭建能力由 Foxpage 提供。

    现状:截至 2021 年中为止,SEO 平台目前由 Foxpage 框架生成的页面大概有 百万级的页面,页面部分的主要模块都是通过算法动态生成。


    9.3 邮件页面

    在邮件页面发送这个场景中,传统的方式是前端切图,将 HTML 交付给到后端,后端再结合模版引擎做数据绑定,然后调用发送渠道发送。这个过程中前后端没有分离,前后端合作低效。结合 Foxpage 方案后很好地解决了痛点。

    680737e12714ee20bdc41d1087ee4cf0.png

    案例:Trip.com MessageHub 系统

    简介:MessageHub 系统是 Trip.com 触达用户的消息系统,包含短信,邮件,站内信等内容的管理和发送。其中邮件页面搭建能力由 Foxpage 提供。

    现状:截至 2021 年中为止,通过邮件配置系统制作的各类邮件页面大约数千张左右, SSR 服务平均每天调用量在几百万次,静态页面渲染耗时 99 线在 60ms 左右。

    9.4 更多的前端使用场景

    适用的场景除了我们已经实践过的其实还有很多,大家可以继续探索。

    a8a8c3d618b1b4a8c6f3a90cbb0a84a3.png

    • 网页搭建:后台系统页面(表单,表格,菜单),数据可视化看板,贺卡,调研问卷,弹窗广告,富文本页面,Markdown

    • 图片制作:海报

    • D2C:各类 Pro code 生成,橱窗代码

    9.5 不适用的场景

    主要是从体验和使用成本角度总结出以下不适用场景:

    • 交互逻辑复杂的前端项目

    • 定制化程度高且不易组件化的前端项目

    • 页面内容或结构不会频繁变化的前端项目

    两个需要用户注意的事项:

    • 在线搭建不等于在线写代码,不要把低代码类产品变成了在线的 IDE

    • 不要为了低代码而低代码,有些项目使用低码的方式不仅成本高,而且体验也差

    低代码虽好却并非适合所有的项目,根据实际情况谨慎使用。


    十、未来规划

    目前 Foxpage 低代码框架才完成基础部分的功能开发,离一个成熟完善的低码框架还有很长的路要走,2022 年我们将从以下几个方面梳理规划:

    10.1 框架迭代

    1)版本 1.0(2022 H1):提供低代码开发所需的基础功能,将于上半年发布 1.0 版本

    2)版本 1.x(2022 Q2):提供对国际化,系统权限,Debugger 工具,自定义组件等的支持

    3)版本 2.0(2022 Q4):对 Foxpage Admin UI 改造,重点会在交互部分,视觉部分也会升级,同时做功能上的简化和流程上的优化

    4)版本 2.x:提供对系统集成,Serverless 方案,页面数据分析等的支持

    10.2 场景拓展

    除了网页制作部分已有的使用场景,还会探索图片生成,主要会在海报制作方向

    10.3 配套建设

    1)组件:

    • 继续丰富基础组件库;

    • 提供邮件场景下的组件化最佳实践;

    • 对市面成熟的 UI 库支持

    2)静态资源服务:结合云服务的对象存储服务,提供静态资源服务建设的最佳实践

    3)托管服务:结合云服务提供 SaaS 产品


    深入了解

    如果你想更深入的了解 Foxpage,可以移步至项目文档,同时推荐下面几篇文章供阅读:

    Foxpage 在 Node 应用中的落地实践

    Foxpage 低码下的组件化实践(一)

    Foxpage Node SDK 资源管理 

    Foxpage Node SDK 插件化

    【推荐阅读】

    804a895e7c2413b49ff355b4cec9c054.png

     “携程技术”公众号

      分享,交流,成长

    展开全文
  • 代码是基于可视化和模型驱动理念,结合云原生与多端体验技术,它能够在多数业务场景下实现大幅度的提效降本,为专业开发者提供了一种全新的高生产力开发范式。下面就来分享12个值得学习和使用的低代码开源项目,更...

    低代码是基于可视化和模型驱动理念,结合云原生与多端体验技术,它能够在多数业务场景下实现大幅度的提效降本,为专业开发者提供了一种全新的高生产力开发范式。

    下面就来分享12个值得学习和使用的低代码开源项目,更深入地了解什么是低代码。

    1. Appsmith

    Appsmith 是一款开源低代码框架,主要用于构建管理面板、内部工具和仪表板等,允许拖放 UI 组件来构建页面,通过连接到任何 API、数据库或 GraphQL 源,并使用 JavaScript 语言编写逻辑,可以在短时间内创建内部应用程序。

    Appsmith图片外链

    Github地址:https://github.com/appsmithorg/appsmith

    2. Amis

    Amis 是百度开源的一块前端低代码框架,通过 JSON 配置就能生成各种后台页面,极大减少开发成本,甚至可以不需要了解前端。

    图片

    Github地址:https://github.com/baidu/amis

    3. LowCodeEngine

    LowCodeEngine 低代码引擎是一款为低代码平台开发者提供的,具备强大扩展能力的低代码研发框架。由阿里巴巴前端委员会、钉钉宜搭联合出品。使用者只需要基于低代码引擎便可以快速定制符合自己业务需求的低代码平台。

    图片

    Github地址:https://github.com/alibaba/lowcode-engine

    4. form-generator

    Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。

    图片

    Github地址:https://github.com/JakHuang/form-generator

    5. H5-Dooring/pc-Dooring

    H5-Dooring是一款功能强大、专业可靠的H5可视化页面配置解决方案,致力于提供一套简单方便、专业可靠、无限可能的H5落地页最佳实践。技术栈以 React 和 TypeScript 为主,后台采用nodejs开发。除了 H5 版,还提供了 PC 版。

    图片

    Github(H5)地址:https://github.com/MrXujiang/h5-Dooring

    Github(PC)地址:https://github.com/MrXujiang/pc-Dooring

    6. YAO

    Yao 是一款支持快速创建 Web 服务和管理后台的开源低代码应用引擎。只需使用 JSON 即可创建数据库模型、编写 API 接口、描述管理后台界面的低代码引擎,使用 Yao 构建的应用可运行在云端或物联网设备上。

    图片

    Github地址:https://github.com/YaoApp/yao

    7. Mometa

    mometa 不是传统主流的低代码平台,而是面向研发的、代码可视设计编辑平台;它更像是 dreamweaver、gui 可视编辑之于程序员。它的定位更多是基于程序员本地开发的模式,新增了可视化编码的能力。

    图片

    Github(⭐️ 3.2k):https://github.com/imcuttle/mometa

    8. NocoBase

    NocoBase 是一个极易扩展的开源无代码开发平台。无需编程,使用 NocoBase 搭建自己的协作平台、管理系统,只需要几分钟时间。如果你有以下需求,NocoBase 就是为你设计的:

    • 开发组织内部管理系统

    • 通过无代码开发,满足大部分业务需求

    • 无代码开发在操作上足够简单,满足非开发人员;在功能上足够灵活,接近原生开发

    • 可以非常方便的进行扩展开发

    • 私有部署,掌控全部代码和数据

    在这里插入图片描述

    Github地址:https://github.com/nocobase/nocobase

    9. Sparrow

    sparrow 是一个场景化低代码(LowCode)搭建工作台,它的核心目标仅有一条“提升研发效率”,目前提供基于Vue、Element-UI 组件库中后台项目的实践,实时输出源代码。

    图片

    Github地址:https://github.com/sparrow-js/sparrow

    10. vite-vue3-lowcode

    vite-vue3-lowcode 是一个基于 Vite2.x + Vue3.x + TypeScript 的 H5 低代码平台。

    图片

    Github地址:https://github.com/buqiyuan/vite-vue3-lowcode

    11. 华炎魔方

    华炎魔方是 Salesforce 低代码平台的开源替代方案,使用可视化工具进行模型设计, 页面设计, 流程设计, 报表设计 , 只需点击鼠标,就能快速创建应用程序,实现敏捷开发的新高度。

    图片

    Github:https://github.com/steedos/steedos-platform

    12. Awesome Lowcode

    Awesome Lowcode 是国内低代码平台从业者交流项目,包含了国内外的一些低代码平台。

    图片

    Github:https://github.com/taowen/awesome-lowcode

    参考文档

    1. https://mp.weixin.qq.com/s/2pTDHCQPtnta3I1njPN3iw
    展开全文
  • C/C++算法竞赛代码框架

    千次阅读 多人点赞 2021-02-15 23:44:29
    C/C++算法竞赛代码框架 包含基本代码框架和本地测试代码框架,本地测试代码支持重定向输入输出和输出程序运行时间

    C/C++算法竞赛代码框架

    一、基本代码框架

    1.最简框架

    最初接触C/C++时,没有学习文件、函数等知识,仅知道在这个框架下写出语句就可以在终端进行基本输入输出。

    • (1)C语言

      #include <stdio.h>
      int main()
      {
          /*code*/
          return 0;
      }
      
    • (2)C++

      #include <iostream>
      using namespace std;
      int main()
      {
          /*code*/
          return 0;
      }
      

    2.万能框架

    随着学习的深入,基本的输入输出已经无法满足做题的需要,可以为了方便程序编写,事先将常用头文件包含进来。

    • C语言(包含常用头文件)

      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #include <math.h>
      int main()
      {
          /*code*/
          return 0;
      }
      
    • C++(包含万能头文件)

      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
          /*code*/
          return 0;
      }
      

    二、测试代码框架

    1.时间测试框架

    在面临较大规模的数据输入时,需要大致判断程序运行时间和算法效率的对比时,可以使用<time.h>头文件,并在输出的最后一行打印出程序的时间。clock()函数获得程序运行的时间,CLOCKS_PER_SEC和系统相关,两者相除便是程序运行秒数。由于输入数据会占用程序运行时间,可以使用文件重定向方法(见下文)和“管道”小技巧:

    管道小技巧:
    使用命令行运行程序echo 数据 | 程序名

    • C语言

      #include <stdio.h>
      #include <time.h>
      int main()
      {
      
          /*code*/
          
          printf("\nTime used = %f", (double)clock() / CLOCKS_PER_SEC);
          return 0;
      }
      
    • C++

      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
      
          /*code*/
          
          printf("\nTime used = %f", (double)clock() / CLOCKS_PER_SEC);
          return 0;
      }
      

    2.文件重定向框架

    对于大规模数据的输入和输出,可以将标准输入输出重定向到程序同一目录下的输入data.in输出data.out文件中。使用重定向语句:freopen( "data.in", "r", stdin);freopen( "data.out", "r", stdout);。在提交代码时一定记得将这两行语句注释掉!!!

    • C语言

      #include <stdio.h>
      int main()
      {
          freopen("data.in", "r", stdin);		//提交代码时记得注释掉或删除
          freopen("data.out", "r", stdout);	//提交代码时记得注释掉或删除
          
          /*code*/
          
          return 0;
      }
      
    • C++

      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
          freopen("data.in", "r", stdin);   //提交代码时记得注释掉或删除
          freopen("data.out", "r", stdout); //提交代码时记得注释掉或删除
      
          /*code*/
          
          return 0;
      }
      

    三、本地测试框架

    1.本地测试框架代码:

    C++可以兼容C语言程序,且拥有更多函数模板、类模板和算法,因此终极框架采取C++语言。

    #define LOCAL            //本地调试宏定义
    #include <bits/stdc++.h> //万能头文件
    /*宏定义及常量定义部分*/
    #define INF 10000000
    const int N = 10;
    /*大规模数组的定义*/
    int Array[INF];
    
    using namespace std;
    int main()
    {
    #ifdef LOCAL
        freopen("data.in", "r", stdin);   //提交代码时记得注释掉或删除
        freopen("data.out", "r", stdout); //提交代码时记得注释掉或删除
    #endif
    
        /*code*/
    
    #ifdef LOCAL
        printf("\nTime used = %f", (double)clock() / CLOCKS_PER_SEC);
    #endif
        return 0;
    }
    

    2.本地测试框架说明:

    • 1.测试本地条件编译宏定义

      #define LOCAL 
      

      定义宏用于本地测试时的条件编译,提交代码时仅需将此行注释掉

    • 2.万能头文件

      #include <bits/stdc++.h> //万能头文件
      

      C++的万能头文件,此头文件包含了几乎所有的头文件,具体头文件内容定义见本文末附录部分。大部分竞赛和oj平台支持万能头文件,但不推荐在工程上使用。

    • 3.常量及宏定义

      /*宏定义及常量定义部分*/
      #define INF 100000000
      const int N = 10;
      

      宏定义和const常量定义均可以用来定义常量,方便更改常量的值,且提高代码可读性,在存储空间充足的条件下,推荐const常量定义,可以进行类型检查。

    • 4.大规模数组定义

      int Array[INF];
      

      将大规模数组定义在main函数外,定义成全局变量,一是可以无需手动初始化,全局变量数组定义后自动初始化;二是全局变量存储在数据区,减小栈区的开销。

    • 5.条件编译文件重定向语句及运行时间测试语句

      #ifdef LOCAL
          freopen("data.in", "r", stdin);   //提交代码时记得注释掉或删除
          freopen("data.out", "r", stdout); //提交代码时记得注释掉或删除
      #endif
      
      #ifdef LOCAL
          printf("\nTime used = %f", (double)clock() / CLOCKS_PER_SEC);
      #endif
      

      将重定向语句及运行时间测试语句均设置为条件编译,在本地编译运行时可以重定向输入输出并查看运行时间,提交代码时,只需要将第一行的LOCAL宏定义注释掉即可。

    四、终极框架

    #include <bits/stdc++.h>
    using namespace std;
    using ll=long long;
    using vi=vector<int>;
    using pii=pair<int,int>;
    const int inf=0x3f3f3f3f;
    const int mod=1e9+7;
    const double eps=1e-6;
    #define pb push_back
    #define eb emplace_back
    #define fi first
    #define se second
    #define all(x) x.begin(),x.end()
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define rrep(i,a,b) for(int i=a;i>=b;--i)
    #define mst(x,i) memset(x,i,sizeof(x))
    #define gkd ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
    #define lb(x) (x&-x)
    const int maxm=9+1e6;
    const int N=9;
    const int maxn=9+2e3;
    
    #define LOCAL
    
    int main()
    {
        gkd;
    #ifdef LOCAL
        freopen("data.in", "r", stdin);   //提交代码时记得注释掉或删除
        freopen("data.out", "r", stdout); //提交代码时记得注释掉或删除
    #endif
    
        /*code*/
    
    #ifdef LOCAL
        printf("\nTime used = %f", (double)clock() / CLOCKS_PER_SEC);
    #endif
        return 0;
    }
    

    附录

    • 万能头文件的定义
      #ifndef _GLIBCXX_NO_ASSERT
      #include <cassert>
      #endif
      #include <cctype>
      #include <cerrno>
      #include <cfloat>
      #include <ciso646>
      #include <climits>
      #include <clocale>
      #include <cmath>
      #include <csetjmp>
      #include <csignal>
      #include <cstdarg>
      #include <cstddef>
      #include <cstdio>
      #include <cstdlib>
      #include <cstring>
      #include <ctime>
      
      #if __cplusplus >= 201103L
      #include <ccomplex>
      #include <cfenv>
      #include <cinttypes>
      #include <cstdalign>
      #include <cstdbool>
      #include <cstdint>
      #include <ctgmath>
      #include <cwchar>
      #include <cwctype>
      #endif
      
      // C++
      #include <algorithm>
      #include <bitset>
      #include <complex>
      #include <deque>
      #include <exception>
      #include <fstream>
      #include <functional>
      #include <iomanip>
      #include <ios>
      #include <iosfwd>
      #include <iostream>
      #include <istream>
      #include <iterator>
      #include <limits>
      #include <list>
      #include <locale>
      #include <map>
      #include <memory>
      #include <new>
      #include <numeric>
      #include <ostream>
      #include <queue>
      #include <set>
      #include <sstream>
      #include <stack>
      #include <stdexcept>
      #include <streambuf>
      #include <string>
      #include <typeinfo>
      #include <utility>
      #include <valarray>
      #include <vector>
      
      #if __cplusplus >= 201103L
      #include <array>
      #include <atomic>
      #include <chrono>
      #include <condition_variable>
      #include <forward_list>
      #include <future>
      #include <initializer_list>
      #include <mutex>
      #include <random>
      #include <ratio>
      #include <regex>
      #include <scoped_allocator>
      #include <system_error>
      #include <thread>
      #include <tuple>
      #include <typeindex>
      #include <type_traits>
      #include <unordered_map>
      #include <unordered_set>
      #endif
      
    展开全文
  • (一)代码框架

    千次阅读 2018-12-13 23:51:09
    个人认为这框架还是非常广泛而经典的,虽然游戏的代码都是我写的,但我仍体会到这个框架对团队协作非常的有利,各个层级各做各的,互不相干,但又受到统一的规范管理,多好。。 正题,先百度一波: MVC全名是Model...
  • 通过一个爬虫网页的通用代码框架来实现一个网页的爬取,附实例:京东商品页面的爬取,百度搜索关键字提交,ip地址自动查询。
  • App代码框架标准和筛选

    千次阅读 2020-12-16 20:08:28
    简要:目前代码框架琳琅满目。主要氛围:mvc,mvp,mvvm,mvpvm,mvi以及相关变种:mvc hodler变种,theMvp变种,mvpMosby,ArmsMvp,HabbitMvvm,等等。框架将影响整个产品周期,以及相关维护。筛选一个适用的框架...
  • HTML网页框架代码

    千次阅读 2021-06-13 10:29:21
    HTML网页框架代码html内嵌框架标签会创建包含另外一个html文件的内联框架(即行内框架),src属性来定义另一个html文件的引用地址,frameborder属性定义边框,scrolling属性定义是否有滚动条,代码如下:内嵌框架与a...
  • html网页的结构框架代码

    千次阅读 2022-03-17 09:14:36
    推荐使用Notepad++软件写HTML代码 html网页的结构框架.html <!--文档声明,声明当前网页的版本--> <!DOCTYPE html> <!--html的根标签(元素),网页中的所有内容都要写在根元素的里边--> <...
  • python 爬取网页的通用代码框架

    千次阅读 2018-10-06 16:19:43
    爬取网页的通用代码框架就是一组代码 它可以准确的 可靠的爬取网页上的内容。 但是这样的语句不是一定成立的,因为网络连接有风险。 常见的异常有: 而raise_for_status方法可以返回所引发的httperror异常。 ...
  • HTML5+PhoneGAP+JQM门店源代码框架

    热门讨论 2012-03-31 21:15:56
    HTML5+PhoneGAP+JQM门店源代码框架。 未完成,包括后台JSON部分。自己查找,后来我屏蔽掉了,但是效果是好的,由于模拟器太慢了,最后屏蔽了,但是代码可用。 开发环境Dreamweaver cs5.5.后台ASP.NET。
  • 【开源】低代码开发框架整理

    千次阅读 2021-07-01 15:45:29
    amis: amis 是一个低代码前端框架,它使用 JSON 配置来生成页面,可以节省页面开发工作量,极大提升开发前端页面的效率 (gitee.com)
  • TensorFlow的代码框架

    万次阅读 2015-12-01 23:07:19
    阅读TensorFlow的代码框架:https://github.com/tensorflow/tensorflow   2015.12.1的情况如上所示:  google 目录下主要是Protobuf 的包,也是google的开源工具之一,用于序列化,各种schema格式化,支持多语言...
  • sFuzz源代码框架分析

    万次阅读 2021-10-09 10:07:20
    sFuzz源代码框架分析 sFuzz是发表在软件工程顶会ICSE2020年论文(sFuzz:An Efficient Adaptive Fuzzer for Solidity Smart Contracts)中实现的工具。sFuzz通过基于距离的启发式策略的模糊测试技术实现对合约漏洞...
  • 聊一聊mmdetection代码框架和目标检测 文章目录聊一聊mmdetection代码框架和目标检测一.为什么要写这篇文章二.关于图像识别任务的共性1.图像分类2.语义分割3.目标检测三.mmdetection代码框架解析1.配置环境方面2....
  • 上 中 下结构网页模板布局框架代码

    千次阅读 2021-06-10 02:07:35
    html宽度静止并居中 上 中 下结构,上中下结构而且整体结构居中宽度固定的html模板框架代码老本。模板功效完整代码(可直接拷贝运用):静止宽度 居中,头部 模式 页脚机关模板 在线演示 CSS5body {font: 14px/24px ...
  • unity3D 游戏开发之工程代码框架设计思路MVC 设计目的 1.使工程结构更规范。 2.提高代码可读性,封装性,拓展性  3.提高工作效率。 正文内容:  1.Frame的组成结 (1)视图层(View) (2) 控制层(Control)  (3)数据...
  • 自动生成代码的UI框架

    千次阅读 2018-10-25 14:59:20
    先简单介绍一下这个插件:一个具有基本功能的UI框架,一套可以自动生成UI代码与挂载相关控件的逻辑。 先看效果图: 0.GenSence场景下UIRoot/View摆好了一个UI页面,可以直接进去右键-&gt;生成代码试下  1....
  • SpringMvc+Mybatis自动生成代码框架_1

    千次阅读 2016-08-19 10:25:43
    前几天在网上偶然看到一个jeeidp框架,看到页面的效果图果断下载下来看看,发现还挺好用的,可以拿来练练手,我就打算在它的基础上继续给这个项目添加功能,项目截图如下,要下载源码的可百度jeeidp ...
  • ASoC Codec驱动代码框架

    千次阅读 2016-09-07 09:40:23
     上个月写了《Audio驱动开发 之 Codec芯片ALC5677驱动代码分析》,但是感觉那个时候理解得还不够深入、写得很粗糙。这一个月以来新看了 HAL层、Framework层的资料,温习了 Plarform_device 驱动、I2C_device 驱动、...
  • 【EA使用】--包图/类图生成代码框架

    千次阅读 热门讨论 2017-07-24 16:37:18
    前言:机房收费系统合作版是文档驱动下的合作开发,当然,文档中最重要的一部分便是UML图,前两次个人版的机房收费系统画图的时候都是懵懵懂懂的,但是这次画图要生成代码框架了,所以就不能本着随便画画的态度了。...
  • ASoC Platform驱动代码框架

    千次阅读 2016-09-09 08:39:43
    【前言】  在更深入地阅读了工程中 ...类似的 ASoC Machine驱动代码框架图在《ASoC Machine 驱动代码框架图》中,ASoC Codec驱动代码框架图在《ASoC Codec 驱动代码框架图》中。 【图示说明】  浅绿色:模块入口
  • vue框架

    万次阅读 多人点赞 2022-05-08 22:36:43
    官方解释:vue是一套用于构建用户界面的渐进式框架。 vue是一个js框架,提供了一套开发规则,按照这个开发规则可提高开发效率。 补充:渐进式意思是,vue.js本身功能局限,一旦配合其他的工具可以增强其能力。 ...
  • SpringBoot框架

    万次阅读 多人点赞 2022-04-01 08:17:10
    主要用于后台人员的开发,结合前后端分离进行使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,215,101
精华内容 886,040
关键字:

代码框架