zoukankan      html  css  js  c++  java
  • python web编程 创建一个web服务器

    这里就介绍几个底层的用于创建web服务器的模块,其中最为主要的就是BaseHTTPServer,很多框架和web服务器就是在他们的基础上创建的

    基础知识

    要建立一个Web 服务,一个基本的服务器和一个“处理器”
    是必备的。

    基础的(Web)服务器是一个必备的模具。它的角色是在客户端和服务器端完成必要HTTP 交互。
    在BaseHTTPServer 模块中你可以找到一个名叫HTTPServer 的服务器基本类。

    处理器是一些处理主要“Web 服务”的简单软件。它们处理客户端的请求,并返回适当的文件,
    静态的文本或者由CGI 生成的动态文件。处理器的复杂性决定了你的Web 服务器的复杂程度。Python
    标准库提供了三种不同的处理器。

    最基本,最普通的是 vanilla 处理器,被命名 BaseHTTPResquestHandler,这个可以在基本
    Web 服务器的BaseHTTPServer 模块中找到。除了获得客户端的请求外,不再执行其他的处理工作,
    因此你必须自己完成它们,这样就导致了出现了myhttpd.py 服务的出现。
    用于SimpleHTTPServer 模块中的SimpleHTTPRequestHandler , 建立在
    BaseHTTPResquestHandler 基础上,直接执行标准的GET 和HEAD 请求。这虽然还不算完美,但已经
    可以完成一些简单的功能啦。
    最后,我们来看下用于CGIHTTPServer 模块中的CGIHTTPRequestHandler 处理器,它可以获取
    SimpleHTTPRequestHandler 并为POST 请求提供支持。它可以调用CGI 脚本完成请求处理过程,也可
    以将生成的HTML 脚本返回给客户端。

    BaseHTTPServer 提供基本的Web 服务和处理器类, 分别是HTTPServer 和
    BaseHTTPRequestHandler
    SimpleHTTPServer 包含执行GET 和HEAD 请求的SimpleHTTPRequestHandler 类
    CGIHTTPServer 包含处理POST 请求和执行CGICGIHTTPRequestHandler 类

    实现

    #!/usr/bin/env python
    
    from os import curdir, sep
    from BaseHTTPServer import 
        BaseHTTPRequestHandler, HTTPServer
    
    class MyHandler(BaseHTTPRequestHandler):
    
        def do_GET(self):
            try:
                f = open(curdir + sep + self.path)
                self.send_response(200)
                self.send_header('Content-type',
            'text/html')
                self.end_headers()
                self.wfile.write(f.read())
                f.close()
            except IOError:
                self.send_error(404,
            'File Not Found: %s' % self.path)
    
    def main():
        try:
            server = HTTPServer(('', 80), MyHandler)
            print 'Welcome to the machine...'
        print 'Press ^C once or twice to quit'
            server.serve_forever()
        except KeyboardInterrupt:
            print '^C received, shutting down server'
            server.socket.close()
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    hibernate 数据处理
    oracle函数
    TCP聊天工具
    Hibernate批量处理数据、HQL连接查询
    Hibernate二级缓存配置
    Hibernate一对一关联映射配置
    Hibernate延迟加载
    Hibernate双向多对多关联
    06章 映射一对多双向关联关系、以及cascade、inverse属性
    映射对象标识符
  • 原文地址:https://www.cnblogs.com/wybert/p/4077631.html
Copyright © 2011-2022 走看看