我想在我的GWT应用程序中使用GAE Channel API(Python 2.7)(使用GWT-GAE-Channel),我无法弄清楚如何将在服务器端Python上创建的令牌放入我的GWT app(此示例中为“index.html”),以便客户端GWT可以打开该频道。我的服务器端代码目前如下所示:
import webapp2
import jinja2
import os
import uuid
from google.appengine.ext import db
from google.appengine.api import users
from google.appengine.api import channel
jinja_environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
class MainPage(webapp2.RequestHandler):
#The main page returns the GWT application
def get(self):
#Create a token when the GWT app is loaded to create a channel to return data
client_id = uuid.uuid4().hex
token = channel.create_channel(client_id, duration_minutes=None)
context = {} #There are currently no template variables in the GWT app
template = jinja_environment.get_template('index.html')
self.response.out.write(template.render(**context))
class A_handler(webapp2.RequestHandler):
def post(self):
client_id = self.request.get('id')
channel.send_message(client_id, message)
app = webapp2.WSGIApplication([('/', MainPage),
('/A', A_handler)],
debug=True)
我有与this question相同的GWT-GAE-Channel客户端代码示例;但是,从GWT ChannelFactory.createChannel函数服务器接收“令牌”的GWT代码是什么? python服务器可以将此令牌作为模板变量发送到GET请求中的GWT html,还是需要通过RPC或其他方法发送?
答案 0 :(得分:0)
感谢this thread,this tutorial以及了解javascript,我能够解决这个问题。
我使用的方法是发送令牌'作为GWT html文件的上述python服务器端代码中的模板变量:
context = {'token': token}
template = jinja_environment.get_template('index.html')
self.response.out.write(template.render(context))
并将以下内容添加到GWT html文件中:
<script type="text/javascript">
var token = "{{ token }}";
</script>
在Eclipse(GWT)中,我添加了以下JSNI函数来读取javascript变量:
private native String get_token() /*-{
return $wnd.token
}-*/;
然后我在Java OnModuleLoad中包含以下函数来读取javascript变量:
String token = get_token().toString();
如果您要从javascript发送多个变量,则可以使用链接教程中所述的字典。