request.build_absolute_uri()用法

request.build_absolute_uri() 是 Django 中一个非常实用的方法,用于构建完整的、绝对的 URL(包含协议、域名、端口和路径)


📌 基本语法

复制代码
request.build_absolute_uri(location=None)
  • 如果 不传参数:返回当前请求的完整绝对 URL。
  • 如果 传入 location(字符串) :将 location 拼接到当前站点的根地址上,生成完整 URL。

✅ 举个例子

假设你的网站部署在:

复制代码
https://example.com:8000/myapp/
情况 1:不传参数(获取当前页面完整 URL)
复制代码
# 用户访问 https://example.com:8000/student/123/
full_url = request.build_absolute_uri()
print(full_url)
# 输出: https://example.com:8000/student/123/
情况 2:传入相对路径(常用于生成二维码、分享链接等)
复制代码
relative_path = "/student-volunteer-er/6/"
full_url = request.build_absolute_uri(relative_path)
print(full_url)
# 输出: https://example.com:8000/student-volunteer-er/6/

💡 即使你本地开发用 http://127.0.0.1:8000,它也会自动适配为 http://127.0.0.1:8000/...

部署到线上后自动变成 https://yourdomain.com/...无需硬编码域名


🔧 常见用途

场景 说明
生成二维码 二维码必须是完整 URL,不能是 /path/
发送邮件中的链接 邮件里不能用相对路径,必须是 https://...
第三方回调地址 如微信登录、支付回调,需要提供完整 URL
SEO 或 Open Graph 标签 <meta property="og:url" content="完整URL">

⚠️ 注意事项

  1. 依赖 Host 请求头

    Django 通过 request.get_host() 获取域名,而 get_host() 来自 HTTP 请求头中的 Host 字段。

    → 所以在反向代理(如 Nginx)后面时,要确保正确传递 Host 头,或设置 USE_X_FORWARDED_HOST = True

  2. 不要手动拼接 http:// + domain + path

    这样容易出错(比如忘记端口、协议是 http/https 混乱)。

    ✅ 用 build_absolute_uri() 更安全、更通用。

  3. reverse() 配合使用

    复制代码
    from django.urls import reverse
    
    relative_url = reverse('student_volunteer_erlist', kwargs={'student_id': 6})
    absolute_url = request.build_absolute_uri(relative_url)
    # 结果: https://example.com/student-volunteer-er/6/

✅ 总结

方法 返回值
request.path /student/123/(仅路径)
request.get_full_path() /student/123/?a=1(路径+查询参数)
request.build_absolute_uri() https://example.com/student/123/(完整 URL)✅
相关推荐
消失的旧时光-194319 分钟前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
zhaoyong2222 小时前
MySQL 存储过程中字符集与排序规则不匹配导致查询性能下降的解决方案
jvm·数据库·python
sinat_383437362 小时前
golang如何从Python转型Go开发_golang从Python转型Go开发攻略
jvm·数据库·python
rockey6272 小时前
基于AScript的python3脚本语言发布啦!
python·c#·.net·script·python3·eval·expression·function·动态脚本
gqk012 小时前
Python入门
python
Muyuan19983 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
代码小书生3 小时前
statistics,一个统计的 Python 库!
开发语言·python
STLearner4 小时前
SIGIR 2026 | LLM × Graph论文总结(图增强LLM,GraphRAG,Agent,多模态,知识图谱,搜索,推
人工智能·python·深度学习·神经网络·机器学习·数据挖掘·知识图谱
FreakStudio4 小时前
MicroPython 内核开发者直接狂喜!这个 Claude 插件市场,把开发全流程做成了「对话式外挂」
python·单片机·嵌入式·面向对象·并行计算·电子diy
老陈说编程4 小时前
12. LangChain 6大核心调用方法:invoke/stream/batch同步异步全解析,新手也能轻松学会
开发语言·人工智能·python·深度学习·机器学习·ai·langchain