首页 > 代码库 > 利用python BaseHTTPServer 开发的图片浏览小工具

利用python BaseHTTPServer 开发的图片浏览小工具

最近从网上爬了点图片,为了方便浏览就写了这么个小工具。直接上码,解释偏少,代码没有优化,实现比较简略。仅作记录之用。

1.httpd.py

 1 # encoding: UTF-8 2 #-*-coding:utf-8-*- 3 import BaseHTTPServer 4 import config 5 import urllib 6 from CreatHtml import CreateHtmlClass 7 import os 8  9 #登录页面代码,做个简单的访问权限控制10 login_html =‘‘‘<html>11 <title>Directory listing for </title>12 <body>13 <center>14 <h2> login</h2>15 <hr>16     <form action="/login" method="post">17     <p>UserName: <input type="text" name="une" /></p>18     <p>PassWord: <input type="password" name="pwd" /></p>19     <input type="submit" value="http://www.mamicode.com/Login" />20     </form>21 <hr>22 </center>23 </body>24 </html>‘‘‘25 26 27 ct_obj = CreateHtmlClass()28 29 class EasyWebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):30     def do_GET(self):31         #if self.path == ‘/‘:32         print self.client_address33         #print self.headers34         if self.headers.has_key("Cookie"):35             print self.headers["Cookie"]36             err_code,content_type,content = ct_obj.root_html(self.path)37             self.send_response(err_code)38             self.send_header("Content-type", content_type)39             self.send_header("Content-Length", str(len(content)))40             self.end_headers()41             self.wfile.write(content)42         else:43             print "not login"44             self.send_response(200)45             self.send_header("Content-type", "text/html; charset=utf-8")46             self.send_header("Content-Length", str(len(login_html)))47             self.end_headers()48             self.wfile.write(login_html)49 50     def do_POST(self):51         print self.path52         if self.path == "/login":53             datas = self.rfile.read(int(self.headers[content-length]))54             datas = urllib.unquote(datas).decode("utf-8", ignore)55             #datas = transDicts(datas)56             if datas == "une=xxx&pwd=xxx":57                 err_code,content_type,content = ct_obj.root_html("/")58                 self.send_response(err_code)59                 self.send_header("Content-type", content_type)60                 self.send_header("Content-Length", str(len(content)))61                 self.send_header("Set-Cookie","JSESSIONID=JIGUGUJICHACHACHA;Path=/")62                 self.end_headers()63                 self.wfile.write(content)64         else:65             self.send_response(404)66             self.send_header("Content-type", "text/html; charset=utf-8")67             self.send_header("Content-Length", 3)68             self.end_headers()69             self.wfile.write("404")70         71 72 73 server = BaseHTTPServer.HTTPServer((‘‘,18080),EasyWebRequestHandler)74 print EasyWebServer start...75 server.serve_forever()

2. CreatHtml.py

 

  1 # encoding: UTF-8  2 #-*-coding:utf-8-*-  3 import os  4 import config  5 from PIL import Image  6   7   8 image_dic = {  9     png:image/png, 10     jpg:image/jpeg, 11     jpeg:image/jpeg, 12     bmp:image/bmp, 13 } 14  15 class CreateHtmlClass: 16     """docstring for CreateHtml""" 17     def __init__(self): 18         self.root = config.root 19  20 #    def check_image(self,path): 21 #        type_pos = path.rfind(‘.‘) 22 #        type_str = path[type_pos+1:] 23 #        if not image_dic.has_key( type_str.lower() ): 24 #            return False,0 25 # 26 #        im = Image.open(path) 27 #        width = im.size[0] 28 #        height = im.size[1] 29 #        ratio = width/1400.0 30 #        if  ratio > 1.0 : 31 #            return True,str(int(height/ratio)) 32 #        else: 33 #            return False,1 34     def check_image(self,path): 35         type_pos = path.rfind(.) 36         type_str = path[type_pos+1:] 37         if not image_dic.has_key( type_str.lower() ): 38             return False,0 39         try: 40             im = Image.open(path) 41             width = im.size[0] 42             height = im.size[1] 43             ratio = width/1400.0 44             if  ratio > 1.0 : 45                 return True,str(int(height/ratio)) 46             else: 47                 return False,1 48         except Exception, e: 49             print e 50             return False,1 51          52     def creat_dir_html(self,path): 53         if path == /: 54             path = "" 55         local_path = self.root + path 56         content = "" 57         local_path_about = local_path + /about.info 58         if os.path.exists(local_path_about): 59             f = open(local_path_about,r) 60             h2 = f.readline() 61             f.close() 62  63             content = <title>Directory listing for + h2+</title><body><center><h2>+ h2 +</h2><hr><ul> 64             for f in os.listdir(local_path): 65                 if str(f) != about.info: 66                     is_image,height = self.check_image(local_path + / + str(f)) 67                     if is_image: 68                         content += <li style=" list-style:none"><img src="http://www.mamicode.com/ + path + / + str(f) + " alt=" + str(f) + " width="1400" height="+ height +"/></li><br/><br/> 69                     elif height == 1: 70                         content += <li style=" list-style:none"><img src="http://www.mamicode.com/ + path + / + str(f) + " alt=" + str(f) + " /></li><br/><br/> 71             content += </ul></center><hr></body></html> 72         else: 73             content = <title>Directory listing for + path+</title><body><h2>+ path + /</h2><hr><ul> 74             for f in os.listdir(local_path): 75                 content += <li><a href="http://www.mamicode.com/ + path + / + str(f) + "> + str(f) + </a></li> 76             content += </ul><hr></body></html> 77         return content 78  79     def read_local_file(self,path): 80         f = open(path,rb) 81         read = f.read() 82         f.close() 83         #print path 84         return read 85  86     def write_local_file(self,path,content): 87         f = open(path,w) 88         f.write(content) 89         f.close() 90  91     def get_dir_html(self,path,refresh_pos): 92         content = None 93         content_type = None 94         error_code = 200 95         local_path = self.root + path 96         path_name_pos = path.rfind(/) 97         path_name = path[path_name_pos+1:] 98         local_path_html = local_path + /+path_name+.html 99         print local_path_html100         content_type = "text/html; charset=utf-8"101         if path == / :102             content = self.creat_dir_html(path)103         elif refresh_pos == -1 and os.path.exists(local_path_html):104             content = self.read_local_file(local_path_html)105         else:106             content = self.creat_dir_html(path)107             self.write_local_file(local_path_html,content)108 109         return error_code,content_type,content110 111     def get_404_html(self):112         content = "404"113         error_code = 404114         content_type = "text/html; charset=utf-8"115         return error_code,content_type,content116 117     def get_file_content(self,path):118         if path==/:119             path = ""120         local_path = self.root + path121         type_pos = path.rfind(.)122         type_str = path[type_pos+1:]123         content_type = "*/*"124         print type_str125         error_code = 200126         if image_dic.has_key(type_str.lower()):127             content_type = image_dic[type_str.lower()]128 129         if os.path.exists(local_path):130             content = self.read_local_file(local_path)131         else:132             return self.get_404_html()133         return error_code,content_type,content134 135     def root_html(self,path):136         refresh_pos = path.find(refresh)137         if refresh_pos != -1:138             path = path[0:refresh_pos-1]139         content = None140         content_type = None141         error_code = None142         local_path = self.root + path143 144         145         if os.path.isdir(local_path):146             error_code,content_type,content = self.get_dir_html(path,refresh_pos)147         else:148             error_code,content_type,content = self.get_file_content(path)149 150         return error_code,content_type,content

 3.config.py

1 # encoding: UTF-82 #-*-coding:utf-8-*-3 root="E:/"

 

使用细节:

1.注意在存放图片文件夹内新建一个about.info 的文件,内部填写的是图片简介(utf-8)编码保存

利用python BaseHTTPServer 开发的图片浏览小工具