美文网首页
web框架本质

web框架本质

作者: xin激流勇进 | 来源:发表于2017-12-25 15:45 被阅读0次

    来个简单的socket服务端

    #!/usr/bin/env python
    
    import socket
    
    def handle_request(client):
        buf = client.recv(1024)
        client.send("HTTP/1.1 200 OK\r\n\r\n".encode())
        client.send('<h1>Hollo,Boy</h1>'.encode())
        
        
    def main():
        sock = socket.socket()
        sock.bind(('localhost',80))
        sock.listen(5)
        
        while True:
            connection, address = sock.accept()
            handle_request(connection)
            connection.close()
            
        
    if __name__ == "__main__":
        main()
    

    上述通过socket来实现了其本质,而对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序。服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。


    python标准库提供的独立WSGI服务器称为wsgiref

    WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。

    from wsgiref.simple_server import make_server
     
     
    def RunServer(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/html')])
        return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]
     
     
    if __name__ == '__main__':
        httpd = make_server('', 8000, RunServer)
        print("Serving HTTP on port 8000...")
        httpd.serve_forever()
    

    自定义web框架

    通过python标准库提供的wsgiref模块开发一个自己的Web框架

    #!/usr/bin/env python
    #coding:utf-8
    from wsgiref.simple_server import make_server
     
    def index():
        return ['index',]
     
    def login():
        return ['login',]
     
    def routers():
         
        urlpatterns = (
            ('/index/',index),
            ('/login/',login),
        )
         
        return urlpatterns
     
    def RunServer(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/html')])
        url = environ['PATH_INFO']
        urlpatterns = routers()
        func = None
        for item in urlpatterns:
            if item[0] == url:
                func = item[1]
                break
        if func:
            return func()
        else:
            return [b'404 not found',]
         
    if __name__ == '__main__':
        httpd = make_server('', 8000, RunServer)
        print("Serving HTTP on port 8000...")
        httpd.serve_forever()
    

    相关文章

      网友评论

          本文标题:web框架本质

          本文链接:https://www.haomeiwen.com/subject/rcmlgxtx.html