HTML

发布时间 2023-07-18 21:47:41作者: Meeeoww

HTML介绍

● 超文本标记语言(Hypertext Markup Language, HTML)是一种用于创建网页的标记语言。
● 本质上是浏览器可识别的规则,我们按照规则写网页,浏览器根据规则渲染我们的网页。对于不同的浏览器,对同一个标签可能会有不同的解释。(兼容性问题)
● 网页文件的扩展名:.html或.htm
  • 在浏览器中输入一个网址,到返回浏览器,渲染成页面,这个过程发生了那些事情
"""
	1. 浏览器朝服务端发起请求
	2. 服务端接收请求
	3. 服务端开始处理请求,并返回数据
	4. 数据返回给了浏览器,浏览器进行渲染,展示给用户
"""
# 浏览器就是万能的客户端,浏览器相当于客户端,它可以充当很多服务端的客户端,我们就可以通过socket写一个服务端
    
import socket
server=socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(5)
while True:
    conn,addr=server.accept()
    data=conn.recv(1024)
    print(data)
    conn.send(b'hello')#这里没有遵循http协议所以浏览器访问不了
    conn.send(b'http/1.1 200 ok \r\n\r\n')#这里遵循浏览器http协议才能正常连接
    conn.send(b'hello')

    conn.close()    
    
    
浏览器也可连接txt文档
import socket
server=socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(5)
while True:
    conn,addr=server.accept()
    data=conn.recv(1024)
    print(data)
    conn.send(b'http/1.1 200 ok \r\n\r\n')
    with open('a.txt','rb')as f:
        conn.send(f.read())

    conn.close()    
    

# 浏览器是如何识别不同的服务端的?
是因为浏览器指定了统一的规则,你要是想让你的服务端和浏览器进行正常的交互,那么你就要遵循这个规则,这个规则就叫HTTP协议。

HTTP协议

"""
	HTTP协议超文本传输协议, 作用:就是规定了服务端和浏览器之间的数据交互格式.
"""
1. 四大特点
    1. 基于请求和响应(浏览器发起请求-------->服务端做出响应)
    2. 基于TCP/IP协议之上的应用层协议
    3. 无状态
        # 不保存客户信息
        '''不记录用户的信息,后来随着技术的发展,诞生了京东,支付宝,拼多多等,我们每个人要想使用这个网站,就必须登录,要登录,就要记录用户信息,能够记录用户信息的技术有:cookie、session、token...'''
        
     4. 短链接
	# 客户端和服务端建立链接之后,客户端发送一些请求,服务端响应一次,然后断开,如果下次再发就要重新链接
    # 长链接:客户端和服务端一旦建立链接,不会立马断开,而是中间间隔一段时间,如果双方都没有再次响应则进行断开
    eg:客服系统
        
2. 请求数据格式
    2.1 请求首行(HTTP协议的版本号,请求方式)
    2.2 请求头(一堆k:v键值对)
    2.3 \r\n
    2.4 请求体
    	请求体里面放的都是一些敏感数据
        post请求方式有请求体,get请求方式没有请求体,
	
    
3. 响应数据格式
    3.1 响应首行(HTTP协议的版本号,响应状态码)
    3.2 响应头(一堆k:v键值对)
    3.3 \r\n
    3.4 响应体
    	#就是服务端返回给浏览器的数据,浏览器渲染到页面上,展示给用户看
  • 响应状态码
'''就是通过用一串简单的数字代码一段复杂的描述信息'''
1XX:服务端接收到消息正在处理,客户端可以继续发送或者等待
2XX:代表请求成功(200 OK),服务端发送了对应的响应
3XX:重定向(进入到A页面,但是内部自动跳转了B页面)
	302(临时) 
	304(永久)
4XX:客户端错误
    404:请求资源不存在
    403:没有权限
5XX:服务端错误
	500 服务器内部错误
  • 请求方式
1. get# 朝服务端要数据
    eg: 在网址栏里输入baidu.com
    '''没有请求体,可以携带参数,参数跟在了地址栏的后面,使用?&连接'''
    https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=false
    https://www.baidu.com/s?k=v&k1=v1&k2=v2
    https://www.baidu.com/s?wd=美女&ie=utf-8&
        
2. post# 朝服务端提交数据
    eg:你在登录网站的时候,输入用户名和密码,然后把用户名和密码提交到服务端进行验证
    '''可以携带参数,参数在请求体中'''
#get与post请求体区别    
post携带参数比get携带的参数更加安全
get携带参数大小一般是4kb,post携带参数没有大小限制
get没有请求体,post有请求体   

HTML简介

HTML是什么
超文本标记语言(Hypertext Markup Language, HTML)是一种用于创建网页的标记语言,所见即所得(没有任何逻辑 是什么就是什么)   

1.直接发送手写的数据
2.转为发送文件里面的数据
3.编写HTML出现特殊的现象

<h1>hello big big baby!</h1>
<a href='http://www.taobao.com'>click me</a>   #访问网址
<img src='https://img2.baidu.com/it/u=1574304958,174721775&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1681318800&t=7025b504ad317f14cb6a313a7b20d50b'>


h1
a
img
...
# 像以上这表标签就是HTML
'''如果你想让你的浏览器识别你的网站,你就必须遵循HTML语法'''
# HTML的标签名字不能改正,必须记忆, xml---->标签是自定义的

创建HTML文件的方式

1. 在pycharm中新建HTML文件
	new>HTML file
	# html文件的后缀名是:.html
2.桌面 新建文本文档 修改后缀名为html  
	编写HTML内容

pycharm创建html文件默认代码解释

<!DOCTYPE html>    			 #文档类型 html
<html lang="en">			#语言 English	
<head>						
    <meta charset="UTF-8">		# 指定字符编码的
    <title>Title</title>		#标题
</head>
<body>

</body>
</html>
  • HTML文档介绍
1. <!DOCTYPE html>声明为HTML文档。
2. <html>...</html>是文档的开始标记和结束的标记。是HTML页面的根元素,在它们之间是文档的头部(head)和主体(body)。
3. <head>...</head>定义了HTML文档的开头部分。它们之间的内容不会在浏览器的文档窗口显示。包含了文档的元(meta)数据。用户不可见的
4. <title>...</title>定义了网页标题,在浏览器标题栏显示。
5. <body>...</body>之间的文本是可见的网页主体内容。用户可见的
  • html概览
1.HTML注释语法
	<!--注释内容-->

2.HTML文档结构
	<html>		固定格式 html包裹
    	<head>主要放跟浏览器交互的配置</head>
       <body>主要放给用户查看的花里胡哨的内容</body>
    </html>
 
3.HTML标签分类
    单标签(自闭和标签)
    	<img/>
    双标签
    	<h1></h1>

打开html的方式

1. 打开文件所在的位置,使用浏览器打开
2. 在pycharm中打开

HTML如何使用

1. 注释
<!--    这是注释-->  # 快捷键 ctrl + ?

标签的分类

<h1></h1>
<a></a>
<img />

# 双标签
	<h1></h1>
	<a></a>
# 单标签
	<img />

head标签内常用标签

# <style></style>   只需要写出每个标签的前几个字母或者写标签的起始,tab补全
1.title网页小标题
2.meta定义网页源信息(很多配置)
	<meta name="keywords" content="查询关键字">
	<meta name="description" content="网页简介">
3.style内部支持编写css代码
    <style>
            /*style里面一般写CSS样式*/  #css样式的注释
            h1 {
                color: red;
            }
    </style>

4.script支持内部编写js代码
    <script>
    // 写js代码
    alert(123)
    </script>
    
	4.1可以引入外部js文件
		<script src="myjs.js"></script>  # 引入外部js文件,src后跟文件路径

5.link引入外部css文件
<link rel="stylesheet" href="mycss.css">  # 引入外部CSS文件,href后跟文件路径


#路径查找以当前文件所在位置为基准查找 
上一级xx/  上上一级xx/xx/
<link rel="stylesheet" href="../../mycss.css">
<script src="../../myjs.js"></script>

body中常用标签

常用标签

h1~h6标题标签,其中 h1最大  h6最小
<b>加粗</b>
<i>斜体</i>
<u>下划线</u>
<s>删除</s>
<p>段落标签</p>
<br>换行
<hr>分割线

标签的分类2

1. 块儿级标签
	# 独自占一行
	h1~h6 p div
2. 行内标签(内联标签)
	# 自身文本有多大,就占多大
    b i u s标签 span a

特殊字符

空格 &nbsp;
> &gt;
< &lt;
& &amp;
¥ &yen;
版权 &copy;
注册 &reg;

div标签和span标签

div块标签
span行标签
'''
标签嵌套:
	块儿级标签可以嵌套所有的块儿级元素和行内元素,p标签也是块儿级元素,但是它不能嵌套块儿级标签,可以嵌套行内元素.
	行内标签只能嵌套行内元素
'''
# 这两个标签一般在刚开始构建页面的时候用,主要用来占位置的. div主要用来占位置,span占的是文本位置

'''这两个标签没有实际的意义'''

img标签

<img src="" alt="">#图片标签
src  alt# 这两个都叫标签的属性
<img src="https://img1.baidu.com/it/u=413643897," alt="图片加载不出来才显示"width="100px">
#还可以将图片保存电脑,再粘贴图片到pycharm中访问
<img src="456.webp" alt="图片加载不出来才显示"width="100px">


src:
    里面放图片的地址
    1. 可以放外部的图片地址
    2. 还可以放本地的地址
    
    
alt:
    是对这个图片的描述,图片加载不出才会显示
title:
	悬浮框

a标签

# 超链接标签
<a href=""></a>

<a href="http://www.oldboyedu.com" target="_blank" title="请看我" >点我</a>

href:
#指定目标网页地址。该地址可以有几种类型:
    绝对URL - 指向另一个站点(比如 href="http://www.jd.com)
    相对URL - 指当前站点中确切的路径(href="index.htm")
    锚URL - 指向页面中的锚(href="#top")
target:
    	target="_self"	#在当前网页跳转新标签页
    	target="_blank"  # 新打开一个标签页跳转
title:
    	鼠标放上去显示的内容

列表

  • 无序列表

    #ul标签
    type属性:
    ● disc(实心圆点,默认值)
    ● circle(空心圆圈)
    ● square(实心方块)
    ● none(无样式)
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <ul type="disc">
        <li>第一项</li>
        <li>第二项</li>
    </ul>
    <ul type="circle">
        <li>第一项</li>
        <li>第二项</li>
    </ul>
    <ul type="square">
        <li>1</li>
        <li>2</li>
    </ul>
    <ul type="none">
        <li>3</li>
        <li>4</li>
    </ul>
    
    </body>
    </html>
    
    
  • 有序列表

# ol标签
type属性:
● 1 数字列表,默认值
● A 大写字母
● a 小写字母
● Ⅰ大写罗马
● ⅰ小写罗马


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ol type="1">
<li>第一</li>
<li>第二</li>
</ol>


<ol type="A">
<li>第一</li>
<li>第二</li>
</ol>

<ol type="I">
<li>第一</li>
<li>第二</li>
</ol>

</body>
</html>
  • 标题列表
  <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <title>Title</title>
  </head>
  <body>
  
  <d1>
    <dt>标题1</dt>
    <dd>内容1</dd>
    <dt>标题2</dt>
    <dd>内容1</dd>
    <dd>内容2</dd>
  </d1>
  </body>
  </html>

表格

姓名    性别   年龄  薪资  爱好
kevin   male	20	1000 read
kevin   male	20	1000 read
kevin   male	20	1000 read
kevin   male	20	1000 read


# 我们可以使用table标签来画表格
<table>
    <thead>			#表头数据
        <tr>
            <th>	#加粗
            </th>
        </tr>
    </thead>
    <tbody>			#表体数据
        <tr>
            <td>
            </td>
        </tr>
    </tbody>
</table>

属性:
● border: 表格外边框.
● cellpadding: 内边距
● cellspacing: 外边距.
● rowspan: 单元格竖跨多少行
● colspan: 单元格横跨多少列(即合并单元格)
    
OCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table border="15" cellpadding="1" cellspacing="15">
    <thead>
        <tr>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>kevin</td>
            <td rowspan="2">male</td>
            <td colspan="1">20</td>
        </tr>
        <tr>
            <td>kevin1</td>
            <td>male</td>
            <td>31</td>
        </tr>
    </tbody>
</table>

</body>
</html>

标签的两个重要属性

1. id
	# 类似于人的身份证号,一个html文档中,id值不能重复,必须唯一
2. class
	# 每一个标签都可以有class属性值,并且,每一个标签都可以有多个class值
3. 自定义属性
<div id='' class='' username='aa' password='123'></div>
其中username='aa' password='123'就为此标签的自定义属性

form表单标签

获取用户输入的数据、用户上传的文件等等都是通过form表单实现,它可以把用户输入的数据通过网络传给后端

  • form标签
	action	控制数据的提交地址(URL)
  	method	控制数据的提交方式(默认:GET)
    enctype	控制提交数据的编码格式(默认:url-encoded)

form表单中得按钮:
<input type="submit" value="提交"> 提交表单的功能
<input type="button" value="按钮"> 没有任何功能
<input type="reset" value="重置"> 清空
<button>提交</button> 有提交表单的功能,但是必须写在form表单中
  • input标签
input标签是行内元素 一般使用<p></p>实现换行
'''通过改变input的type属性,来达到不同的输入类型'''
type:
    text 文本
    password 密文展示
    date 日期类型选项
    email 邮箱
    radio 单选  # 一个组的单选框需要name属性且name值要一样
    	<input type="radio" name="gender"> 男
        <input type="radio" name ='gender'>女
    checkbox 复选# 一个组的复选需要name属性且name值要一样
    	<input type="checkbox" name="hobby" > 足球
        <input type="checkbox" name="hobby">篮球
    # 单选和复选如果默认选中,只需要给标签在value前加checked属性 <input type="checkbox" name="hobby"checked value="足球">足球
    file 上传文件 
    	<input type="file" multiple>#可上传多个文件
        <input type="file"name="myfile">#只可上传1个文件
 属性说明:
● name:表单提交时的“键”,注意和id的区别
● value:表单提交时对应项的值
  ○ type="button", "reset", "submit"时,为按钮上显示的文本内容
  ○ type="text","password","hidden"时,为输入框的初始值
  ○ type="checkbox", "radio", "file",为输入相关联的值
● checked:radio和checkbox默认被选中的项
● readonly:text和password设置只读
● disabled:禁用 所有input均适用
● placeholder:对输入框做一个说明解释                      
  • select标签
属性说明:
● multiple:布尔属性,设置后为多选,否则默认单选
● disabled:禁用
● selected:默认选中该项
● value:定义提交时的选项值                     
option标签	一个个选项
textarea标签	获取大段文本       
    
    <select name="" id="">
            <option value="">北京</option>
            <option value="">上海</option>
            <option value="" selected="selected">东京</option> # 选中selected
            <option value="">东京1</option>
   </select>
<p>
        <textarea name="" id="" cols="30" rows="10"></textarea>  # 获取大段文本框
</p>
  • label
说明:
1. label 元素不会向用户呈现任何特殊效果。
2. <label> 标签的 for 属性值应当与相关元素的 id 属性值相同。
<form action="">
  <label for="username">用户名</label>
  <input type="text" id="username" name="username">
</form>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="">

    <label for="username">用户:<input type="password" id="username"class="c1 c2 c3" placeholder="请输入用户名" name="username"></label>
    <p>
    密码:<input type="password" placeholder="请输入密码" name="password">
     </p>
    <p>
        生日:<input type="date" name="date">
    </p>
    <p>
        <input type="radio" name="gender" value="male">男
        <input type="radio" name ='gender' value="female">女
        <input type="radio" name="gender" value="others">保密
    </p>
    <p>
        <input type="checkbox" name="hobby"value="篮球">篮球
        <input type="checkbox" name="hobby"checked value="足球">足球
        <input type="checkbox" #默认足球name="hobby"value="排球">排球
        <p>
        <input type="radio" name="hobby1" value="游泳">游泳
        <input type="radio" name="hobby1" value="体操">体操
        <input type="radio" name="hobby1" value="冰球">冰球
    </p>
    </p>
    <p>
    邮箱: <input type="email" name="email">
</p>
    <p>
<!--        <input type="file"name="myfile">-->
        <input type="file" multiple>
    </p>
    <p>
        <select name="" id="">
            <option value="">北京</option>
            <option value="">上海</option>
            <option value=""selected>深圳</option> #selected默认深圳
        </select>
    </p>
    <p>
        <select name="" id="">
            <optgroup label="北京">
                <option value="">海淀</option>
                <option value="">朝阳</option>

            </optgroup>
        </select>
    </p>
    <p>
        <textarea name="" id="" cols="30" rows="10"></textarea>
    </p>
    <p>
        <input type="submit" value="提交">
        <input type="button" value="按钮">
        <input type="reset" value="重置">
        <button>提交</button>
    </p>
</form>

</body>
</html>
  • 表单标签的说明
基于form表单发送数据

1.用于获取用户数据的标签至少应该含有name属性
  		name属性相当于字典的键
  用户输入的数据会被保存到标签的value属性中
    	value属性相当于字典的值
   ps:没有name属性的标签 form表单会直接忽略 不会发送
    
2.如果不需要用户填写数据 只需要选择 那么我们需要自己填写value从而得知用户选择的数据
  <input type="radio" name="gender" value="male">
    
3.针对input标签理论上应该配一个label标签绑定 但是也可以不写
	<label for="d1">username:
        <input type="text" id="d1">
    </label>
   	<label for="d1">username:</label>
    <input type="text" id="d1">
    
4.标签的属性如果和属性值相等 那么可以简写不写属性值
	<input type="file" multiple="multiple">
	<input type="file" multiple>#简写
    
5.针对选择类型的标签可以提前设置默认选项
	<input type="radio" name="gender" checked="checked">
 	<input type="radio" name="gender" checked>
 	<input type="checkbox" checked="checked">
   	<input type="checkbox" name="gender" checked>
	<option value="" selected="selected">222</option>
    <option value="" selected>222</option>
    
6.下拉框与文件上传可以复选
	<input type="file" multiple>
   	<select name="" id="" multiple>

验证form表单把数据提交到后端

# 代码不需要掌握,flask框架写的
'''python中得框架:Django flask ... '''
# 先安装flask,然后在用
pip install flask

# form表单默认提交的请求方式是get,如何更改:
<form action="" method='post'>
	action:
    	1. 什么都不写,默认提交到当前地址
        2. 全写(绝对地址):http://127.0.0.1:5000/index/ # 朝这个完整地址提交数据
        3. 只写后缀/index/  # 会自动拼接路径:ip:port/index/
        http://127.0.0.1:5000/index/ 在django框架中会遇到
method='post'  # 改变提交方式的


 <input type="password" placeholder="请输入密码" name="password">
  """
  	每一个标签都应该有一个name属性,name属性的值相当于是字典的key,用户输入的值相当于是字典的v
  """

针对于用户选择的标签,都应该有一个value值
		<input type="checkbox" name="hobby" value="1"> 篮球
        <input type="checkbox" name="hobby" checked value="2"> 足球
        <input type="checkbox" name="hobby" checked value="3"> 台球

        
        
针对于文件上传必须满足2个条件:
			1. 请求方式必须是post
			2. enctype属性必须是enctype="form-data"
            
提交数据的编码格式:
				1. urlencode默认的提交格式,它只能提交普通文本数据,不能提交文件等数据
				2. form-data支持了提交文件数据,并且也可以提交普通文本数据
				3. json------>{"k":"v"}
"""form表单只能提交2种urlencode和 form-data,不能提交json格式的数据"""

  • 前端代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:5000/index/" method="post" enctype="multipart/form-data">

    <label for="username">用户:<input type="text" id="username"class="c1 c2 c3" placeholder="用户名" name="username"></label>
    <p>
    密码:<input type="password" placeholder="请输入密码" name="password">
     </p>
    <p>
        生日:<input type="date" name="date">
    </p>
    <p>
        <input type="radio" name="gender" value="male">男
        <input type="radio" name ='gender' value="female">女
        <input type="radio" name="gender" value="others">保密
    </p>
    <p>
        <input type="checkbox" name="hobby"value="篮球">篮球
        <input type="checkbox" name="hobby"checked value="足球">足球
        <input type="checkbox" name="hobby"value="排球">排球
        <p>
        <input type="radio" name="hobby1" value="游泳">游泳
        <input type="radio" name="hobby1" value="体操">体操
        <input type="radio" name="hobby1" value="冰球">冰球
    </p>
    </p>
    <p>
<!--        <input type="file"name="myfile">-->
        <input type="file" multiple name="myfile">
    </p>
    <p>
        <select name="" id="">
            <option value="">北京</option>
            <option value="">上海</option>
            <option value=""selected>深圳</option> #selected默认深圳
        </select>
    </p>
    <p>
        <select name="" id="">
            <optgroup label="北京">
                <option value="">海淀</option>
                <option value="">朝阳</option>

            </optgroup>
        </select>
    </p>
    <p>
        <textarea name="" id="" cols="30" rows="10"></textarea>
    </p>
    <p>
        <input type="submit" value="提交">
        <input type="button" value="按钮">
        <input type="reset" value="重置">
        <button>提交</button>
    </p>
</form>

</body>
</html>   
  • flask代码
from flask import Flask,request

app = Flask(__name__)

# 路由地址----->网址栏里面地址后面的后缀
@app.route('/index/', methods=['GET', 'POST'])#index为访问路由地址 methods为请求方式
def index():
    # 接收前端提交过来的数据
    print(request.form)  # form只能接收post提交的文本数据
    # print(request.args) # args拿到get请求的数据
    # ImmutableMultiDict([('username', 'use'), ('password', '123'), ('gender', '女')]),字典的数据来源: ([('用户名中的name属性值','输入框中的值'), ('密码中的name属性值', '输入框中的值'), ('gender中name属性值', 'gender中value属性值')])

    print(request.files)  # 接收文件数据
    # ImmutableMultiDict([('myfile', <FileStorage: 'http.png' ('image/png')>)]),数据来源: ([('文件中的name属性值', <文件存储器: '图片名' ('image/png')>)])
    
    file_obj = request.files.get('myfile')#获取上传文件
    file_obj.save(file_obj.filename)#保存上传文件
    return 'OK'

# 3. 启动框架
app.run()