HTML
翻译成代码如下:
import socket def handle_request(client): buf = client.recv(1024) client.sendall(bytes("HTTP/1.1 201 OK\r\n\r\n","utf8")) client.sendall(bytes("<h1>Hello, World</h1>","utf8")) #传送一个html给客户端 def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost',8082)) sock.listen(5) while True: connection, address = sock.accept() handle_request(connection) connection.close() if __name__ == '__main__': main()
因为按照直接在代码中编写html,并发送给客户端会增加代码块的复杂度,所以就生成了html文档,需要html页面时,我们只需要直接找到相应的html文档,读取内容然后再传给客户端就行
html css 以及js的关系
他们的关系就如同皮影戏:
html:用来决定页面上的内容。 就如同皮影戏图像
css:决定页面上内容的格式,颜色,位子 ,就如同皮影戏的图像的作色
js:就是做动态页面的。就如同:皮影戏的运动
HTML 是什么?
htyper text markup language 即超文本标记语言
超文本: 就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
标记语言: 标记(标签)构成的语言.
网页==HTML文档,由浏览器解析,用来展示的
静态网页:静态的资源,如xxx.html
动态网页:html代码是由某种开发语言根据用户请求动态生成的
html文档树形结构图
什么是标签:
- 是由一对尖括号包裹的单词构成 例如: <html> *所有标签中的单词不可能以数字开头.
- 标签不区分大小写.<html> 和 <HTML>. 推荐使用小写.
- 标签分为两部分: 开始标签<a> 和 结束标签</a>. 两个标签之间的部分 我们叫做标签体.
- 有些标签功能比较简单.使用一个标签即可.这种标签叫做自闭和标签.例如: <br/> <hr/> <input /> <img />
- 标签可以嵌套.但是不能交叉嵌套. <a><b></a></b>
标签的属性:
- 通常是以键值对形式出现的. 例如 name="alex"
- 属性只能出现在开始标签 或 自闭和标签中.
- 属性名字全部小写. *属性值必须使用双引号或单引号包裹 例如 name="alex"
- 如果属性值和属性名完全一样.直接写属性名即可. 例如 readonly
<!DOCTYPE html>标签
为了定义该网站html遵守W3C标准。如果没有该标签,表示是非标准网页
head标签:
- <meta>meta标签的组成:meta标签共有两个属性,它们分别是http-equiv属性和name 属性,不同的属性又有不同的参数值,这些不同的参数值就实现了不同的网页 功能。
1 name属性主要用于描述网页,与之对应的属性值为content,content中的内容 主要是便于搜索引擎机器人查找信息和分类信息用的。
- <meta name="keywords"content="meta总结,html meta,meta属性,meta跳转">
作用: name="keywords",表示定义关键字,content里面是关键字。
在浏览器上(如:百度)直接搜索关键字就能搜到该网站,就是因为这个标签
- <meta name="description"content="老男孩培训机构是由一个老的男孩创建的">
作用:name="description" 表示定义的描述 content里面是描述语
当我们在百度搜到某个网站时,会看见有相应的描述语。
实例:
搜索的"京东"二字,就来自于关键字的定义;京东官网栏,里面的小字介绍就来自与描述
2 http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有 用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content, content 中的内容其实就是各个参数的变量值。
- <meta http-equiv="Refresh"content="2;URL=https://www.baidu.com"> //(注意后面的引号,分别在秒数的前面和网址的后面)
作用:refresh:刷新的意思。内容里面表示:2s后刷新页面进入百度网页。如果没有URL地址,代表每2s刷新一次该网页
- <meta http-equiv="content-Type"content="text/html;charset=UTF8">
作用:定义编码格式
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
作用:以上代码IE=edge告诉IE使用最新的引擎渲染网页,chrome=1则可以激活Chrome Frame. 就是为了兼容
3 <title>标签
- <title>老男孩</title>
作用:定义网页标题
4 <link rel="icon" href="http://www.jd.com/favicon.ico">
作用:定义网页标题旁边的图标
body标签:
标签大致分为两大块:
- 块级标签:独占一行,对它的渲染,将直接渲染整个一行
- 内联标签:只占据自己字符的长度;对它的渲染,只渲染它字符的长度。
块级标签:<p><h1><table><ol><ul><form><div>
内联标签:<a><input><img><sub><sup><textarea><span>
block(块)元素的特点
① 总是在新行上开始;
② 高度,行高以及外边距和内边距都可控制;
③ 宽度缺省是它的容器的100%,除非设定一个宽度。
④ 它可以容纳内联元素和其他块元素
inline(内联)元素的特点:
① 和其他元素都在一行上;
② 高,行高及外边距和内边距不可改变;
③ 宽度就是它的文字或图片的宽度,不可改变
④ 内联元素只能容纳文本或者其他内联元素
对行内元素,需要注意如下 :
设置宽度width 无效。
设置高度height 无效,可以通过line-height来设置。
设置margin 只有左右margin有效,上下无效。
设置padding 只有左右padding有效,上下则无效。注意元素范围是增大了,但是对元素周围的内容是没影响的。
一 基本标签
<hn>: n的取值范围是1~6; 从大到小. 用来表示标题.
<p>: 段落标签. 包裹的内容被换行.并且也上下内容之间有一行空白.
<b> <strong>: 加粗标签.
<strike>: 为文字加上一条中线.
<em>: 文字变成斜体.
<sup>和<sub>: 上角标 和 下角标.
<br>:换行. 自闭合标签
<hr>:水平线 自闭合标签
<div><span>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body style="background:green"> 8 <h1>hello</h1> <!--定义了标题--> 9 <div style="background:#000;color:#FFF"> <!--从10到17行的内容在一个块里,如果给div进行渲染,那么里面的所有行都会跟着被渲染--> 10 <!--style:是html自带的渲染参数,可以定义:颜色,字体大小,等等。在以后我们将使用css来代替它--> 11 <p><b>第一章 第一章</b></p> <!--<p>标签定义了这是一个段落标签。<b>将文本内容给加粗。--> 12 <!--注意:在标签文本里,不管有多少个空格,最后都会被处理为一个空格。想实现多个空格,只能使用特殊字符来表示空格--> 13 <a>aaaaa</a> <!--<a>表示的是超链接标签,见<本页第三点>。 注意:因为<a>标签是内联标签,所以不管<a>标签写多少个,都会在一行。--> 14 <a><em>aaaaa</em></a> <!--<a>标签的内容和上面的内容在一行 <em>是对文本内容加斜体--> 15 <a><br>bbbbbbb</a> <!--<br>标签实现了换行 注意:它是自闭合标签--> 16 <hr> <!--横线 注意:他是自闭合标签--> 17 <p>第二章</p> 18 <a>y=x<sup>2</sup>+C<sub>1</sub></a>y<sup>2</sup> <!--sup是上角标, sub是下角标--> 19 </div> 20 </body> 21 </html>
执行结果:
特殊字符:<其他的可以在网上搜:html特殊字符><注:特殊后面的分号是标签的一部分>
< > " © ®
二 图形标签: <img> : 自闭合标签
src: 要显示图片的路径.
alt: 图片没有加载成功时的提示.
title: 鼠标悬浮时的提示信息.
width: 图片的宽
height:图片的高 (宽高两个属性只用一个会自动等比缩放.)
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body style="background:green"> 8 <img src="http://img20.360buyimg.com/da/jfs/t6547/112/1643232560/138601/8bfac6b0/5954a46bNde50c04d.jpg" 9 width="300px" height="280px" title="京东"> 10 <img src="1.png" alt="加载失败"> 11 </body> 12 </html>
执行结果:
三 超链接标签(锚标签)<a>:
href:要连接的资源路径 格式如下: href="http://www.baidu.com"
target: _blank : 在新的窗口打开超链接.
name: 定义一个页面的书签。用于跳转 href : #书签名称.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body style="background:green"> <h4>第一章</h4> <h4><a href="#aaa" target="_blank">第二章</a></h4> <!--href定义的是跳转到一个书签名称上,主要用于定义文章内容,比如:在目录点击某一章节就能跳到某章节--> <div> <h5>第一章</h5> <a>内容</a> <a href="https://www.baidu.com/" target="_blank" name="bbb">百度一下</a> <!--name是用来给这行标签定义一个名字--> </div> <h5><a target="_blank" name="aaa">第二章</a></h5> <a href="#bbb">再百度一下</a> <!--此处连接地址写某个标签的名字,就意味着定义了一个链接。点击此处就可以跳转到别的位置上--> </body> </html>
执行结果:
四 列表标签:
<ul>: 无序列表
<ol>:有序列表
<li>:列表中的每一项.
<dl> 定义列表
<dt> 列表标题
<dd> 列表项
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body style="background:green"> 8 <ul> 9 <li>河南</li> 10 <li>河北</li> 11 </ul> 12 <ol> 13 <li>龙泉</li> 14 <li>温江</li> 15 16 </ol> 17 <dl> 18 <dt>成都</dt> 19 <dd>天府</dd> 20 </dl> 21 </body> 22 </html>
执行结果:
五 表格标签: <table>:
<tr>: table row
<th>: table head cell
<td>: table data cell
border: 表格边框 ,用来决定边框是否存在
cellpadding: 内边距 ,内边框的大小
cellspacing: 外边距 ,外边框的大小
width: 像素 百分比.(最好通过css来设置长宽)
rowspan: 单元格竖跨多少行 (即竖向合并单元格)
colspan: 单元格横跨多少列(即合并单元格)
<th>: table header <tbody>(不常用): 为表格进行分区
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body style="background:green"> 8 <table border="_bank" cellspacing="15px"> 9 <tr> 10 <th>第一列</th> 11 <th>第二列</th> 12 <th>第三列</th> 13 </tr> 14 <tr> 15 <td>1</td> 16 <td>2</td> 17 </tr> 18 <tr> 19 <td>4</td> 20 <td>5</td> 21 <td rowspan="2">6,3</td> <!--因为上面那一行,少了一个元素,因此在合并的时候,就会知道该行要去和上一行的元素合并--> 22 </tr> 23 </table> 24 </body> 25 </html>
执行结果:
六 表单标签(django)<form>:
表单用于向服务器传输数据。
表单能够包含 input 元素,比如文本字段、复选框、单选框、提交按钮等等。
表单还可以包含textarea、select、fieldset和 label 元素。
1.表单属性
HTML 表单用于接收不同类型的用户输入,用户提交表单时向服务器传输数据,从而实现用户与Web服务器的交互。表单标签, 要提交的所有内容都应该在该标签中.
action: 表单提交到哪. 一般指向服务器端一个程序,程序接收到表单提交过来的数据(即表单元素值)作相应处理,比如https://www.sogou.com/web
method: 表单的提交方式 post/get 默认取值get(信封)
get: 1.提交的键值对.放在地址栏中url后面. 2.安全性相对较差. 3.对提交内容的长度有限制.
post:1.提交的键值对 不在地址栏. 2.安全性相对较高. 3.对提交内容的长度理论上无限制. 推荐
get/post是常见的两种请求方式.
在讲表单元素前,我们首先来看看京东,当我们在京东主页,搜索栏里输入“风扇”并提交,会发现网址将由:“https://www.jd.com/”变为”https://search.jd.com/Search?keyword=风扇”。是不是很惊奇的发现。风扇竟然出现在了网址中,其实这就是因为表单提交方式是get。所以那么提交内容就会显示在url地址中。同时我们也会发现提交时居然是“keyword=风扇”。这是因为html提交的时候是以键值对(字典)的形式提交的。那么键和值又是由什么决定的?
答案:表单元素中的name 表示的就是键。值就是value来代表的。
2.表单元素
a. <input> type: text 文本输入框
password 密码输入框
radio 单选框
checkbox 多选框
submit 提交按钮
button 按钮(需要配合js使用.) button和submit的区别?button仅仅是触发某个事件,如点击某个按钮就弹出来某个图片。submit主要是用来向后台提交数据
file 提交文件:form表单需要加上属性enctype="multipart/form-data"
name: 表单提交项的键.注意和id属性的区别:name属性是和服务器通信时使用的名称;而id属性是浏览器端使用的名称,该属性主要是为了方便客户端编程,而在css和javascript中使用的。
value: 表单提交项的值.
对于不同的输入类型,value 属性的用法也不同:
1.type="button", "reset", "submit" - 定义按钮上的显示的文本
2.type="text", "password", "hidden" - 定义输入字段的初始值
3.type="checkbox", "radio", "image" - 定义与输入相关联的值
4.checked: radio 和 checkbox 默认被选中
readonly: 只读. text 和 password
disabled: 对所用input都好使.
b.<select> 下拉选标签属性:
name:表单提交项的键.
size:选项个数
multiple:multiple
<option> 下拉选中的每一项 属性:value:表单提交项的值. selected: selected下拉选默认被选中
<optgroup>为每一项加上分组
c.<textarea> 文本域 name:表单提交项的键. cols:文本域默认有多少列 rows:文本域默认有多少行
d.<label>:(仅了解)(效果同input)
<label for="www">姓名</label>
<input id="www" type="text">
e.<fieldset>:(仅了解)(效果同input)
<fieldset>
<legend>登录吧</legend>
<input type="text">
</fieldset>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body style="background:green"> 8 <form action="127.0.0.1:8080" method="post" enctype="multipart/form-data" > 9 用户名<input type="text" name="username"><br> #name是键,值由手动输入 10 密码<input type="password" name="pwd"><br> 11 男<input type="radio" name="sex" value="1"> #给整个单选项起同一个name。保证了不管选谁,键都有值。给各个选项。 12 女<input type="radio" name="sex" value="2" checked><br> #因value是赋值了的。所以在传值的时候将会使用2来代替她的真实信息。在后台我们只需对应解析就行 13 篮球<input type="checkbox" name="hobby" value="1"> 14 足球<input type="checkbox" name="hobby" value="2"> 15 网球<input type="checkbox" name="hobby" value="3"><br> 16 请上传文件<input type="file" name="file"><br> 17 备注<textarea name="log"></textarea><br> 18 <select name="where"> 19 <optgroup label="河北省"> 20 <option value="1">唐山</option> 21 <option value="2" selected>天津</option> 22 </optgroup> 23 </select><br> 24 提交<input type="submit"> 25 </form> 26 </body> 27 </html>
执行结果: