> 文章列表 > 14、DRF实战总结:获取Django请求路径的方法以及各自的区别

14、DRF实战总结:获取Django请求路径的方法以及各自的区别

14、DRF实战总结:获取Django请求路径的方法以及各自的区别

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

请求URL示例:http://localhost/v1/articles_cbv/?page=2&size=3

request.path

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

`/v1/articles_cbv/`

request.path_info

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

`/v1/articles_cbv/`

request.path_inforequest.path的区别:

Django推荐使用request.path_info获取不含参数的相对urls路径。

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

request.get_full_path

用于获取包含完整参数的相对于根目录的相对url路径,包含域名和查询参数。它的直接输出内容是个WSGI请求对象。

<bound method HttpRequest.get_full_path of <WSGIRequest: GET '/v1/articles_cbv/?page=2&size=3'>>

如果要获取字符串形式的完整url路径,一定要不要忘了在后面加括号。

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

‘/v1/articles_cbv/?page=2&size=3’

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

/v1/articles_cbv/?page=2&size=3

request.build_absolute_uri()

该方法用于获取带域名的url绝对路径, 也是一个字符串,包含协议、域名、端口和路径以及查询参数。如下所示。需要加括号。

`http://localhost/v1/articles_cbv/?page=2&size=3`

输入才有输出,吸收才能吐纳。——码字不易