用Google App Engine+jQuery实现AJAX方式的留言板

标签:Google App Engine, Python, jQuery

这是一个很简单的例子,拿Google的示例代码改的,只是将其弄成AJAX方式而已:
# -*- coding: utf-8 -*-
#因为文件中用到了中文,所以编码写成UTF-8。不过如果只是在本地测试,是可以不用写的。
#此外,如果response里包含unicode数据,且未指定输出字符集,将会自动加上charset=utf-8的header。

import cgi

from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.out.write("""
      <html>
        <head>
          <script src="http://www.google.com/jsapi"></script>
          <script type="text/javascript">
            google.load("jquery", "1.3.1");
            //这里必须结束这个script,否则未加载完就运行下面的代码,导致$不存在
          </script>
          <script type="text/javascript">
            $(document).ready(
              function() {
                $("#submit_msg").click(
                  //点击submit按钮时运行这个函数
                  function() {
                    //由于不需要错误处理,我直接用$.post了,否则要用$.ajax
                    $.post(
                      "/getmsg", //POST到的URL
                      {content: $("#content").val()}, //POST的数据
                      function(respons) {$('#msg').append(respons);}
                      //成功响应执行的函数
                      //respons是服务器返回的响应内容,这里将其直接附加到msg里
                    );
                  }
                )
              }
            );
          </script>
        </head>
        <body>
          <div id="msg"></div>
          <div><textarea id="content" rows="3" cols="60"></textarea></div>
          <div><input type="submit" value="submit" id="submit_msg" />
          <img src="http://code.google.com/appengine/images/appengine-silver-120x30.gif"
          alt="Google App Engine 支持" />
          <!--
          这个图像只是为了表达这是AJAX效果。
          因为一般的提交需要重新载入页面,图像会有个刷新过程;
          但这里不会刷新。
          -->
        </body>
      </html>""")

class Getmsg(webapp.RequestHandler):
  #这个就用于处理上面POST的内容
  def post(self):
    content = self.request.get('content')
    if content:
      self.response.out.write('You wrote:<blockquote><pre>%s</pre></blockquote>'
                            % cgi.escape(content))
                            #cgi.escape用于转义用户输入中的HTML代码标识符
    else:
      self.response.out.write('You wrote nothing.')

application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                      ('/getmsg', Getmsg)],
                                     debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()
为了减少代码数量,我就没有把HTML写在模板里了,也没去用数据库和用户登录。
注释应该都比较好懂的,简单来说就是如下过程:
1.用jQuery的post方法向/getmsg传递content中的内容;
2./getmsg被映射到了Getmsg类上,这个类的post函数将传来的内容又输出了回去;
3.jQuery的post方法接收到响应,把响应内容附加到msg里。

jQuery确实是个很方便的东西啊~

0条评论 你不来一发么↓

    想说点什么呢?