百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

WEB:讲清楚Html、DOM,模板与表单引擎

myzbx 2024-12-17 15:13 21 浏览

HTML是WEB页面的骨架。无论是CSS还是Javascript,都是在描述或操作HTML数据,严格来说是操作浏览器中基于HTML构建的DOM。在WEB前端开发领域。模板引擎则是尽量将页面呈现与业务逻辑解耦,帮助开发者基于清晰的数据界面生成html页面。表单引擎则是专注于帮助提高制作用户输入页面的效率。


概述

HTML、DOM、模板和表单引擎的协作关系如下图所示。浏览器加载HTML后就生成了一个可以为Javascript操作的DOM。目前一些模板引擎也直接运行在浏览器Javascript下,可加载其数据源,直接修改DOM;而表单引擎通常都带着Javascrip在用户录入数据时或提交表单数据后,对数据进行检查校验。

HTML

HTML(超文本标记语言,HyperText Markup Language)是一种用于创建和结构化网页内容的标准标记语言。它定义了网页的结构和布局,通过使用标记(标签)来描述不同类型的内容,如文本、图像、链接、表格等。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>晶莹果甜</title>
	  <style> /*这里是描述html的css代码*/
       h1 {
            color: #333;
        }
        p {
            color: #666;
            font-size: 16px;
        }
        a {
            color: #007BFF;
            text-decoration: none;
        }
    </style>
</head>
<body>
    <h1>欢迎来到晶莹果甜</h1>
    <p>有爱相伴,才是成长。晶莹果甜,有AI相伴。</p>
    <a href="https://www.aigrow.space">访问晶莹果甜<</a>
</body>
<script>
      var heading = document.querySelector('h1');
      // 修改 h1 的文本内容
      heading.textContent = '你好,晶莹果甜,我来了!';
</script>
</html>

DOM

DOM(文档对象模型,Document Object Model)是一种用于表示和操作网页文档的标准接口。它将 HTML 或 XML 文档中的元素表示为对象,使得编程语言(如 JavaScript)能够动态访问和修改这些元素的内容、结构和样式。

上节中的html在被浏览器加载后,会生成一个数形对象。如下所示:

Document

└── html

├─── head

│ └── title

└─── body

├──── h1

└──── p

Javascript正是通过这个树形对象来修改dom,达到改变页面内容的效果的。

模板引擎

模板引擎是一种用于将数据与模板结合生成最终输出(通常是HTML)的工具。它允许开发者将业务逻辑与表现层分离,使得代码更易于维护和重用。模板引擎 通常提供占位符、控制结构(如条件语句和循环)以及其他功能,以便根据提供的数据动态生成内容。

不同的模板引擎语法各不一样,比较强大的模板引擎,一般支持变量、条件、循环、转换、函数、引用等多种功能。以jinja2举例如下:

如果有一个模板文件 template.html

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>欢迎</title>
</head>
<body>
    <h1>欢迎, {{ user.username }}!</h1>
</body>
</html>

那么可以用jinja2结合数据输出html,输出的html里面,{{ user.username }}将被替换为真实数据的值。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    user = {'username': 'Alice'}
    return render_template('template.html', user=user)

if __name__ == '__main__':
    app.run()

除了上面所说的变量之外,其他的语法也示例下:

// 条件
{% if user.is_authenticated %}
    <p>Welcome back, {{ user.username }}!</p>
{% else %}
    <p>Please log in.</p>
{% endif %}

//循环
<ul>
{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}

//转换
<p>{{ name|capitalize }}</p>
 
 // 函数 定义与使用
 {% macro render_item(item) %}
    <li>{{ item }}</li>
{% endmacro %}

<ul>
    {{ render_item("Apple") }}
    {{ render_item("Banana") }}
    {{ render_item("Cherry") }}
</ul>

// 引用
// base_template.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
    <header>
        <h1>My Website</h1>
    </header>
    <main>
        {% block content %}{% endblock %}
    </main>
</body>
</html>
                            
 // app_template.html
{% extends "base.html" %}

{% block title %}Home{% endblock %}

{% block content %}
    <p>Welcome to my website!</p>
{% endblock %}

表单引擎

表单引擎是一种用于创建、管理和处理用户输入表单的工具或库。它们通常提供一系列功能,帮助开发者快速构建复杂的表单界面,进行数据验证、数据处理 和提交。表单引擎可以用于Web应用、移动应用和桌面应用程序中。




这类工具和库比较多,但是功能差异也比较大。大体而言,相对强大的表单引擎都支持如下特性:

1. 表单构建

提供可视化界面或 API,允许开发者快速创建表单。

支持多种输入类型,如文本框、下拉菜单、复选框、单选按钮、日期选择器等。

2. 数据验证

提供内置的验证规则,确保用户输入的数据符合要求(如必填、格式正确、长度限制等)。

支持自定义验证规则和异步验证。

3. 动态表单

支持根据用户输入动态显示或隐藏其他字段,或根据条件加载不同的表单部分。

4. 表单状态管理

自动管理表单的状态,包括输入值、验证状态、提交状态等。

提供表单重置和清空功能。

5. 数据提交

处理表单数据的提交,包括将数据发送到服务器进行处理,并处理服务器返回的响应。

支持 AJAX 提交,避免页面刷新。

6. 错误处理

提供错误提示和反馈机制,帮助用户理解输入错误并进行修正。

7. 样式和主题

支持自定义样式和主题,以便于与应用程序的整体设计保持一致。

8. 国际化支持

提供多语言支持,允许开发者根据用户的语言设置显示不同的表单内容。

9. 数据预填充和回显

支持从服务器获取数据并预填充表单,使得用户在编辑时更加方便。

提供提交后的数据回显功能,确认用户输入。

10. 自定义组件

允许开发者创建自定义输入组件,以满足特定需求。

11. 集成支持

能够与其他库或框架(如状态管理库、路由库等)集成,增强功能。

12. 可访问性支持

确保表单符合可访问性标准,使得所有用户(包括残障人士)都能顺利使用。


总结

模板引擎用来解构后台与前端开发,使用数据将页面表现与业务逻辑分离,便于大家分工协作。表单引擎有助于快速开发数据录入页面,并形成标准化的风格,使用成熟的框架后,后天工程师可以通过json配置出表单,或者使用设计器直观获得表单页面。


参考资料

  1. HTML5 https://www.w3.org/TR/2011/WD-html5-20110405/
  2. HTML4 https://www.w3.org/TR/html401/
  3. DOM 1 https://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/
  4. DOM 2 https://www.w3.org/TR/DOM-Level-2-HTML/
  5. 模板引擎 https://docs.jinkan.org/docs/jinja2/
  6. 表单引擎 https://formik.org/ https://xrender.fun/form-render

相关推荐

一键生成高颜值图表!让你的文字瞬间有画面感,职场人必备!

哈喽,打工人们!忙碌的周中,大熊又来给你们带来一个超实用的效率神器啦!这次的宝藏网站绝对是那种用过就离不开的"真香"型产品!假设你明天就要做重要汇报,可面对一大堆密密麻麻的文字材料,你...

批量将 Word 转换为 PDF/Excel/Txt/图片等多种格式

Word文档是我们工作中经常会打交道的一种文档格式,我们也经常会有需要对Word文档进行格式转换的需求,比如将Word格式转换为PDF、将Word文档转换为Excel、将Word...

绝了!一键用AI生成高颜值动态PPT(附详细步骤+Prompt)

大家好,我是一名酷爱研究AI的产品经理,最近我有个新发现:那些花了你3天做出来的PPT,现在用AI可以1小时搞定!而且颜值还高!为什么AI做PPT比传统方式效率高10倍?我用一张图就能告诉你:AI生成...

ztext - 简单几行代码创建酷炫3D特效文字的开源JS库

把网页上的文字变成酷炫的3D风格,还能制作旋转动效,有了ztext.js,只需要几行代码。ztext能做什么ztext.js是一个能把常规的平面文字变成3D样式的前端开源代码库,让开发者...

文字内插入小图片,也太可爱了吧(文字中怎么插图片)

图文排版H5手机版秀米有小伙伴留言问添加图片的时候可不可以把图片添加到文字之间比如下面这句话中的小贴纸图片后面可以接着输入文字其实吧这就是咱们的『文字内插入小图片』功能嘛可以用来在文字内加个表情包又...

Linux环境下C++代码性能分析方法(linux怎么写c++代码)

技术背景在开发C++应用程序时,找出代码中运行缓慢的部分是进行性能优化的关键。在Linux系统上,有多种工具和方法可用于对C++代码进行性能分析,每种方法都有其特点和适用场景。实现步骤手动中断调试法在...

SVG互动图文,让你的文章更有趣!教你4种简单易学的黑科技玩法!

如果你是一个公众号创作者,那么你一定想知道如何让你的文章更加吸引人,更加有趣,更加有创意。你可能已经尝试过各种图文排版技巧,但是你是否知道,有一种黑科技可以让你的文章变得更加酷炫,更加互动,更加爆款?...

Videoscribe怎么实现实心中文汉字的手绘制作

很多朋友在制作手绘视频的时候,不知道怎么输入实心的中文汉字,之前我们已经给大家分享了怎么输入汉字的方法,但是有一点遗憾的是输出的汉字是空心的手绘展示,在视觉上并不是非常的美观。经过大家不断的探索,终于...

一款用于将文本转化成图表的现代化脚本语言

大家好,又见面了,我是GitHub精选君!今天要给大家推荐一个GitHub开源项目terrastruct/d2,该项目在GitHub有超过10.3kStar,用一句话介绍该项目就是:...

探秘 Web 水印技术(制作水印网站)

作者:fransli,腾讯PCG前端开发工程师Web水印技术在信息安全和版权保护等领域有着广泛的应用,对防止信息泄露或知识产品被侵犯有重要意义。水印根据可见性可分为可见水印和不可见水印(盲水印)...

不忍心卸载的五款神仙工具(不忍心卸载的五款神仙工具是什么)

001.效率工具uTools-装机必备的生产力工具集uTools是一款非常强大的可以装下几乎所有效率工具的电脑生产力工具集,目前拥有Windows、Mac和Linux三个版本。软件界面...

「SVG」飞花令!这份最高检工作报告“超有料”

原标题:【SVG】飞花令!这份最高检工作报告“超有料”栏目主编:秦红文字编辑:沈佳灵来源:作者:最高人民检察院...

svg|2025政府工作报告,有没有你关心的数据?

··<setattributeName="visibility"begin="click+0s"dur="1ms"fill="freeze"restart="never"to="hi...

videoscribe只能输入英文,如何输入中文文本?

videoscribe只能输入英文,如何输入中文文本?打开VideoScribe软件,打开要添加中文字体的位置。打开Photoshop并在文件中创建一个新的透明背景图层。注意:必须是透明背景层。...

五个流行的SVG在线编辑器(svg编辑工具)

随着响应网络的发展,越来越多的高质量的SVG在线编辑器被公众所熟知。SVG矢量图形也越来越受欢迎,以便在任何设备上呈现图像,甚至一些易于使用的SVG在线编辑器,可以替代PS,本文总结了五种流行的SVG...