zoukankan      html  css  js  c++  java
  • wsgiref手写一个web服务端

    '''

    通过wsgiref写一个web服务端
    先讲讲wsgiref吧,基于网络通信其根本就是基于socket,
    所以wsgiref同样也是通过对socket进行封装,避免写过
    多的代码,将一系列的操作封装成一个方法(函数),这样大大减少代码量

    '''

    from wsgiref.simple_server import make_server
    
    
    def index(env):
        return 'index'
    
    
    def see_time(env):
        return 'time'
    
    
    def user(env):
        return 'user'
    
    
    urls = [
        ('/index', index),
        ('/time', see_time),
        ('/user', user),
    ]
    # 这里我们通过路由的方式,一个url对应一个视图函数,在那个视图函数中我们可以写一系列的逻辑代码
    
    def run(env, response):
        response("200 OK", [('Content-type', 'text/html')])
        # env是浏览器请求带来的数据,进行一些列处理得到的字典,通过字典得到它请求的url
        # 我们再通过url进行判断,并返回其相应的页面
        position = env['PATH_INFO']
        function = None
        for url in urls:
            if url[0] == position:
                function = url[1]
                break
        if function:
            info = function(env)
        else:
            info = '404'
    
        return [info.encode('utf-8')]
    
    
    
    if __name__ == '__main__':
        server = make_server('127.0.0.1', 8008, run)
        print('8008端口监听。。。')
        server.serve_forever()  # 让服务器永远启动
    '''
    make_server这是一个函数,虽然看了一点点源码,但还是不太懂,但是大概的意思应该是
    make_server('127.0.0.1', 8008, run),前两个端口,它帮我们绑定了服务端的ip端
    口,然后就是再那里等待客户端去连接,当有客户端连接的时候,将客户端请求带来的数据,
    进行一些列的处理(处理方法大概和上一篇socket处理字符串的方法一样吧,也有不同的),
    得到一个数据字典当作参数传入第三个参数(run函数),然后将一个对象的方法当作参数作为
    第二个参数传入。
    第二个参数的作用大概是就是首先发送(上一篇socket.send('HTTP/1.1 200 ok
    
    ''))
    效果一样的代码。
    
    '''
    # 这个相对于上一篇我写的简单了许多,但也要理解make_server是怎么运行的,虽然看不懂源码,
    # 但可以通过实现效果反推测出它怎么运行的,还要理解run函数中的两个参数。


    # 如果你还想再添加访问的页面,首先你要在url中添加url和对应的视图函数。
    # 再去写视图函数,下面的代码不用去动
  • 相关阅读:
    Oracle11g工具
    Oracle数据库中scott用户的所有表结构
    Oracle数据库手动解锁scott用户
    Oracle数据库实例的删除和安装
    Oracle数据库的安装
    Oracle数据库发展历史
    禁止浏览器中双击选中元素的解决方法
    Window 设置pm2开机自启动服务
    通过node创建web服务器----express插件打包上线
    vue项目优化----通过externals加载外部CDN资源
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/9897357.html
Copyright © 2011-2022 走看看