2014-10-25 2 views
0

Я пытаюсь создать простой веб-сервер, который получает координаты GPS через POST-запросы, а затем показывает их на веб-странице. Я получаю только точные координаты с моего телефона, он печатает их в окне сервера, поэтому я понимаю, что переменные «lat» и «lon» должны были быть обновлены с фактическими координатами, но когда я открываю свой браузер, я получаю только " тест тест».. Извините за мой нуб вопрос, но я новичок в Python, и я не могу понять, почему класс MyHandler не может получить доступ к переменным .. Это мой код до сих пор:Переменные, не обновленные из класса baseHTTPserver

PORT = 5050 
lat="test" 
lon="test" 
speed="test" 


def serv_responseGET(s): 
    s.send_response(200) 
    s.send_header("Content-type", "text/html") 
    s.end_headers() 
    s.wfile.write(lat, lon) 

def serv_responsePOST(s):  
    s.send_response(200) 
    s.send_header("Content-type", "text/html") 
    s.end_headers() 
    s.wfile.write(' '); 

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): 
    def do_POST(s): 
     print s.path 
     length = int(s.headers['Content-Length']) 
     post_data = urlparse.parse_qs(s.rfile.read(length).decode('utf-8')) 
     for key, value in post_data.iteritems(): 
      if key=="lat": 
       lat=''.join(value) 
      if key=="lon": 
       lon=''.join(value) 
      if key=="speed": 
       speed=''.join(value) 
     print datetime.datetime.now() 
     print "lat=", lat 
     print "lon=", lon 
     print "spd=", speed 
     serv_responsePOST(s) 


    def do_GET(s): 
     print s.path 
     serv_responseGET(s) 


if __name__ == '__main__': 
    server_class = BaseHTTPServer.HTTPServer 
    httpd = server_class(('', PORT), MyHandler) 
    print time.asctime(), "Server Starts - %s:%s" % ('', PORT) 
    httpd.serve_forever() 

и это то, что я получаю в окне python после POST с моего телефона:

/ 
2014-10-25 16:23:20.598733 
lat= 37.971649 
lon= 23.727053 
spd= 0.0 
192.168.2.50 - - [25/Oct/2014 16:23:20] "POST/HTTP/1.1" 200 - 

ответ

0

В P ython, когда вы назначаете переменную внутри процедуры, предполагается, что вы хотели создать локальную переменную и игнорировать глобальные переменные. Чтобы назначить глобальные переменные, вам необходимо сначала объявить их. поэтому просто добавьте строку

global lat, lon, speed 

К началу вашего do_POST и я верю, что это исправит.

+0

, который решил! Большое спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^