2009-06-03 23 views
5

tôi đã tìm thấy viết bằng python, một máy chủ http rất đơn giản, đó là do_get phương pháp trông như thế này:Tuỳ chỉnh đơn giản máy chủ Python HTTP không phục vụ các file css

def do_GET(self): 
     try: 
      self.send_response(200) 
      self.send_header('Content-type', 'text/html') 
      self.end_headers(); 
      filepath = self.path 
      print filepath, USTAW['rootwww'] 

      f = file("./www" + filepath) 
      s = f.readline(); 
      while s != "": 
       self.wfile.write(s); 
       s = f.readline(); 
      return 

     except IOError: 
      self.send_error(404,'File Not Found: %s ' % filepath) 

Nó hoạt động ok, bên cạnh thực tế - đó là không phục vụ bất kỳ tệp css nào (nó được hiển thị mà không có css). Bất cứ ai có một gợi ý/giải pháp cho quirk này?

Trân trọng, praavDa

+0

Đề xuất nhanh: Google cherrypy. – Triptych

+0

** cảnh báo cũ thread ** Hãy thử lưu trữ các tập tin .css (s) trong cùng một thư mục mà tập tin html của bạn nằm. – noobninja

Trả lời

6

nó dường như được trở về Mimetype html cho tất cả các file:

self.send_header('Content-type', 'text/html') 

Ngoài ra, nó có vẻ là khá xấu. Tại sao bạn quan tâm đến máy chủ sucky này? Nhìn vào cherrypy hoặc dán cho việc triển khai python tốt của máy chủ HTTP và một mã tốt để nghiên cứu.


EDIT: Cố gắng sửa chữa nó cho bạn:

import os 
import mimetypes 

#... 

    def do_GET(self): 
     try: 

      filepath = self.path 
      print filepath, USTAW['rootwww'] 

      f = open(os.path.join('.', 'www', filepath)) 

     except IOError: 
      self.send_error(404,'File Not Found: %s ' % filepath) 

     else: 
      self.send_response(200) 
      mimetype, _ = mimetypes.guess_type(filepath) 
      self.send_header('Content-type', mimetype) 
      self.end_headers() 
      for s in f: 
       self.wfile.write(s) 
+3

Tôi đang sử dụng sucky này, bởi vì nó là chủ đề của dự án của tôi - tôi cần phải viết http máy chủ trong python. Cảm ơn vì sự trả lời. – praavDa

9

Bạn đang phục vụ một cách rõ ràng tất cả các file như Content-type: text/html, nơi bạn cần để phục vụ các file CSS như Content-type: text/css. Xem this page on the CSS-Discuss Wiki để biết chi tiết. Máy chủ web thường có bảng tra cứu để ánh xạ từ phần mở rộng của tệp sang Loại nội dung.

+3

Trong python mô-đun mimetypes có bảng tra cứu –

2

Xem SimpleHTTPServer.py trong thư viện chuẩn cho an toàn, thực hiện saner mà bạn có thể tùy chỉnh nếu bạn cần.

+0

Cảm ơn bạn đã liên kết này - Bây giờ tôi biết thêm một chút về cách tôi có thể viết của riêng mình. – praavDa

Các vấn đề liên quan