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

📄 cspage.py

📁 在 linux平台上的网页编程的模板
💻 PY
字号:
#!/neo/opt/bin/pythonimport neo_cgiimport sys, os, stringimport timefrom log import *# errors thrown...NoPageName = "NoPageName"NoDisplayMethod = "NoDisplayMethod"# errors signaled back to hereRedirected = "Redirected"DisplayDone = "DisplayDone"DisplayError = "DisplayError"class Context:    def __init__ (self):        self.argv = sys.argv        self.stdin = sys.stdin        self.stdout = sys.stdout        self.stderr = sys.stderr        self.environ = os.environclass CSPage:    def __init__(self, context, pagename=0,readDefaultHDF=1,israwpage=0,**parms):        if pagename == 0:            raise NoPageName, "missing pagename"        self.pagename = pagename        self.readDefaultHDF = readDefaultHDF        self._israwpage = israwpage        self.context = context        self._pageparms = parms        self._error_template = None        self.page_start_time = time.time()        neo_cgi.cgiWrap(context.stdin, context.stdout, context.environ)        neo_cgi.IgnoreEmptyFormVars(1)        self.ncgi = neo_cgi.CGI()        self.ncgi.parse()        self._path_num = 0        domain = self.ncgi.hdf.getValue("CGI.ServerName","")        domain = self.ncgi.hdf.getValue("HTTP.Host", domain)        self.domain = domain        self.subclassinit()        self.setPaths([self.ncgi.hdf.getValue("CGI.DocumentRoot","")])    def subclassinit(self):        pass    def setPaths(self, paths):        for path in paths:              self.ncgi.hdf.setValue("hdf.loadpaths.%d" % self._path_num, path)            self._path_num = self._path_num + 1                def redirectUri(self,redirectTo):        ncgi = self.ncgi        if ncgi.hdf.getIntValue("Cookie.debug",0) == 1:            ncgi.hdf.setValue("CGI.REDIRECT_TO",redirectTo)            ncgi.display("dbg/redirect.cs")            print "<PRE>"            print neo_cgi.htmlEscape(ncgi.hdf.dump())            print "</PRE>"            raise DisplayDone        self.ncgi.redirectUri(redirectTo)        raise Redirected, "redirected To: %s" % redirectTo    ## ----------------------------------    ## methods to be overridden in subclass when necessary:    def setup(self):        pass    def display(self):        raise NoDisplayMethod, "no display method present in %s" % repr(self)    def main(self):        self.setup()        self.handle_actions()        self.display()    ## ----------------------------------            def handle_actions(self):        hdf = self.ncgi.hdf        hdfobj = hdf.getObj("Query.Action")        if hdfobj:            firstchild = hdfobj.child()            if firstchild:                action = firstchild.name()                if firstchild.next():                    raise "multiple actions present!!!"                method_name = "Action_%s" % action                method = getattr(self,method_name)                apply(method,[])    def start(self):        SHOULD_DISPLAY = 1        if self._israwpage:            SHOULD_DISPLAY = 0                ncgi = self.ncgi                if self.readDefaultHDF:            try:                if not self.pagename is None:                    ncgi.hdf.readFile("%s.hdf" % self.pagename)            except:                log("Error reading HDF file: %s.hdf" % (self.pagename))        DISPLAY_ERROR = 0        ERROR_MESSAGE = ""        # call page main function!        try:            self.main()        except DisplayDone:            SHOULD_DISPLAY = 0        except Redirected:            # catch redirect exceptions            SHOULD_DISPLAY = 0        except DisplayError, num:            ncgi.hdf.setValue("Query.error", str(num))            if self._error_template:                ncgi.hdf.setValue("Content", self._error_template)            else:                DISPLAY_ERROR = 1        except:            SHOULD_DISPLAY = 0            DISPLAY_ERROR = 1                        import handle_error            handle_error.handleException("Display Failed!")            ERROR_MESSAGE = handle_error.exceptionString()        if DISPLAY_ERROR:            print "Content-Type: text/html\n\n"            # print the page            print "<H1> Error in Page </H1>"            print "A copy of this error report has been submitted to the developers. "            print "The details of the error report are below."            print "<PRE>"            print neo_cgi.htmlEscape(ERROR_MESSAGE)            print "</PRE>\n"            # print debug info always on page error...            print "<HR>\n"            print "<PRE>"            print neo_cgi.htmlEscape(ncgi.hdf.dump())            print "</PRE>"        etime = time.time() - self.page_start_time        ncgi.hdf.setValue("CGI.debug.execute_time","%f" % (etime))        if SHOULD_DISPLAY and self.pagename:            debug_output = ncgi.hdf.getIntValue("page.debug",ncgi.hdf.getIntValue("Cookie.debug",0))            # hijack the built-in debug output method...            if ncgi.hdf.getValue("Query.debug","") == ncgi.hdf.getValue("Config.DebugPassword","1"):                ncgi.hdf.setValue("Config.DebugPassword","CSPage.py DEBUG hijack (%s)" %                    ncgi.hdf.getValue("Config.DebugPassword",""))                debug_output = 1            if not debug_output:              ncgi.hdf.setValue("Config.CompressionEnabled","1")            # default display            template_name = ncgi.hdf.getValue("Content","%s.cs" % self.pagename)            # ncgi.hdf.setValue ("cgiout.charset", "utf-8");            try:                ncgi.display(template_name)            except:                print "Content-Type: text/html\n\n"                print "CSPage: Error occured"                import handle_error                print "<pre>" + handle_error.exceptionString() + "</pre>"                debug_output = 1                             # debug output            if debug_output:                print "<HR>\n"                print "CSPage Debug, Execution Time: %5.3f<BR><HR>" % (etime)                print "<PRE>"                print neo_cgi.htmlEscape(ncgi.hdf.dump())                print "</PRE>"                # ncgi.hdf.setValue("hdf.DEBUG",ncgi.hdf.dump())                # ncgi.display("debug.cs")                        script_name = ncgi.hdf.getValue("CGI.ScriptName","")        if script_name:            script_name = string.split(script_name,"/")[-1]                    log ("[%s] etime/dtime: %5.3f/%5.3f %s (%s)" % (self.domain, etime, time.time() - etime - self.page_start_time,  script_name, self.pagename))    # a protected output function to catch the output errors that occur when    # the server is either restarted or the user pushes the stop button on the    # browser    def output(self, str):        try:            self.context.stdout.write(str)        except IOError, reason:            log("IOError: %s" % (repr(reason)))            raise DisplayDone    def allQuery (self, s):        l = []        if self.ncgi.hdf.getValue ("Query.%s.0" % s, ""):          obj = self.ncgi.hdf.getChild ("Query.%s" % s)          while obj:            l.append(obj.value())            obj = obj.next()        else:          t = self.ncgi.hdf.getValue ("Query.%s" % s, "")          if t: l.append(t)        return l

⌨️ 快捷键说明

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