python瓶框架后重定向

时间:2014-10-08 20:43:09

标签: python http post bottle

我正在编写一个简单的前端网页,它会采用一串单词并返回一个单词表计数。现在我可以查询字符串并将结果发布在同一页面上。但是,我想重定向并将结果发布到另一个页面上,应该是@post(/'result')

下面是我的代码,然而,它一直给我一个错误说:例外:

AttributeError  ("'NoneType' object has no attribute 'split'",)
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/bottle.py", line 862, in _handle
    return route.call(**args)
  File "/Library/Python/2.7/site-packages/bottle.py", line 1729, in wrapper
    rv = callback(*a, **ka)
  File "frontEnd.py", line 16, in result
  File "frontEnd.py", line 23, in query
    for word in keyString.split():
AttributeError: 'NoneType' object has no attribute 'split'

我应该更改哪些内容,以便将结果表发布到重定向的页面/结果上,而不会导致错误?

@get('/')
def search():
    return '''<h1>Search</h1><form action="/" method="post"> Keyword:<input name="keywords"type="text"/><input value="GO" type="submit" /> </form>'''

@post('/')
def do_search():
    redirect('/result')

@post('/result')
def result(wc,keyString):
    keyString = request.forms.get('keywords')
    wc = query(keyString)
    return wordCountHTML(wc,keyString)

1 个答案:

答案 0 :(得分:0)

我猜第一个请求的POST参数在重定向中丢失了。我不确定你想要实现什么,但你可以通过首先使用不同的POST URL完全省略重定向:

@get('/')
def search():
    return '''<h1>Search</h1><form action="/result" method="post"> Keyword:<input name="keywords"type="text"/><input value="GO" type="submit" /> </form>'''

@post('/result')
def result(wc,keyString):
    keyString = request.forms.get('keywords')
    wc = query(keyString)
    return wordCountHTML(wc,keyString)

另外,请注意,有几个HTTP代码可用于重定向(请参阅https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection)。据我所知,Bottle 0.7+使用HTTP响应代码303.您可以尝试在重定向中使用重定向代码307来使其工作(将其用作第二个参数)。