Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django中获取整个当前url_Python_Django - Fatal编程技术网

Python 如何在django中获取整个当前url

Python 如何在django中获取整个当前url,python,django,Python,Django,我在django中获取当前url时遇到一些问题。 当前url为“” 我使用了几个url获取函数,如request.get_full_path()和request.build_absolute_uri(),但它们只返回“” 如何获取“#”后面的字符串,例如access#u令牌?哈希(#)后面的部分是。如维基百科文章所述: 片段标识符的功能与URI的其余部分不同:它的处理完全是客户端的,没有web服务器的参与,尽管服务器通常帮助确定MIME类型,MIME类型确定片段的处理。当代理(如web浏览器)从

我在django中获取当前url时遇到一些问题。 当前url为“”

我使用了几个url获取函数,如request.get_full_path()和request.build_absolute_uri(),但它们只返回“”

如何获取“#”后面的字符串,例如access#u令牌?

哈希(
#
)后面的部分是。如维基百科文章所述:

片段标识符的功能与URI的其余部分不同:它的处理完全是客户端的,没有web服务器的参与,尽管服务器通常帮助确定MIME类型,MIME类型确定片段的处理。当代理(如web浏览器)从web服务器请求web资源时,代理将URI发送到服务器,但不发送片段。相反,代理等待服务器发送资源,然后代理根据文档类型和片段值处理资源

因此,Web服务器甚至永远不会获得片段标识符。若要将散列作为查询字符串的键的一部分,则需要对其进行编码,散列将编码为
%23
。事实上,如果希望哈希位于querydict中,URI应该是:

https://localhost:8000/?%23access_token=EAAJ0Dqh2BJ0BABNKWfkqmiIr3uWwKvpkVeCAVQTZBQSEFG87GKjXunsoofixxKS11ZCicElsZBRMKHL4Dk5nGeBa5lBkYvzw3YKrzZAyZAvhlvd1pAtxzZBPlD4PJaD7JFz4UCjOEIyo5ZCfyBIysva1PCK0XZAN7FpXCDRpDxlEVxtnN9RrbZAt26ZChHV3LRupoZD&data_access_expiration_time=1576926047&expires_in=7153
https://localhost:8000/?%23access_token=EAAJ0Dqh2BJ0BABNKWfkqmiIr3uWwKvpkVeCAVQTZBQSEFG87GKjXunsoofixxKS11ZCicElsZBRMKHL4Dk5nGeBa5lBkYvzw3YKrzZAyZAvhlvd1pAtxzZBPlD4PJaD7JFz4UCjOEIyo5ZCfyBIysva1PCK0XZAN7FpXCDRpDxlEVxtnN9RrbZAt26ZChHV3LRupoZD&data_access_expiration_time=1576926047&expires_in=7153
如果我们生成这样的URI,Django会将其解析为:

>>> QueryDict('%23access_token=EAAJ0Dqh2BJ0BABNKWfkqmiIr3uWwKvpkVeCAVQTZBQSEFG87GKjXunsoofixxKS11ZCicElsZBRMKHL4Dk5nGeBa5lBkYvzw3YKrzZAyZAvhlvd1pAtxzZBPlD4PJaD7JFz4UCjOEIyo5ZCfyBIysva1PCK0XZAN7FpXCDRpDxlEVxtnN9RrbZAt26ZChHV3LRupoZD&data_access_expiration_time=1576926047&expires_in=7153')
<QueryDict: {'#access_token': ['EAAJ0Dqh2BJ0BABNKWfkqmiIr3uWwKvpkVeCAVQTZBQSEFG87GKjXunsoofixxKS11ZCicElsZBRMKHL4Dk5nGeBa5lBkYvzw3YKrzZAyZAvhlvd1pAtxzZBPlD4PJaD7JFz4UCjOEIyo5ZCfyBIysva1PCK0XZAN7FpXCDRpDxlEVxtnN9RrbZAt26ZChHV3LRupoZD'], 'data_access_expiration_time': ['1576926047'], 'expires_in': ['7153']}>
>>查询信息(“%23access_token=EAAJ0DQH2BJ0BABNKWFKQMIIR3UWKVKVKveCavQTZBQSEFG87GKJXUNSOOFIXKS11ZCIELSZBRMKHL4DK5NGEBA5LBKYKVZW3YKRZZAVHLVD1PATXZZZBPLD4PJAD7JFZ4JFZFYBVA1CKXZAN7FPC7FPDRPDXLVxETN9RRBZAT26ZCHHH3LRUPOZD和数据访问到期时间=15769260407JJJJJJJJJJJJJJJJJJJJJJJZZZZZZHW7ZBZBZHV7Z

这就是为什么不应该自己进行字符串处理来编码查询字符串的主要原因之一。当这些字符是键或值的一部分时,应该对它们进行编码,如
*
[
]
。虽然严格来说,您可以自己对这些代码进行编码。使用经过有效测试的工具可能更安全。

URL中有一个散列(
#
),这意味着它不是路径的一部分,它被用作锚定点,所以我猜您的查询字符串编码不正确。那么您的意思是我不能得到它?您可以对散列进行编码,但是您不能将原始的
#
传递到querydict。这同样适用于
*
[
]
。因此,强烈建议不要自己生成查询字符串,而是使用一些可以为您编码键和值的工具。感谢您的回复。我理解你的解释。问题是uri是由第三方生成的。那么我该如何编码呢?@JingzhunLi:你不能在服务器端编码,你必须在客户端编码。例如,使用
encodeURIComponent
对键和值进行编码: