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)✅
相关推荐
武天旭1 天前
AI安全--AI大模型的毒性偏见与安全对齐实践
人工智能·python·深度学习
视觉小萌新1 天前
AI Class 3 · Chapter 2-3:函数、异常、文件读写+JSON / JSONL 读写(小白版)
人工智能·python·json
小小张说故事1 天前
Python 的 obj.x 到底按什么顺序找?拆开数据描述符、实例字典和 __getattr__ 那条优先级链
python
用户11481867894841 天前
水印的实现方式逻辑
前端·python
贾公子1 天前
从单条内容到账号维度——AIGC 风险评分的工程实现
后端·python
木头左1 天前
【Python】不点浏览器发博客:逆向 CSDN 创作中心接口做 md-publish 技能
python·自动化·api
Tt有了t1 天前
设计模式速查
java·python·设计模式
deepseek231 天前
Python日志拖慢请求?QueueHandler排队、丢失与退出实测
python·性能优化·logging·后端开发·queuehandler
用户91294046848421 天前
Codex 从零到能交付(05):第一次改代码:生成一个文件清单脚本
python
Dmz丶1 天前
前端转 AI 100 天 Day 38:Token 管理与成本优化——别让 API 账单爆炸
python