老男孩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)    收藏  举报

导航