如何编码匹配'/ search?query = a'

时间:2013-08-24 12:29:41

标签: python regex google-app-engine webapp2

我想通过查询进行搜索,如下所示。

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>  
...

routes.py

...
import handlers

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

handlers.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=<.*>'在routes.py
error_handler.py:71]错误403:此资源拒绝访问 module.py:593]默认:“POST / search HTTP / 1.1”403 2555

结果反对:routes.py的'/ search(.*)' error_handler.py:71]错误404:无法找到资源 module.py:593]默认:“POST / search HTTP / 1.1”404 2543

我如何为它编码正则表达式?或者出了什么问题? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

我相信有几个问题:

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

  4. 您可以更改以获取请求:

         <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')
    ]