zoukankan      html  css  js  c++  java
  • Python搭建Web服务器,与Ajax交互,接收处理Get和Post请求的简易结构

    用python搭建web服务器,与ajax交互,接收处理Get和Post请求;简单实用,没有用框架,适用于简单需求,更多功能可进行扩展。

    python有自带模块BaseHTTPServer、CGIHTTPServer、SimpleHTTPServer,详细功能可参考API

    前台html:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <title>test</title>
     5     </head>
     6     <body>
     7         <h1>test</h1>
     8         <p>this is a test page!</p>
     9         <button onclick="get()">click</button>
    10         <div id="result"></div>
    11         <script src="libsjquery-3.2.1.min.js"></script>
    12         <script>
    13             function get(){
    14                 //alert("test");
    15                 $.ajax({
    16                     url:"BaseInfo",
    17                     data:{id:123,name:"xiaoming"},
    18                     success:function(e){
    19                         $("#result").html(e);
    20                 }})
    21             }
    22         </script>
    23     </body>
    24 </html>

    python代码:

     1 #!coding:utf8
     2 import BaseHTTPServer
     3 import CGIHTTPServer
     4 import SimpleHTTPServer
     5 import SocketServer
     6 import urllib
     7 import io
     8 import shutil
     9 
    10 PORT=8000
    11 
    12 #定义数据处理模块--此部分可放于外部引用文件
    13 class dataHandler():
    14     #接口分发
    15     def run(self,path,args):
    16         index = path.replace("/","")
    17         switch={
    18             "BaseInfo": self.getBaseInfo,
    19             "Monitor": self.getMonitor
    20             }
    21         return switch[index](args)
    22     #接口具体实现
    23     def getBaseInfo(self,args):
    24         return "BaseInfo:"+args
    25     def getMonitor(self,args):
    26         return "Monitor"+args
    27 
    28 #服务环境搭建
    29 class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    30     def do_GET(self):  
    31         mpath,margs=urllib.splitquery(self.path) # ?分割
    32         if margs==None:
    33             SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
    34         else:
    35             self.do_action(mpath, margs) 
    36     def do_POST(self): 
    37         mpath,margs=urllib.splitquery(self.path)
    38         datas = self.rfile.read(int(self.headers['content-length']))
    39         self.do_action(mpath, datas)
    40     #请求处理方法
    41     def do_action(self, path, args):
    42         dh = dataHandler()
    43         result = dh.run(path, args)
    44         self.outputtxt(result)
    45     #数据返回到前台
    46     def outputtxt(self, content):
    47         #指定返回编码
    48         enc = "UTF-8"
    49         content = content.encode(enc)          
    50         f = io.BytesIO()
    51         f.write(content)
    52         f.seek(0)  
    53         self.send_response(200)  
    54         self.send_header("Content-type", "text/html; charset=%s" % enc)  
    55         self.send_header("Content-Length", str(len(content)))  
    56         self.end_headers()  
    57         shutil.copyfileobj(f,self.wfile)
    58         #SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) 
    59 
    60 #web服务主程序
    61 httpd = SocketServer.TCPServer(("", PORT), ServerHandler) 
    62 print "serving at port", PORT 
    63 httpd.serve_forever() 

    部分代码内容参考网友,整理仅供学习交流,欢迎留言交流。

  • 相关阅读:
    [ERR] Node 10.211.55.8:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    PAT A1137 Final Grading (25 分)——排序
    PAT A1136 A Delayed Palindrome (20 分)——回文,大整数
    PAT A1134 Vertex Cover (25 分)——图遍历
    PAT A1133 Splitting A Linked List (25 分)——链表
    PAT A1132 Cut Integer (20 分)——数学题
    PAT A1130 Infix Expression (25 分)——中序遍历
    PAT A1142 Maximal Clique (25 分)——图
    PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
    PAT A1140 Look-and-say Sequence (20 分)——数学题
  • 原文地址:https://www.cnblogs.com/fanlu/p/8038169.html
Copyright © 2011-2022 走看看