간단한 웹 앱을 제작하기 위해 토네이도 사용법을 배우고 있습니다. 나는 내가 데이터베이스에 업데이트하고있어 가치가있는 템플릿 변수를 업데이트하는 방법을 알아낼 수 없기 때문에 조금 붙어 그러나템플릿의 실시간 업데이트
내가 지금까지 무엇을 가지고 :
토네이도 코드 :
import json
import ast
from tornado.ioloop import IOLoop
import tornado.options
from tornado import web, gen
from tornado.httpserver import HTTPServer
from tornado.web import Application
from tornado.websocket import WebSocketHandler
import psycopg2
import psycopg2.extensions
conn = psycopg2.connect('dbname= dname user=user password=pass host=localhost port=5432')
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
class MainHandler(web.RequestHandler):
@gen.coroutine
def get(self):
self.render('index.html', result='test')
def poll(fd ,ev):
state = conn.poll()
if state == psycopg2.extensions.POLL_OK:
if conn.notifies:
notify = conn.notifies.pop(0)
dict_notify = json.loads(notify.payload)
print(dict_notify['new_value']['value'])
def listen(channel):
cursor = conn.cursor()
cursor.execute('LISTEN test_channel;')
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers = [(r'/', MainHandler)], debug = True)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen('8888')
io_loop = IOLoop.instance()
io_loop.add_handler(conn.fileno(), poll, io_loop.READ)
listen()
io_loop.start()
내 템플릿은 다음과 같습니다 : 이제
<!DOCTYPE html>
<html lang="en">
<head>
<title>Index</title>
</head>
<body>
<div>{{ result }}</div>
</body>
</html>
, 내가 w 개미는 내 템플릿에서 {{result}} 으로 이동하기 위해 pool()에서 가져온 값입니다. pool() 함수는 항상 데이터베이스 (postgresql db)에서 업데이트 한 값을 인쇄하지만 템플릿에서 가져 오는 방법을 알 수는 없습니다. 어떤 아이디어?
빠른 해결책은 전역 변수에 결과를 저장 한 다음 'render' 메소드에 전달하는 것입니다. – martinarroyo