2012-06-27 6 views
0

Я создаю веб-сервер на основе python ( Да, python - это плохой выбор для веб-сервера, но это единственный выбор, который у меня есть. Для моей цели есть другой отличный выбор, например PHP, но я ограничен python)baseHTTPserver не может использовать библиотеку javascript

Я использую ProtoVis для некоторой визуализации данных. (А на основе JavaScript инструмент визуализации)

Следующий фрагмент кода работает, если я просто скопировать и вставить их в тестовый файл и переименовать .html (при условии, что у меня есть библиотека protovis извлеченный рядом с ним)

Если вы хочу попробовать, получить его здесь https://github.com/mbostock/protovis/zipball/v3.3.1

<html> 
    <head> 
     <title>Area Chart</title> 
     <link type="text/css" rel="stylesheet" href="ex.css?3.2"/> 
     <script type="text/javascript" src="protovis/protovis.js"></script> 
     <style type="text/css"> 
     #fig { 
      width: 430px; 
      height: 225px; 
     } 
     </style> 
    </head> 
    <body> 
    <div id="center"> 
    <div id="fig"> 
    <script type="text/javascript+protovis"> 

var data = pv.range(0, 10, .1).map(function(x) { 
    return {x: x, y: Math.sin(x) + Math.random() * .5 + 2}; 
    }); 

/* Sizing and scales. */ 
var w = 400, 
    h = 200, 
    x = pv.Scale.linear(data, function(d) d.x).range(0, w), 
    y = pv.Scale.linear(0, 4).range(0, h); 

/* The root panel. */ 
var vis = new pv.Panel() 
    .width(w) 
    .height(h) 
    .bottom(20) 
    .left(20) 
    .right(10) 
    .top(5); 

/* Y-axis and ticks. */ 
vis.add(pv.Rule) 
    .data(y.ticks(5)) 
    .bottom(y) 
    .strokeStyle(function(d) d ? "#eee" : "#000") 
    .anchor("left").add(pv.Label) 
    .text(y.tickFormat); 

/* X-axis and ticks. */ 
vis.add(pv.Rule) 
    .data(x.ticks()) 
    .visible(function(d) d) 
    .left(x) 
    .bottom(-5) 
    .height(5) 
    .anchor("bottom").add(pv.Label) 
    .text(x.tickFormat); 

/* The area with top line. */ 
vis.add(pv.Area) 
    .data(data) 
    .bottom(1) 
    .left(function(d) x(d.x)) 
    .height(function(d) y(d.y)) 
    .fillStyle("rgb(121,173,210)") 
    .anchor("top").add(pv.Line) 
    .lineWidth(3); 

vis.render(); 

    </script> 
    </div> 
    </div> 
    </body> 
</html> 

Однако, если я вернусь выше код в baseHTTPserver, это не похоже на работу. По моему исследованию, похоже, что библиотека на «protovis/protovis.js» не включена должным образом.

if url[0] == "/chart": 
    self.send_response(200) 
    self.send_header("Content-type","text/html") 
    self.end_headers() 
    self.wfile.write(chart()) 
    return 

, где функция chart() возвращает строки выше.

Я работаю с CentOS 6.2 с помощью python 2.6, есть ли что-нибудь особенное в baseHTTPserver, чтобы включить эту библиотеку javascript, которую я использую? Тот же код отлично работал с Apache + PHP, где я просто повторяю их.

Любая идея?

Решение ============================================================================================================================================================ ===

В отличие от Apache + PHP, BaseHTTPServer не будет просто обслуживать все, что вы помещаете в эту папку. Вы должны либо делать это самостоятельно, как описано в Матфее, либо обслуживать protovis.js с другого сервера (возможно, это SimpleHTTPServer, работающий на другом порту). - Василий Faronov

инструкция

Матфея Адамса ниже

То, что я должен был сделать, чтобы решить эту проблему, чтобы добавить еще один метод в do_GET(), который обрабатывает JavaScript файл

if url[0] == "/protovis/protovis.js": 
    f = open("protovis/protovis.js","rb") 
    for each_line in f: 
     self.wfile.write(each_line) 
    return 

который решает проблема.

Спасибо всем за решение, я действительно ценю это

+0

Вы уверены, что это: '