⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbwebsrv.py

📁 python web programming 部分
💻 PY
字号:
#!/usr/bin/env python
#
# A simple database-driven web server
#
import dbpages
import asyncore, asynchat, socket, sys

class http_server(asyncore.dispatcher):

    def __init__(self, ip, port, dbsource):
        self.ip= ip
        self.port = port
        self.dbsource = dbsource
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.bind((ip, port))
        self.listen(5)

    def readable(self):
        return self.accepting

    def handle_accept(self):
        try:
            conn, addr = self.accept()
        except socket.error: # rare Linux error
            print "Socket error on server accept()"
            return
        except TypeError: # rare FreeBSD3 error
            print "EWOULDBLOCK exception on server accept()"
            return
        http_handler(conn, addr, self.dbsource)

class http_handler(asynchat.async_chat):

    def __init__(self, conn, addr, dbsource):
        asynchat.async_chat.__init__(self, conn=conn)
        self.addr = addr
        self.dbsource = dbsource
        self.ibuffer = ""
        self.obuffer = ""
        self.set_terminator("\r\n\r\n")

    def collect_incoming_data(self, data):
        self.ibuffer += data.replace('\r', '')

    def found_terminator(self):
        request = self.ibuffer.split("\n")[0]
        op, path, protocol = request.split()
        path = path[1:]
        if not path:
            path = "Home"
        self.ibuffer = ""
        self.obuffer = dbsource.page(op, path)

    def writable(self):
        return len(self.obuffer) > 0

    def handle_write(self):
        sent = self.send(self.obuffer)
        self.obuffer = self.obuffer[sent:]
        if len(self.obuffer) == 0:
            self.close()
if __name__ == "__main__":
    if len(sys.argv) < 2:
        type = "mx"
    else:
        type = sys.argv[1].lower()
        if type not in ('mx', 'gf', 'odbc'):
            sys.exit("USAGE: %s mx | gf | odbc\n" % sys.argv[0])
    dbsource = dbpages.dbsource("WebData", type)
    server = http_server('', 8080, dbsource)
    try:
        asyncore.loop(4.0) # Frequent checks for interrupt
    except KeyboardInterrupt:
        dbsource.close()
        print "Finished"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -