-1

大家 : ) 我有一个可以像“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>
4

1 回答 1

0

要从您需要使用的 url 获取参数:

q = self.request.get('query')

请参阅入门指南webapp 改进文档

然后您将该参数传递给renderJsonas renderJson(q),在renderJson 第二行中也需要先引用查询字符串(并传递 q 参数)

conn.request('GET', '/?q=%s' % urllib.quote(query))

最后要渲染最终输出,请阅读入门指南

于 2012-08-16T07:29:55.163 回答