老男孩python全栈就业班第9期第3部分Django基础第60天根据不同的路径返回不同的内容
根据不同的路径返回不同的内容
1.修改文件 index.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
不完善的Web服务器实例
根据不同的路径返回不同的内容
"""
import socket
#生成socket实例对象
sk = socket.socket()
#绑定IP和端口
sk.bind(("127.0.0.1", 8089))
#监听
sk.listen()
#写一个死循环,一直等待客户端来连我
while 1:
#获取与客户端的连接
conn, _ = sk.accept()
#接受客户端发来消息
data = conn.recv(8096)
#print(data)
#把收到的数据转成字符串类型
data_str = str(data, encoding="utf-8")
#print(data_str)
#用 \r\n 分割上面的字符串
l1 = data_str.split("\r\n")
#print(l1[0])
#按照空格切割上面的字符串
l2 = l1[0].split()
#print(l2[1])
url = l2[1]
#给客户端回复信息
conn.send(b'http/1.1 200 OK\r\ncontent-type:text/html; charset=utf-8\r\n\r\n')
#想让浏览器在页面上显示出来的内容都是响应正文
#根据不同的URL返回不同的内容
if url == "/yimi/":
conn.send(b'<h1>hello yimi</h1>')
elif url == "/xiaohei/":
conn.send(b'<h1>hello xiaohei</h1>')
else:
conn.send(b'<h1>404 not found</h1>')
#关闭
conn.close()
sk.close()
2.保存执行,浏览器测试



3.修改文件 index.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
不完善的Web服务器实例
根据不同的路径返回不同的内容
"""
import socket
#生成socket实例对象
sk = socket.socket()
#绑定IP和端口
sk.bind(("127.0.0.1", 8089))
#监听
sk.listen()
#写一个死循环,一直等待客户端来连我
while 1:
#获取与客户端的连接
conn, _ = sk.accept()
#接受客户端发来消息
data = conn.recv(8096)
#print(data)
#把收到的数据转成字符串类型
data_str = str(data, encoding="utf-8")
#print(data_str)
#用 \r\n 分割上面的字符串
l1 = data_str.split("\r\n")
#print(l1[0])
#按照空格切割上面的字符串
l2 = l1[0].split()
#print(l2[1])
url = l2[1]
#给客户端回复信息
conn.send(b'http/1.1 200 OK\r\ncontent-type:text/html; charset=utf-8\r\n\r\n')
#想让浏览器在页面上显示出来的内容都是响应正文
#根据不同的URL返回不同的内容
if url == "/yimi/":
response = b'<h1>hello yimi</h1>'
elif url == "/xiaohei/":
response = b'<h1>hello xiaohei</h1>'
else:
response = b'<h1>404 not found</h1>'
conn.send(response)
#关闭
conn.close()
sk.close()
4.修改文件 index.py,优化代码,用函数方式
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
不完善的Web服务器实例
根据不同的路径返回不同的内容
"""
import socket
#生成socket实例对象
sk = socket.socket()
#绑定IP和端口
sk.bind(("127.0.0.1", 8089))
#监听
sk.listen()
#定义一个处理/yimi/的函数
def yimi(url):
ret = 'hello {}'.format(url)
return bytes(ret, encoding="utf-8")
#定义一个处理/xiaohei/的函数
def xiaohei(url):
ret = 'hello {}'.format(url)
return bytes(ret, encoding="utf-8")
#写一个死循环,一直等待客户端来连我
while 1:
#获取与客户端的连接
conn, _ = sk.accept()
#接受客户端发来消息
data = conn.recv(8096)
#print(data)
#把收到的数据转成字符串类型
data_str = str(data, encoding="utf-8")
#print(data_str)
#用 \r\n 分割上面的字符串
l1 = data_str.split("\r\n")
#print(l1[0])
#按照空格切割上面的字符串
l2 = l1[0].split()
#print(l2[1])
url = l2[1]
#给客户端回复信息
conn.send(b'http/1.1 200 OK\r\ncontent-type:text/html; charset=utf-8\r\n\r\n')
#想让浏览器在页面上显示出来的内容都是响应正文
#根据不同的URL返回不同的内容
if url == "/yimi/":
response = yimi(url)
elif url == "/xiaohei/":
response = xiaohei(url)
else:
response = b'<h1>404 not found</h1>'
conn.send(response)
#关闭
conn.close()
5.修改文件 index.py,继续优化
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
不完善的Web服务器实例
根据不同的路径返回不同的内容
"""
import socket
#生成socket实例对象
sk = socket.socket()
#绑定IP和端口
sk.bind(("127.0.0.1", 8089))
#监听
sk.listen()
#定义一个处理/yimi/的函数
def yimi(url):
ret = 'hello {}'.format(url)
return bytes(ret, encoding="utf-8")
#定义一个处理/xiaohei/的函数
def xiaohei(url):
ret = 'hello {}'.format(url)
return bytes(ret, encoding="utf-8")
#定义一个专门用来处理404的函数
def f404(url):
ret = "你访问的这个 {}".format(url)
return bytes(ret, encoding="utf-8")
url_func = [
("/yimi/", yimi),
("/xiaohei/", xiaohei)
]
#写一个死循环,一直等待客户端来连我
while 1:
#获取与客户端的连接
conn, _ = sk.accept()
#接受客户端发来消息
data = conn.recv(8096)
#print(data)
#把收到的数据转成字符串类型
data_str = str(data, encoding="utf-8")
#print(data_str)
#用 \r\n 分割上面的字符串
l1 = data_str.split("\r\n")
#print(l1[0])
#按照空格切割上面的字符串
l2 = l1[0].split()
#print(l2[1])
url = l2[1]
#给客户端回复信息
conn.send(b'http/1.1 200 OK\r\ncontent-type:text/html; charset=utf-8\r\n\r\n')
#想让浏览器在页面上显示出来的内容都是响应正文
#根据不同的URL返回不同的内容
#去url_func里面找对应关系
for i in url_func:
if i[0] == url:
func = i[1]
break
#找不到对应的关系就默认执行f404函数
else:
func = f404
#拿到函数的执行结果
response = func(url)
#将函数返回的结果发送给浏览器
conn.send(response)
#关闭链接
conn.close()
posted on 2019-10-27 05:21 herisson_pan 阅读(12) 评论(0) 收藏 举报
浙公网安备 33010602011771号