大家知道平时上网浏览的页面是怎么做出来的吗?就是通过今天要给大家介绍的语言HTML来完成的。什么是HTML?超文本标记语言(HyperText Markup Language,简称为HTML)
HTML是一种编程语言,编程语言都需要写到文件中,如何创建文件?可以创建一个文本文件,并命名为:home.html,其中home是文件名,文件扩展名为.html告知浏览器这个文件包含HTML,这样浏览器才能正确的解释HTML并显示出来。
什么是HTML
HTML最初于1989年由GERN的Tim Berners-Lee发明,至今已经有30多年的历史了,在这30年的过程中,HTML经历了几次重大的版本更新:
HTML发展历程
HTML在刚刚诞生的时候只有几个最基础的标签,做好的页面也不好看,但是已经支持了超文本。
在1995年自HTML3诞生开始,漫长残酷的浏览器战争也随之而来,Netscape和Microsoft两个浏览器厂商都在试图争霸世界,这场战争的受害者是web开发人员,每个浏览器公司都在不断的增加自己的专用扩展包来试图保证领先,所以web开发人员通常必须要写两个单独的页面来适应两大厂商。
1997年基于HTML4的标准诞生,浏览器大战结束了,来解救我们的是万维网联盟W3C,它的计划是创建一个唯一的web标准,让世界恢复平静,W3C计划把HTML的结构和表现分离成两种语言:一种语言用于实现结构(HTML),一种语言用于表现(CSS),并且要求所有的浏览器厂商都采用这个标准。
1999年HTML4.01闪亮登场,成为接下来十年当中HTML的必备版本,因为几乎所有的浏览器都采用了这个标准,让我们web开发人员的日子也好过了一些,但是除了IE浏览器,所以开发人员针对IE浏览器总是要做一些额外的工作。
2000年一个新兴的事物引起了我们的注意就是XML,它让HTML开始心烦意乱,他们两个终于不情愿的结合在了一起,就有了后来的XHTML,XHTML1.0就此诞生了。XHTML的标准更严格,所有的标签必须由开始标签和结束标签组成。所以大部分开发人员很讨厌XHTML对于HTML的灵活性更拥护,导致XHTML发展到2.0版本的时候甚至惨遭淘汰,所以这场婚姻的结局并不好。
HTML基础
到了2009年,XHTML很快被HTML5取代,因为HTML5延用了HTML4.01的大部分特性,还提供了很多适合web新发展的新特性,而这正是开发人员一直想要的,并且完全支持XHTML风格的代码,所以HTML5成为大家公认的标准,并于2014年HTML5正式发布,曾经对标准不屑一顾的IE浏览器,自IE9浏览器开始也加入了全面支持HTML5的阵营。
现在很清楚了,HTML5对我们来说意味着什么?跟着我一起加入这个欢乐的世界,关注我,后面会继续给大家介绍Web前端开发所需掌握的技能。
前天的内容。继续:
dag图有了,参考这里:
https://www.toutiao.com/article/7101114126621229601
这个时候可以根据dag图做一些数据结构设计,以及函数设计。
"""前端的作用,
---------------------------------------------------------------------------------------
1.功能1:收集长链接并生成短链接
dag流程:收集长URL,并确认长URL有效,如果有效则生成短URL,并传递到后端服务器。
1-1 收集长URL: 通过在index.html 中设计一个表单,客户输入表单后,用requests.form 方法获取表单内容
1-2 检查长URL是否有效:通过checkurl(longurl)函数,当longurl 有效则返回1,否则返回0
1-3 生成短URL:通过createshorturl(longurl)函数,从长url里面截取字段另外加上时间来生成一个短url
1-4 传递到后端服务器:把长短URL的关系记录到后端
具体实现可以通过requests.post 方法,向对应的restful api 进行请求(备注1),传递jason字段(备注2)
备注1:这里指post 的url,指requsts.post 请求对应的Url,建议post的url要详细到具体的接口,比如127.0.0.1:8008/api/shorturlcreate 接口,这样后端服务器可以根据接口特性来进行相应的逻辑处理
备注2:制作字典,按照 dic1={短链:{"长链":长链,"访问日期":"null","创建日期":date}} 创建
另外,requests.post 方式,选择data=json 方式传递,json字段是对备注2里字典信息做字符串序列化的结果 json.dumps(dic1)
2.功能2:收集短链接做相关跳转
dag流程:收集短url,如果短url存在,则接收服务端的redirect请求,跳转到短URL对应的长URL链接上。
2-1 收集短url:通过在index.html设计一个表单,客户输入表单后,用requests.form方法获取表单内容
2-2 检查短url是否存在:通过checksurl(shorturl)函数,当shorturl有效则返回1,否则返回0 (服务端)
2-3 跳转到长URL:通过jumpurl(shorturl)函数,请求到服务端。服务端先判断短URL是否存在,如果存在则做redirect。
jumpurl函数设计:
1.访问到后端服务器,requests.post(url/api/jump,""), 后端服务器根据URL具体的api来返回信息,返回值里包含了URL信息
2.服务端要构造返回的Header值,根据Location 参数 ,让客户浏览器跳转到对应的长链URL中
3.功能3:请求某个短链的访问信息,并进行展示:
dag流程:收集短url 对应的信息,如果短URL存在,则返回这个短URL被调度的次数等信息
3-1 在第2-3步,每次服务端指定后端做跳转的时候,把短URL被访问的时间做一个记录。
服务端操作:
每次访问短链的时候,对访问情况做个统计:
3-1-1: {短url:访问时间} 存入redis 另外一个表里。
3-2-2:对之前的 数据结构做个更新,主要是对 shorturl 的value做个update,访问时间增加一行。
3-2 发起请求,通过requests.post() 函数,传参数为 /api/statics ,到后端
收集后端返回的json字符串,查询时间,短url,以及这个url的访问列表,{date:[list],"shorturl",url, visittime:[list]}。
用json.loads() 把信息拿到,然后收集visittime的信息,
按照天的维度对visittime做一个图像化。---作业。
redis 数据结构设计:
key:value
shorturl:{"对应的长链接":longurl,"访问时间":[visitdate1,visitdate2],"创建时间":createdate}
把短链做为Key,把长链的信息、访问时间,创建时间作为value,
---------------------------------------------------------------------------------------
前端设计1 :
1.功能1:收集长链接并生成短链接
dag流程:收集长URL,并确认长URL有效,如果有效则生成短URL,并传递到后端服务器。
1.收集长URL:通过在index.html 中设计一个表单,客户输入表单后,用requests.form 方法获取表单内容。
2.检查长URL是否有效:通过checkurl(longurl)函数,当longurl 有效则返回1,否则返回0。
3.生成短URL:createshorturl(longurl)函数。
4.传参函数:linkshort_long(shorturl,longurl)
把长短链对照信息做成一个字典,并把字典转化为json字段。
restapi 方式向后端传递相关信息:requests.post("URL", json=post_data)
def checkurl(longurl):
#判断longurl 是否可以访问
#如果是有效的,返回头为200,则返回1
#如果长连接无效,返回头为200 之外的,则返回0
return result
def createshorturl(longurl):
#头几个字符基于时间-年月日时
#后几个字符取长链的前几个字段
return shorturl
def linkshort_long(shorturl,longurl):
#生成一个json字段,并作为post逻辑的输入。
#后续这个字典被Json化后传入到服务器后端,后端程序基于short url 及 createtype 可以做插入redis的操作。
dic={"shorturl":shorturl,"date":date,"longurl":longurl,"createtype":"build"}
return dic
前端设计2:
dag流程:收集短url,如果短url存在,则接收服务端的redirect请求,跳转到短URL对应的长URL链接上。
2-1 收集短url:通过在index.html设计一个表单,客户输入表单后,用requests.form方法获取表单内容
2-2 检查短url是否存在:通过checksurl(shorturl)函数,当shorturl有效则返回1,否则返回0 (服务端)
2-3 跳转到长URL:通过jumpurl(shorturl)函数,请求到服务端。服务端先判断短URL是否存在,如果存在则做redirect。
jumpurl函数设计:
1.访问到后端服务器,requests.post(url/api/jump,""), 后端服务器根据URL具体的api来返回信息,返回值里包含了URL信息
2.服务端要构造返回的Header值,根据Location 参数 ,让客户浏览器跳转到对应的长链URL中
def checksurl(shorturl):
#检查shorturl 是否在后台服务中存在,
#后台判断是否存在,如果存在则返回确认
#如果存在则返回值为真,否则为假
return result
def jumpurl(shorturl):
#发数据到服务端,
#服务端判断短链是否存在
#如果存在则返回 redirect header,做301
#同时服务端做一个记录。
前端设计3:
3.功能3:请求某个短链的访问信息,并进行展示:
dag流程:收集短url 对应的信息,如果短URL存在,则返回这个短URL被调度的次数等信息
3-1 在第2-3步,每次服务端指定后端做跳转的时候,把短URL被访问的时间做一个记录。
#根据请求,做相关展示逻辑。
@app.route('/shorturl/stats')
def route_statics():
#从requests 里面获取shorturl的信息
#post到服务端,收集访问信息
#从服务端获取返回数值字典
#用返回字典做展示,跳到一个单独的页面,用render_template模版。
return dict
服务端操作:
每次访问短链的时候,对访问情况做个统计:
3-1-1: {短url:访问时间} 存入redis 另外一个表里。
3-2-2:对之前的 数据结构做个更新,主要是对 shorturl 的value做个update,访问时间增加一行。
3-2 发起请求,通过requests.post() 函数,传参数为 /api/statics ,到后端
收集后端返回的json字符串,查询时间,短url,以及这个url的访问列表,{date:[list],"shorturl",url, visittime:[list]}。
用json.loads() 把信息拿到,然后收集visittime的信息,
按照天的维度对visittime做一个图像化。---作业。
def check_ifexist(longurl):
# 检查长链接是否存在,如果存在则跳过
def record_check(dic1):
#收集长短链的链接请求,如果是访问/api/record 则进入逻辑
#把字典信息直接写redis(),
#redis插入,主要插入短链(key)及短链的对应信息表结构(value),另外针对长链接是否存在的表结构(key为长链接,value为1)
def record_route(shorturl):
#收集route请求,如果访问的是/api/route ,则进入逻辑
#查询短链对应的长链接
#返回header指定location 为长链接
#通过update redis表,记录这次访问,
redis 数据结构设计:
表1:
key:value
shorturl:{"对应的长链接":longurl,"访问时间":[visitdate1,visitdate2],"创建时间":createdate}把短链做为Key,把长链的信息、访问时间,创建时间作为value。
这样设计表结构的作用是,每次可以查到visit的访问时间,可以容易查到shorturl被访问的情况。
表2
key:value
longurl:shorturl
主要用来查询对应的longurl 是否存在,把它作为Key更加容易。
先写到这里,感觉还是蛮复杂的,不过经过上面的分析,其实大体程序框架已经ready了。
下一步准备客户端、服务端的代码。
前的技术总监喊我加入他们的接私活团队,说他们缺一个前端工程师,不缺后端。可我一直是做后端开发的,前端代码写的实在是很少,没有经验,写起来肯定很慢了,所以想对前端的HTML知识点做一个汇总。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>一级标题</h1>
<br/>
<h2>二级标题</h2>
</body>
</html>
<!DOCTYPE html>声明这是一个html文档;<html>元素是html页面的根元素;整个html文档包括两大部分:head头和body体。
meta元素提供了页面的元信息;title元素描述了文档的标题;body元素包含了可见的页面内容。
开始标签 | 元素内容 | 结束标签 |
<h1> | 一个标题 | </h1> |
<br/> | 换行 | |
|
下面是适用于大多数 HTML 元素的属性:
属性 | 描述 |
class | 为元素定义一个或多个类名 |
id | 定义元素的唯一id |
style | 设定元素的行内样式 |
实例:<a href="toutiao.com">头条</a> | |
|
<body>
<!-- 一般用在标题上,利于seo优化-->
<h1>这是标题 1</h1>
<h2>这是标题 2</h2>
<h3>这是标题 3</h3>
<h4>这是标题 4</h4>
<h5>这是标题 5</h5>
<h6>这是标题 6</h6>
</body>
<body>
<!-- 这是注释 -->
<!-- </p> 是块级元素、前后有空行-->
<p>这个段落</p>
<p>这<br>个<br>段落</p>
<hr/>
</body>
<body>
<b>加粗</b>
<i>斜体</i>
<small>更小的</small> <br><br>
<strong>重要的</strong> <br><br>
这是 <sub> 下标</sub> 和 <sup> 上标</sup> <br><br>
<del> 删除的文本
</body>
属性 | 值 | 描述 |
href | toutiao.com | 链接的地址 |
target | _blank | 在何处显示 |
id | 文档书签 |
<body>
<!-- 实例 -->
文本:<a href="http://www.example.com/">文本</a> <br/>
图像: <a href="http://www.example.com/">
<img src="URL" alt="描述信息">
</a> <br/>
邮件: <a href="mailto:qq@example.com">发送e-mail</a> <br/>
书签:
<a id="tips">书签</a> <br/>
<a href="#tips">跳到书签</a>
</body>
属性 | 描述 |
src | 图像的 URL 地址 |
alt | 无法载入图像时,显示替换文本 |
width | 指定宽度 |
height | 指定高度 |
<body>
<img src="meinv.jpg" alt="美女" width="280" height="180">
</body>
哈哈哈,调皮一下
表格由 <table> 标签来定义。每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> 标签定义)。字母 td 指表格数据(table data),即数据单元格的内容。
数据单元格可以包含文本、图片、列表、段落、表单、水平线、表格等等。
<body>
<!-- 边框属性:如果不定义边框属性,表格将不显示边框-->
<table border="1">
<tr>
<!-- 表头使用<th>标签定义。浏览器会把表头显示为粗体居中的文本-->
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>
<tr>
<td>小红</td>
<td>18</td>
<th>女</th>
</tr>
<tr>
<td>小明</td>
<td>21</td>
<td>男</td>
</tr>
</table>
</body>
<body>
<!-- 有序列表 数字进行标记-->
<ol>
<li>苹果汁</li>
<li>草莓汁</li>
</ol>
<!-- 无序列表 粗体圆点标记-->
<ul>
<li>咖啡</li>
<li>饮料</li>
<li>茶
<!-- 嵌套列表 -->
<ol>
<li>红茶</li>
<li>绿茶</li>
</ol>
</li>
</ul>
</body>
<div> 元素 | <span> 元素 |
块级元素 | 内联元素 |
HTML 元素的容器 | 文本的容器 |
搭配css可对内容块设置样式属性 | 搭配css可为文本设置样式属性 |
<body>
<div style="width:500px">
<div style="background-color: antiquewhite;">
<h1 style="margin-bottom:0;">网页头部信息</h1>
</div>
<div style="background-color: aquamarine; height:200px;width:100px;float:left;">
<b>网页左侧信息</b><br>
中考资讯<br>
高考资讯<br>
成人自考
</div>
<div style="background-color: aqua; height:200px;width:400px;float:left;">
主题内容
</div>
<div style="background-color:#FFA500;clear:both;text-align:center;">
底部内容
</div>
</div>
</body>
form表单有两个属性:
action | method |
定义了服务端的文件名 | 数据的提交方式 |
对接收到的数据进行处理 | 有POST与GET方法 |
|
<body>
<!-- 表单是一个包含表单元素的区域
允许用户在表单中输入内容-->
<form action="" method="">
<!-- input 输入标签 类型是由type属性定义-->
<!-- 文本域 type="text" -->
年龄: <input type="text" name="age"><br>
<!-- 密码字段 type="password" -->
密码: <input type="password" name="age"><br>
<!-- 单选框 type="radio" -->
<input type="radio" name="sex" value="male">男
<input type="radio" name="sex" value="female">女<br>
<!-- 复选框 type="checkbox" -->
<input type="checkbox" name="like" value="Coffee">喜欢咖啡
<input type="checkbox" name="like" value="tea">喜欢茶<br>
<!-- 提交按钮 type="submit" -->
<!-- 将表单的内容传送到服务器 -->
<input type="submit" value="提交">
</form>
</body>
<body>
<!-- 通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面。 -->
<iframe src="test.html" width="200" height="200"></iframe>
</body>
height 和 width 属性用来定义iframe标签的高度与宽度
<head> 元素定义了文档的信息,包含了所有的头部标签元素。常用的标签元素如下所示。
<meta> | 文档的元数据 |
<base> | 页面链接标签的默认地址 |
<title> | 文档的标题 |
<link> | 外部样式资源 |
<style> | 客户端脚本文件 |
<script> | 文档样式文件 |
<!DOCTYPE html>
<html lang="en">
<head>
<!-- 定义关键词 -->
<meta name="keywords" content="生活梦想家, 科技爱好者, 新手剪辑师, 记录生活, 分享美好">
<!-- 定义描述内容 -->
<meta name="description" content="我是一个生活梦想家, 科技爱好者, 新手剪辑师, 记录生活和分享美好的一个人。">
<!-- 定义文档作者 -->
<meta name="author" content="小明">
<!-- 每10秒钟刷新当前页面 -->
<meta http-equiv="refresh" content="10">
<title>Document</title>
</head>
<body>
</body>
</html>
这只是HTML的基本内容,后续还会总结HTML5的知识点。
*请认真填写需求信息,我们会在24小时内与您取得联系。