栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python中为AJAX实现最小服务器?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python中为AJAX实现最小服务器?

好的,我想我现在可以回答我自己的问题。这是用于在服务器上计算数字平方的示例实现。如果有任何改进或误解,请告诉我。

python服务器文件:

import threadingimport webbrowserimport baseHTTPServerimport SimpleHTTPServerFILE = 'frontend.html'PORT = 8080class TestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):    """The test example handler."""    def do_POST(self):        """Handle a post request by returning the square of the number."""        length = int(self.headers.getheader('content-length'))     data_string = self.rfile.read(length)        try: result = int(data_string) ** 2        except: result = 'error'        self.wfile.write(result)def open_browser():    """Start a browser after waiting for half a second."""    def _open_browser():        webbrowser.open('http://localhost:%s/%s' % (PORT, FILE))    thread = threading.Timer(0.5, _open_browser)    thread.start()def start_server():    """Start the server."""    server_address = ("", PORT)    server = baseHTTPServer.HTTPServer(server_address, TestHandler)    server.serve_forever()if __name__ == "__main__":    open_browser()    start_server()

…和HTML文件(我称之为“ frontend.html”,不幸的是,该名称也必须出现在Javascript代码中):

<html><head><title>AJAX test</title></head><body><script type="text/javascript">function xml_http_post(url, data, callback) {    var req = false;    try {        // Firefox, Opera 8.0+, Safari        req = new XMLHttpRequest();    }    catch (e) {        // Internet Explorer        try { req = new ActiveXObject("Msxml2.XMLHTTP");        }        catch (e) { try {     req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {     alert("Your browser does not support AJAX!");     return false; }        }    }    req.open("POST", url, true);    req.onreadystatechange = function() {        if (req.readyState == 4) { callback(req);        }    }    req.send(data);}function test_button() {    var data = document.test_form.test_text.value;    xml_http_post("frontend.html", data, test_handle)}function test_handle(req) {    var elem = document.getElementById('test_result')    elem.innerHTML =  req.responseText}</script><form name=test_form>sqr(<input type="text" name="test_text" value="0" size="4">) =<span id="test_result">0</span><input type=button onClick="test_button();" value="start" title="start"></form></body></html>

当然,将jQuery用于XML请求会更加方便,但是为了简单起见,我将其保留为原来的样子。

最后,使用WSGI的另一种实现(不幸的是,如果请求不是POST的话,我看不到依靠标准文件服务处理程序的方法):

import threadingimport webbrowserfrom wsgiref.simple_server import make_serverFILE = 'frontend.html'PORT = 8080def test_app(environ, start_response):    if environ['REQUEST_METHOD'] == 'POST':        try: request_body_size = int(environ['CONTENT_LENGTH']) request_body = environ['wsgi.input'].read(request_body_size)        except (TypeError, ValueError): request_body = "0"        try: response_body = str(int(request_body) ** 2)        except: response_body = "error"        status = '200 OK'        headers = [('Content-type', 'text/plain')]        start_response(status, headers)        return [response_body]    else:        response_body = open(FILE).read()        status = '200 OK'        headers = [('Content-type', 'text/html'),        ('Content-Length', str(len(response_body)))]        start_response(status, headers)        return [response_body]def open_browser():    """Start a browser after waiting for half a second."""    def _open_browser():        webbrowser.open('http://localhost:%s/%s' % (PORT, FILE))    thread = threading.Timer(0.5, _open_browser)    thread.start()def start_server():    """Start the server."""    httpd = make_server("", PORT, test_app)    httpd.serve_forever()if __name__ == "__main__":    open_browser()    start_server()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409847.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号