首页 > 解决方案 > Flask 请求:确定确切路径,包括是否有问号

问题描述

有没有办法确定向服务器请求的路径是什么,包括它是否包含问号?应用程序

from flask import Flask, Response, request

def root():
    return Response(
        f'full_path:{request.full_path} '
        f'path:{request.path} '
        f'query_string:{request.query_string} '
        f'url:{request.url}'
    )

app = Flask('app')
app.add_url_rule('/', view_func=root)

app.run(host='0.0.0.0', port=8081, debug=False)

总是导致

full_path:/? path:/ query_string:b'' url:http://localhost:8081/

如果要求

http://localhost:8081/?

或者

http://localhost:8081/

在很多情况下,这似乎并不重要,但我正在创建一个具有多个重定向的身份验证流程,其中用户应该以与他们开始时完全相同的 URL 结束。目前,我找不到确保 Flask 发生这种情况的方法。

标签: pythonhttpflaskoauthquery-string

解决方案


除了您已经提到的字段之外,“环境”字段中的值可能对您的情况有用:

def root():
    return Response(
        f'raw_uri:{request.environ["RAW_URI"]} '
        f'request_uri:{request.environ["REQUEST_URI"]}'
    )

输入:

http://localhost:8081/?

输出:

raw_uri:/?
request_uri:/?

输入:

http://localhost:8081/

输出:

raw_uri:/
request_uri:/

推荐阅读