策略大本营2:自由,平等,友爱。

Django 学习笔记-1 socket 和 WSGI

2021-03-28  本文已影响0人  游文影月志

1. 用 socket 实现一个简单的 Web 服务器

#! python3

import socket


def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 开启socket
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 清除IP和端口占用
    sock.bind(('localhost', 8000))  # 绑定IP和端口到套接字
    sock.listen(3)  # 监听,5表示客户端最大连接数

    while True:
        conn, addr = sock.accept()
        data = conn.recv(1024)  # 接收数据大小为1024字节
        print(data)

        conn.send(b'HTTP/1.1 200 OK\r\nContent-Type:text/html; charset=utf-8\r\n\r\n')
        conn.send('Hello, World!'.encode('utf-8'))
        conn.close()


if __name__ == "__main__":
    main()

2. 用 wsgiref 实现一个简单的 Web 服务器

wsgiref 是 WSGI 规范的范例实现,而 WSGI(Python Web Server Gateway Interface ) 即 Web服务器网关接口,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。

#! python3

from wsgiref.simple_server import make_server


def app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'<h1>Hello, world!</h1>']


def main():
    my_server = make_server('localhost', 8000, app)
    my_server.serve_forever()


if __name__ == '__main__':
    main()

2.1 增加支持多路由功能

#! python3

from wsgiref.simple_server import make_server


def index():
    return [b'<h1>Hello, world!</h1>']


def hello():
    return [b'<h1>Hello!</h1>']


def world():
    return [b'<h1>World!</h1>']


urls = {
    '/': index,
    '/hello': hello,
    '/world': world
}


def app(environ, start_response):
    request_url = environ.get('PATH_INFO')
    if request_url in urls:
        start_response('200 OK', [('Content-Type', 'text/html')])
        return urls[request_url]()
    else:
        start_response('404 NOT FOUND', [('Content-Type', 'text/html')])
        return [b'<h1>404, Page Not Found!</h1>']


def main():
    my_server = make_server('localhost', 8000, app)
    my_server.serve_forever()


if __name__ == '__main__':
    main()

上一篇下一篇

猜你喜欢

热点阅读