大家 : ) 我有一个可以像“http://key.xxxxxx.org:10093/?q=”这样搜索的数据库,当在 url 中输入关键字(=mark 后面)时,它可以显示很多 json 数据。
现在我在 GAE 上使用 webapp2 编写了一个简单的 webapp:在 /search 页面上,当我输入关键字时,它可以解析 /result 页面上的 jsondata 内容。这是我的部分代码:
# -*- coding: utf-8 -*-
import os
import re
import httplib
import json
import urllib
from string import letters
import webapp2
import jinja2
template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir),
autoescape = True)
def render_str(template, **params):
t = jinja_env.get_template(template)
return t.render(params)
def renderJson(query):
conn = httplib.HTTPConnection('xxx.xxxxx.org:10093')
conn.request('GET', '/?q=%s' % urllib.quote_plus(query))
res = conn.getresponse()
data = res.read()
j = json.loads(data)
results = []
result = j['data']['group'][0]['resultitem']
for l in result:
for k,v in l.items():
if k == 'word':
results.append(l[k])
return results
class BaseHandler(webapp2.RequestHandler):
def render(self, template, **kw):
self.response.out.write(render_str(template, **kw))
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
class Search(BaseHandler):
def get(self):
self.render("search.html")
def post(self):
q = self.request.get('query')
if q:
self.redirect('/result/?q='+query)
class Result(BaseHandler):
def get(self):
q = self.request.get('query')
self.render('result.html', query = q, result = renderJson(q))
app = webapp2.WSGIApplication([
('/search', Search),
('/result', Result)
],
debug=True)
在 search.html 中,我写道
<input type="text" name="q" value="{{query}}"></input>
在 result.html 中
<p>{{result}}</p>