我有一个带有URL的路由器,根据传递给query
参数的内容,使用该查询执行urlfetch。
query
的示例可以是:
php-mysql
desarrolladores-php-mysql
recepcionista-en-barcelona
recepcionista-hotel-turno-noche/2
(查询:recepcionista-hotel-turno-noche;第2页)我一直在经历一些非常奇怪的行为。当query
很长(大约27个字符或更多)时,每当我尝试进入第二页时,都需要在dev_appserver上处理请求,并且在生产中遇到DeadlineExceededError。这很奇怪,因为我总是可以获取第一页,但在query
很长之后永远不会获取第一页。
如果你查看我的路由器代码,我已经添加了" print"查看代码是否到达此部分,甚至在设置路由器之前。无论何时加载都需要很长时间,日志甚至不打印该行,就好像它在代码的这一部分之前被卡住了一样,这在代码中很早就可以得到它。
可以使用SDK吗?
from webapp2 import WSGIApplication, Route
from search.get_ads import URI_QUERY_REGEX # a simple variable who's values is: r"([a-z0-9-#,&áéíúóñäëïöüàèìòùç']+)"
import os
print "Router" # This line is for debugging
app = WSGIApplication([
Route(r'/', handler='app.home.Home'),
Route(r"/<query:%s+>" % URI_QUERY_REGEX, handler='app.serp.Search'),
Route(r"/<query:%s+>/<page:[\d]>" % URI_QUERY_REGEX, handler='app.serp.Search'),
],
debug=True if config['env'] == 'dev' else False, config=config
)
请注意,有两个URL可以指向搜索处理程序:
r"/<query:%s+>"
- &gt;第一页结果r"/<query:%s+>/<page:[\d]>"
- &gt;第二页,进一步def get(self, query, page=0):
q = query.split('-')
# ...
# Does stuff to clean query and sends a urlfetch to fetch ads according to query. I dont think the issue lies here...
答案 0 :(得分:0)
我认为您的所有搜索请求都与/<query:%s+>
正则表达式匹配,因此无法访问/<query:%s+>/<page:[\d]>
。
您只需要切换最后两个Route(..)条目:
app = WSGIApplication([
Route(r'/', handler='app.home.Home'),
Route(r"/<query:%s+>/<page:[\d]>" % URI_QUERY_REGEX, handler='app.serp.Search'),
Route(r"/<query:%s+>" % URI_QUERY_REGEX, handler='app.serp.Search'),
],
debug=True if config['env'] == 'dev' else False, config=config
)
答案 1 :(得分:0)
管理来解决这个问题。显然这是字符串替换。我试着简单地连接字符串,现在工作正常。
uri_query_1st_page = r"/<query:" + URI_QUERY_REGEX + ">"
uri_query_more_pages = uri_query_1st_page + r"/<page:[\d]>"
## App Routes ##
app = WSGIApplication([
Route(r'/', handler='app.home.Home'),
Route(uri_query_1st_page, handler='app.serp.Search'),
Route(uri_query_more_pages, handler='app.serp.Search'),
],
debug=True if config['env'] == 'dev' else False, config=config
)