2015-01-11 2 views
0

Я довольно новичок в веб-разработке, поэтому, пожалуйста, несите меня. У меня есть веб-страница управления (запущена cherrypy) со значениями состояния, представляющими процесс python, работающий на сервере. Как обновить или нажать новые значения?Обновление поля с CherryPy

Единственный способ, которым я бы сейчас, как бы что-то вроде:

<meta http-equiv="refresh" content="1"> 

, который обновляет всю страницу. Однако я бы предпочел, чтобы обновлялись только необходимые поля. Легко ли это возможно с чистым html соответственно непосредственно cherrypy?

+0

вы можете открыть * websocket * и поговорить с вашим бэкэндом над ним. Или попросите ajax, но это неуклюже. – MightyPork

ответ

2

Оптимальным способом является использование javascript/websockets/ajax.

Но с учетом ограничений «только на стороне сервера». Я считаю, что вы можете это сделать с iframes.

import cherrypy as cp 

MAIN_PAGE = """ 
<html> 
    <body> 
    <h1> Im the main page! </h1> 
    <iframe frameBorder="0" src="/frame"></iframe> 
    </body> 
</html> 
""" 

FRAME_PAGE = """ 
<html> 
    <head> 
    <meta http-equiv="refresh" content="1"> 
    </head> 
    <body> 
    Counter: <strong>{}</strong> 
    </body> 
</html> 
""" 

class Root: 

    def __init__(self): 
     self.counter = 0 

    @cp.expose 
    def default(self): 
     return MAIN_PAGE 

    @cp.expose 
    def frame(self): 
     self.counter += 1 
     return FRAME_PAGE.format(self.counter) 

cp.quickstart(Root()) 

Это действительно перезагрузка полной страницы, но только внутри рамки. Чтобы избежать мигания на iframe, вам понадобится javascript/css.

+0

Благодарим вас за ответ. Я не думал о кадрах. Как это решение влияет на трафик? Я планирую иметь что-то вроде 20 полей, которые должны обновляться асинхронно. –

+0

Это не самый эффективный способ сделать это, но я считаю, что это единственный способ, если вы просто хотите использовать python на сервере. Как я уже говорил, вы должны использовать javascript для того, чтобы делать «правильный путь». 1. Websockets или 2. Ajax-опрос. И о стоимости, у вас будет много запросов, с этим и решением ajax. – cyraxjoe

+0

Okey. Тогда я попробую. Спасибо за уточнение. –