Django中request.path, request.path_info, get_full_path方法的区别

Django项目开发中我们经常需要在视图中获取用户当前请求url的地址,然后进行跳转或判断操作,比如是否在url黑白名单里。Django提供了多种获取请求路径的实现方式,比如request.path, request.path_info, request.get_full_path和request.build_absolute_uri。那么这些方法有什么区别呢?

本文用户演示的完整url地址如下所示:

https://pythondjango.cn/blog/articles?page=2

request.path

request.path仅提供相对于根目录的url相对路径,不包含参数。它的输出是一个字符串,结果如下所示:

/blog/articles/

request.path_info

request.path_info也仅提供相对于根目录的url相对路径,不含参数。它的输出也是一个字符串,与request.path相同:

/blog/articles/

那么request.path_info和request.path有何区别呢? Django推荐使用request.path_info获取不含参数的相对urls路径。这是为什么呢?

大部分情况下request.path_info和request.path的输出结果是一样的。但是如果你的WSGI服务器设置了WSGIScriptAlias(应用程序的假名, 比如myapp), 那么request.path将输出/myapp/blog/articles/,而request.path_info的输出结果更准确,依然为/blog/articles/

request.get_full_path

该方法用于获取包含完整参数的相对于根目录的相对url路径。它的直接输出内容是个WSGI请求对象。如果要获取字符串形式的完整url路径,一定要不要忘了在后面加括号。

request.get_full_path()的输出结果为:

‘blog/articles?page=2’

如果你希望在路径里忽略应用程序假名,可以使用request.get_full_path_info()。

request.build_absolute_uri()

该方法用于获取带域名的url绝对路径, 也是一个字符串,如下所示。千万别忘了加括号。

https://pythondjango.cn/blog/articles?page=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值