1

我想按查询搜索,如下所示。

http://localhost:8080/search?query=a

html

...
    <form class="navbar-form navbar-right" name="searchform" action="/search" method="post">
    <div class="form-group">
        <input class="form-control" placeholder="Any keyword" type="text" name="query" />
    </div>
        <button class="btn btn-success" type="submit">Search</button>
    </form>  
...

路线.py

...
import handlers

_routes = [
    RedirectRoute('/search?query=<.*>', handlers.SearchHandler, name='search', handler_method='post')
]
...

处理程序.py

...
class SearchHandler(BaseHandler):
    def get(self):
        params = {
            'query': '',
            'offset': '0'
        }
        self.doSearch(params)

    def doSearch(self, params):
        docs = search.Index(name='indexed_doc')
        query = params.get('query', '')
        try:
            offset_value = int(params.get('offset' or 0))
        except ValueError:
            offset_value = 0
        try:
            search_query = search.Query(...

结果针对:'/search?query=<.*>' at routes.py
error_handler.py:71] 错误 403:拒绝访问此资源。
module.py:593] 默认值:“POST /search HTTP/1.1”403 2555

结果针对:'/search(.*)' at routes.py
error_handler.py:71] 错误 404:找不到资源。
module.py:593] 默认值:“POST /search HTTP/1.1”404 2543

我怎样才能为它编码正则表达式?或者有什么问题?
提前致谢。

4

1 回答 1

3

我相信有几个问题:

  1. 你真的想要一个RedirectRoute吗?是否有必要在发布请求时重定向?
  2. 当您发布数据时,数据 ( query) 应存储在请求正文中,而不是 url 中,例如/search?query=a+query
  3. 在我见过的许多项目中,url 正则表达式不包含 GET 参数,通常由处理程序来强制执行某些 get 参数,我不知道如果有多个参数是否确保 GET 参数顺序......

您可以更改以获取请求:

     <form class="navbar-form navbar-right" name="searchform" action="/search" method="get">

    <div class="form-group">
        <input class="form-control" placeholder="Any keyword" type="text" name="query" />
    </div>
        <button class="btn btn-success" type="submit">Search</button>
    </form>  

import handlers

_routes = [
    ('/search', handlers.SearchHandler, name='search')
]

于 2013-08-24T13:22:48.773 回答