【问题标题】:Python flask Auto Redirect messagePython烧瓶自动重定向消息
【发布时间】:2016-08-11 19:49:31
【问题描述】:

我已经定义了 multplie service urls ,所有这些都将执行相同的代码。

@service.route('/get_info/env=<path:env>/starttime=<int:starttime>/endtime=<int:endtime>/entire=<entire>/over=<over>/stage=<stage>', defaults={'name': None}, strict_slashes=False)
@service.route('/get_info/dir=<path:dir>/starttime=<int:starttime>/endtime=<int:endtime>/entire=<entire>/over=<over>', defaults={'stage': 'ABC', 'name': None}, strict_slashes=False)

@servicelog.operation('GetInfo')
def get_deployment_info(env, starttime, endtime, finished, stage, fleetwide, hostname):
global _misc
try:
    log.info("Dir: %s, Starttime: %d, Endtime: %d, name: %s, finished:%s, Stage:%s, Fleetwide: %s", dir, starttime, endtime, name,over, stage, entire)
    result = obj.get_info(dir, starttime, endtime, entire, over, stage, name)

如果我要使用以下参数调用服务,它会按预期工作:

http://<endpoint>/get_info/dir=home/user/test/starttime=1470439200/endtime=1470856027/entire=true/over=true

但是,如果我使用以下参数调用服务,我会收到一条重定向消息:

http://<endpoint>/get_info/dir=home/user/test/starttime=1470439200/endtime=1470856027/entire=true/over=true/stage=ABC

我得到的错误是

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL: <a href="http://endpoint/get_info/dir%3Dhome/user/test/starttime%3D1470439200/endtime%3D1470856027/entire%3Dtrue/over%3Dtrue">http://endpoint/get_info/dir%3Dhome/user/test/starttime%3D1470439200/endtime%3D1470856027/entire%3Dtrue/over%3Dtrue</a>.  If not click the link.%    

我在这里做错了吗?我不期待这样的消息,因为我没有定义任何类型的重定向。无论使用哪个 url,它都应该执行该方法。

【问题讨论】:

    标签: python redirect flask flask-restful


    【解决方案1】:

    您构建路线的方式并不是很干净。带参数的 GET 请求应采用以下格式 http://server/route?arg1=val1&arg2=val2&.. 等等。我很确定某些特殊字符或某些解析问题是造成这里错误的原因。

    使用 request.args.get('arg1') 在 GET 请求处理程序中检索已解析参数 1 的值(不要忘记顶部的 from flask import request)。要获取整个字符串,请使用request.query_string

    this SO 问题。

    【讨论】:

    • 感谢您的回复。做了一些更多的挖掘。如果我通过stage=ABC,就会发生这种情况,并且我已将第二个备用网址的阶段默认值定义为 ABC。不知道为什么它会尝试读取第二个备用网址的默认值。它适用于所有其他值。
    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    相关资源
    最近更新 更多