python 搭建一个http服务的小例子

一、创建Server

  1.Dos 命令

    python -m BaseHTTPServer [port]

    

    默认端口是8000,

  2.Python 脚本启动   

#coding:utf-8
'''
Created on 2018��10��29��

@author: Administrator
'''
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import MySQLdb
from sqlalchemy import create_engine
import pandas as pd
import json

def handleReq(path):
    print path
    #http://127.0.0.1:8000/itype=90&market=0&code=000001&startNum=0&size=100&shtTQ=1&ptype=0
    #解析URL带的请求参数
    reqParam = {}
    allReq = path.split('/')
    if len(allReq) > 1:
        req = allReq[1].split('&')
        for strParam in req:
            param = strParam.split('=')
            if len(param) > 1:
                reqParam[param[0]] = param[1]
    
    gpcode = ""
    if reqParam.has_key("market"):
        strMarket = ""
        if reqParam["market"] == '0':
            strMarket = "SZ"
        elif reqParam["market"] == '1':
            strMarket = "SH"
        
        if reqParam.has_key("code"):
            strCode = reqParam["code"]
            
        if len(strMarket) > 0:
            gpcode = strMarket + strCode
            
    conn = create_engine("mysql://root:123456@172.16.8.110/quant?charset=utf8")
    sql = "select * from quant_stk_calc_d_fct_kdj where gscode = 'FCT_KDJ' and gpcode = '{0}' order by ymd desc limit {1},{2}".format(gpcode, reqParam["startNum"], reqParam["size"])
    dfR = pd.read_sql(sql,conn)
    
    datas = []
    for i in range(0,len(dfR["ymd"])):
        date = int(dfR["ymd"][i])
        print type(date)
        k = round(dfR["f1"][i], 4)
        d = round(dfR["f2"][i], 4)
        j = round(dfR["f3"][i], 4)
        dictData = {"iDate":date,"mField":{"K":k, "D":d, "J":j}}
        datas.append(dictData)
    
    return datas
    
class HTTPHandle(BaseHTTPRequestHandler):  
    def do_GET(self):
        if self.path != "/favicon.ico":
            print "path:",self.path

            datas = handleReq(self.path) #处理URL请求参数,根据参数获取相应数据
            jsonStr = json.dumps(datas)    
            print jsonStr
        
            self.protocol_version = "HTTP/1.1"       
            self.send_response(200)        
            self.send_header("Content-type", "application/json")  
            self.end_headers()     
            self.wfile.write(jsonStr)
            
        
def startServer():
    httpServer = HTTPServer(("127.0.0.1", 8000), HTTPHandle)
    httpServer.serve_forever()
    
if __name__ == '__main__':
    startServer()

  

二、浏览器访问

    服务开启后,在浏览器输入网址访问服务器资源

    http://127.0.0.1:8000/itype=90&market=0&code=000001&startNum=0&size=100&shtTQ=1&ptype=0

 

效果:

 

BaseHTTPServer模块说明,参见:http://blog.sina.com.cn/s/blog_9e9f16d10102x7fc.html

报错:json 报错'xxx is not JSON serializable'的处理方法,参见:https://www.cnblogs.com/SZxiaochun/p/9875050.html

 

另参见:https://www.jianshu.com/p/4221c2b835a3

posted @ 2018-10-30 09:38  那一剑的風情  阅读(5023)  评论(0编辑  收藏  举报