1. python和web开发框架
1.1 Web开发基本知识
Web开发框架:是用于Web开发的成套软件架构。Web开发框架会为Web应用提供成套的功能支持,即一套开发和部署网站的方案。
Web服务本质上是由socket(socket是一种通信机制,通过绑定IP地址和端口产生一个通信链,实现计算机间的通信) Django本身是一个Web开发框架,它连接socket两端(服务端、客户端)进行数据交换,当然这种交换按照指定的协议进行,也就是HTTP
1.2.1 Web应用的本质
网络中不同的计算机间进行通信必须经过IP地址和端口。为了降低网络通信开发的复杂度,人们在TCP/IP 4层结构中的应用层与传输层之间加了一层,这个层就是socket层。它把复杂的TCP/IP进行了封装,并提供了一组服务的接口。 网络中服务器主机会提供一种或多种服务,每一种服务打开一个socket,并绑定到一个端口上,也就是说不同的端口对应于不同的服务(如Web服务一般用到80端口) Web 开发框架的运行方式
import socket
sk=socket.socket()
sk.bind(('127.0.0.1',8000))
sk.listen()
print('socket服务开始运行...')
while True:
conn,addr=sk.accept()
data=conn.recv(1024)
print(data)
conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
conn.send(bytes("你好,i am the socket server, i have received your request!",encoding='utf-8'))
1.2.2 Web框架开发核心功能
import socket
def index(url):
with open('index.html', 'r',encoding='utf-8') as f:
rd= f.read()
rd = rd.replace("$@index$@", "首页")
return bytes(rd,encoding='utf-8')
def test(url):
with open('test.html', 'r',encoding='utf-8') as f:
rd = f.read()
rd = rd.replace("$@test$@", "测试")
return bytes(rd, encoding='utf-8')
def fun404(url):
ret = "<h1>not found!</h1>"
return bytes(ret, encoding='utf-8')
url_func=[("/index/",index),("/test/",test),]
sk=socket.socket()
sk.bind(('127.0.0.1',8000))
sk.listen()
print('socket服务开始运行……')
while True:
conn, addr = sk.accept()
'''
下面语句中data变量接收socket客户端(浏览器)数据,
这个数据有固定格式数据是HTTP请求数据格式,
第一行格式为GET/index/ HTTP/1.1\r\n该行以\r\n结尾,各字符串以空格分隔
'''
data=conn.recv(1024)
print(data)
if not data:
continue
data_str = str(data, encoding='utf-8')
line = data_str.split("\r\n")
print(line[0])
v1 = line[0].split()
url = v1[1]
conn.send(b"HTTP/1.1 200 OK\r\n\r\n")
func = None
"""用for循环取出url_func中的每一项,它是由URL和函数名组成的元组向客户端发消息"""
for i in url_func:
if i[0] == url:
func = i[1]
break
if func:
func = func
else:
func = fun404
rep = func(url)
conn.send(rep)
conn.close()
(1)以上代码定义了两个函数——index()和test(),还定义了一个列表类型的变量,列表中每项都是元组,其列出URL与函数名的对应关系。程序流程主要是:根据传入的参数(URL),读取相应的HTML文件,并根据占位符(本例中用两个$@包含一个变量名表示一个占位符,形如$@index$@)进行替换实现网页动态显示。 (2)index()函数和test()函数读取相应的HTML文件并进行占位符替换,同时以字节形式返回替换后的文本,进行替换的HTML文件index.html所含代码如下,请注意占位符$@index$@的位置。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index页面</title>
</head>
<body>
<h1>$@index$@</h1>
</body>
</html>
test.html的代码与index.html的代码相似,此处不再列举。 (3)代码还增加了一个fun404()函数来处理无对应关系的路径。(4)在while True代码块中增加了对浏览器(socket客户端)传来的消息的处理,解析出浏览器地址栏中URL的路径,要正确解析路径必须了解浏览器传给socket服务端的消息格式。这里以在浏览器地址栏中输入http://127.0.0.1:8000/index/为例,通过print语句可以看到socket服务端收到的消息格式如下。
GET /index/ HTTP/1.1\r\n
Host: 127.0.0.1:8000\r\n
Connection: keep-alive\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, likeGecko)
Chrome/63.0.3239.132 Safari/537.36\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\
1.3 python web 开发框架
Web开发框架的本质就是用HTTP实现socket服务端与浏览器的通信功能。这些功能可以概括为三部:
- socket服务端与客户端收/发socket 信息,按照http来解析消息。
- 建立URL与要执行函数的对应关系,这里的函数包括业务逻辑代码
- 载入HTML文件当作模板,对其中特殊符号标识的字符串进行替换并发送给浏览器显示。
python中的web框架一般实现三种核心功能
- 收发消息
- 根据用户不同的路径执行不同的函数
- 从HTML中取出内容,并且完成字符串的替换
|