1、Web的三个层次
网页设计思路是把网页分成三个层次,即:结构层(HTML)、表示层(CSS)、行为层(Javascript)。
形象的比喻,先是HTML捏了一个人,然后CSS则是给人穿上衣服,最后通过JS让人动起来。
Web服务的本质
对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。用户向服务器发送一个请求。然后服务器响应,将数据和格式(html)发回给客户端,然后断开这个连接。客户端收到返回的数据后,通过浏览器将数据按照一定的格式呈现出来;整个过程就是一个socket的短连接。只不过用户使用的浏览器只能解析html格式的文档。
下面是一个服务端的python代码,实现一个简单的Hello World:
import socket
from time import ctime
def handle_request(conn):
request = conn.recv(1024) # 接收浏览器发送的请求
print("[%s] Received:[%s]"%(ctime(),request)) # 在服务端显示请求信息
conn.send('HTTP/1.1 200 OK\r\n\r\n'.encode('utf-8')) # 给浏览器发送响应状态码
with open("index.html",'r') as file:
html=file.read()
conn.send(html.enode('utf-8'))
conn.close() # 关闭套接字
def main():
# 先创建一个socket服务端套接字 tcp服务
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('0.0.0.0', 9999)) # 绑定服务器端口,这里远程服务器上不能填localhost,在本地查看可以
server.listen(5) # 最多连接五个端口
# 然后持续监听
while True:
conn, addr = server.accept() # 接收连接的数据
handle_request(conn) # 将连接传递给handle_request函数处理
conn.close() # 关闭连接
if __name__ == '__main__':
main()
先写一个简单的带一点标签的html文件,index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>HELLO Html</title>
</head>
<body>
<h1>Login</h1>
<div class="item">
<i></i>
<input type="text" placeholder="username">
</div>
<div class="item">
<i></i>
<nput type="text" placeholder="password">
</div>
<button>Login</button>
</body>
在本机启动上面的socket之后,直接使用浏览器作为客户端连接。在地址栏输入 http://127.0.0.1:9999/ 或 http://localhost:9999/ 之后,浏览器上就会显示服务端返回的内容了。除了数据,还会包括格式(html标签)。实际应用中会将所有的内容写成一个html文件,然后再返回数据的时候调用这个文件。然后我们的socket不再发送简单的数据,而是读取文件,将文件中的数据发送给客户端。
上面的程序示例中,html和socket服务是分离的,需要返回给客户端什么样的页面,我们只需要编辑修改我们的html文件即可。而我们的socket服务器代码则负责和客户端的数据交换。
使用pycharm直接创建一个html文件,内容如下(HTML5的模板):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link rel="stylesheet" href="/static/css/login.css">
</head>
<body>
<div id="login-box">
<h1>Login</h1>
<div class="form">
<div class="item">
<i></i>
<input type="text" placeholder="username">
</div>
<div class="item">
<i></i>
<input type="text"placeholder="password">
</div>
</div>
<button>Login</button>
</div>
</body>
:这是一个声明,声明下面html的版本。这里是一个html5的声明。这个不是html标签,下面的都是。
< html lang=“en”>:这是一个html标签,里面的 lang=“en” 是标签内部的属性。一般html标签这么写就行了。这个属性也用不着。
< head> :head标签,html的头,后面详讲
< body> :body标签,html的主体,后面详讲
最后补充一个
注释 :
标签的分类
主动闭合标签:大多数的标签都是这种形式。标签有两部分,比如上面的、
head内标签
:指定页面的字符编码,否则中文可能会变成乱码。