Я работаю над созданием веб-сайта вместе с GAE и каналом api для отображения и обработки данных в реальном времени от робота, над которым я работаю. Я довольно новичок в веб-разработке и python в целом, но мне кажется, что этот код должен работать. Я сделаю его более причудливым, как только я получу его работу (запись данных в базу данных, фактическую обработку данных и т. Д.), но сейчас я просто хочу, чтобы он отображал самую последнюю информацию о переменной «val» из почтового запроса, отправленного с подключенной к Интернету платы на роботе. Надеемся, это будет полезно для всех, кто хочет отображать данные в реальном времени с помощью канала api.Что случилось с кодом моего канала api?
Сейчас я показываю шаблон с полем ввода, установленным для отправки запроса на отправку на страницу. Вместо того, чтобы обновлять первую страницу с текущим значением при представлении, я получаю пустой экран. Я не уверен, действительно ли моя проблема связана с кодом api канала или функцией java для обновления отображаемого значения.
код Python:
import os
import webapp2
import jinja2
import json
import logging
from google.appengine.ext import db
from google.appengine.api import channel
from google.appengine.api import users
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True)
channels = []
class MainPage(webapp2.RequestHandler):
def get(self):
user = users.get_current_user()
if not user:
self.redirect(users.create_login_url(self.request.uri))
return
nickname = user.nickname()
clientid = user.user_id()
channel_token = channel.create_channel(clientid)
channels.append(channel_token)
template_values = {'channel_id': channel_token, 'nickname': nickname}
template = jinja_env.get_template('front.html')
self.response.out.write(template.render(template_values))
def post(self):
value = self.request.get("value")
if value:
jsn = json.dumps({"val": value})
for i in range(len(channels)):
channel.send_message(channels[i], jsn)
app = webapp2.WSGIApplication([
('/', MainPage)
], debug=True)
Соответствующая часть шаблона HTML:
<form method="post">
<label>
<div>Title</div> <input type="text" name="value" value="{{value}}">
</label>
<br>
<input type="submit">
<div class="error">{{error}}</div>
</form>
<hr>
<script>
onMessage = function myFunction(message)
{
document.getElementById("val").innerHTML=message;
}
var token = '{{ channel_id }}';
var channel = new goog.appengine.Channel(token);
var socket = channel.open();
socket.onmessage = onMessage(message.val);
</script>
<p id="val">No value to display</p>
</body>
Спасибо заранее.