代码之家  ›  专栏  ›  技术社区  ›  tknv

如何编码匹配“/搜索?查询=a'

  •  1
  • tknv  · 技术社区  · 12 年前

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

    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?查询=<*>'在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 回复  |  直到 12 年前
        1
  •  3
  •   dm03514    12 年前

    我认为有几个问题:

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

    您可以更改以获取请求:

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