python用http.server实现的http服务器
来源:互联网 发布:淘宝卖什么等级快 编辑:程序博客网 时间:2024/06/08 03:10
import osimport shutilfrom io import StringIOfrom pymongo import MongoClient, ASCENDINGfrom urllib.parse import urlsplit, parse_qsfrom http.server import HTTPServer, BaseHTTPRequestHandlerclient = MongoClient()skindb = client.skindbclass SkinHelpRequestHandler(BaseHTTPRequestHandler):def do_GET(self):url = urlsplit(self.path)qs = parse_qs(url.query)print(url.query)print(qs)if url.path == "/":self.showall()elif url.path == "/tag":self.showtag(qs["key"][0])elif url.path == "/common.css":self.staticfile("common.css")else:self.error_404()def error_404(self):rsp = "Not Found"rsp = rsp.encode("gb2312")self.send_response(404)self.send_header("Content-type", "text/html; charset=gb2312")self.send_header("Content-Length", str(len(rsp)))self.end_headers()self.wfile.write(rsp)def staticfile(self, fname):with open(fname, "rb") as f:self.send_response(200)self.send_header("Content-type", "text/css; charset=gb2312")self.send_header("Content-Length", str(os.path.getsize(fname)))self.end_headers()shutil.copyfileobj(f, self.wfile)def showall(self):rsp = StringIO()rsp.write("""<html><head><title>皮肤库帮助</title></head><link rel="stylesheet" type="text/css" href="common.css" /><body>""")rsp.write("<p>所有标记:</p><div class=\"clearfix\">")# 添加所有标记global skindbfor n in skindb.nodes.find({}, {"name":1, "_id":0}).sort("name", ASCENDING):rsp.write("<a href=\"/tag?key=%s\">%s</a><span class=\"tagpadding\">、</span>" % (n["name"], n["name"]))rsp.write("</div><br /><p>所有属性:</p><div class=\"clearfix\">")# 添加所有属性for n in skindb.attrs.find({}, {"name":1, "_id":0}).sort("name", ASCENDING):rsp.write("<a href=\"/attr?key=%s\">%s</a><span class=\"tagpadding\">、</span>" % (n["name"], n["name"]))rsp.write("</div></body></html>")bytes_rsp = rsp.getvalue().encode("gb2312")self.send_response(200)self.send_header("Content-type", "text/html; charset=gb2312")self.send_header("Content-Length", str(len(bytes_rsp)))self.end_headers()self.wfile.write(bytes_rsp)passdef showtag(self, tag):rsp = StringIO()rsp.write("""<html><head><title>皮肤库帮助 - 标记:%s</title></head><link rel="stylesheet" type="text/css" href="common.css" /><body>""" % tag)global skindbfor n in skindb.nodes.find({"name": tag}, {"_id":0}).sort("name", ASCENDING):rsp.write("<p>标记:%s</p><br/>" % tag)rsp.write("<p>子标记:</p><div class=\"clearfix\">")for k in n["subnodes"]:rsp.write("<a href=\"/tag?key=%s\">%s</a><span class=\"tagpadding\">、</span>" % (k, k))rsp.write("</div><br /><p>标记属性:</p><div class=\"clearfix\">")for k in n["attrs"]:rsp.write("<a href=\"/attr?key=%s\">%s</a><span class=\"tagpadding\">、</span>" % (k, k))rsp.write("</div><br /><p>文件:</p>")for k in n["occurs"]:rsp.write("<p class=\"clearfix\"><a href=\"/static/%s\">%s</a></p>" % (k, k))rsp.write("</body></html>")bytes_rsp = rsp.getvalue().encode("gb2312")self.send_response(200)self.send_header("Content-type", "text/html; charset=gb2312")self.send_header("Content-Length", str(len(bytes_rsp)))self.end_headers()self.wfile.write(bytes_rsp)if __name__ == '__main__':server_address = ('', 52000)httpd = HTTPServer(server_address, SkinHelpRequestHandler)httpd.serve_forever()
话说,不用框架的话,写起来还是蛮辛苦的。。。
0 0
- python用http.server实现的http服务器
- Python 实现一个简单的http服务器
- Python实现简单的HTTP服务器
- Python 实现一个简单的http服务器
- Python实现简单的http服务器程序
- Python实现简单的HTTP服务器
- Python 实现一个简单的http服务器
- Python 实现一个简单的http服务器
- python socket 实现的简单http服务器
- python socket 实现的简单http服务器
- Python实现简单HTTP Server
- 轻量级的服务器http-server
- python 简单的Http服务器
- python的简易HTTP服务器
- C++ 实现 HTTP Server 开发配置服务器
- Python的学习(十四)---- 实现简单的HTTP服务器
- 用Netty实现的简单HTTP服务器
- 用Netty实现的简单HTTP服务器
- android编译错误之“Hardware acceleration can only be used with a single UI thread”,硬件加速
- 为ORACLE添加数据文件(裸设备)
- 触摸手势以及图形变换(UIGestureRecognizer, CGAffineTransform)
- 功耗调试之如何调试功耗(二)
- CentOS分区方案
- python用http.server实现的http服务器
- 单点登录 UCenter 分析
- 遍历安装卸载APK(可以用于基于monkeyrunner渠道包测试)
- win8.1 下activex编程遇到的问题之 “控件已加载 但对DllRegisterServer的调用失败”
- Java数据转换整理
- WireShark 过滤语法
- Career Choices You Will Regret In 20 Years
- 亿级Web系统搭建——单机到分布式集群
- Sybase 还原过程中遇到的问题 20141219