Django 响应(HttpResponse)全景手册

举报
周杰伦本人 发表于 2025/08/31 20:37:00 2025/08/31
【摘要】 Django 响应(HttpResponse)全景手册 一、为什么响应对象同样重要Web 程序 = 请求 + 响应。无论你在视图里做了多少业务逻辑,最终都要通过“响应对象”把结果塞回浏览器。Django 把所有返回细节——内容、状态码、头部——都封装进 HttpResponse,掌握它才能优雅地“收尾”。 二、HttpResponse 的 4 个核心参数参数类型说明示例contentstr...

Django 响应(HttpResponse)全景手册

一、为什么响应对象同样重要

Web 程序 = 请求 + 响应。无论你在视图里做了多少业务逻辑,最终都要通过“响应对象”把结果塞回浏览器。Django 把所有返回细节——内容、状态码、头部——都封装进 HttpResponse,掌握它才能优雅地“收尾”。


二、HttpResponse 的 4 个核心参数

参数 类型 说明 示例
content str/bytes 真正的响应体,浏览器最终看到的内容 "Hello Django"
content_type str MIME 类型,告诉浏览器“我是什么” application/json
status int HTTP 状态码,100–599 200 成功,404 不存在
headers dict 自定义响应头 {'Token': 'abc123'}

三、最小可运行示例

from django.http import HttpResponse

def hello(request):
    return HttpResponse(
        content='{"msg":"ok"}',
        content_type='application/json',
        status=200,
        headers={'X-Custom': 'django'}
    )

四、状态码速查表(面试常问)

区间 含义 场景
1xx 信息 100 Continue 大文件上传
2xx 成功 200 OK 正常返回、201 Created 新建成功
3xx 重定向 301 永久、302 临时
4xx 客户端错 400 参数错误、401 未登录、403 没权限、404 找不到
5xx 服务端错 500 代码异常、502 网关错误

这里说一下重定向

1️⃣ 什么是重定向
服务器不直接返回页面,而是返回 “3xx 状态码 + 新地址”,让浏览器再发一次请求,完成“跳转”。
生活例子:微博 ➜ QQ 登录 ➜ 授权成功 ➜ 302 跳回微博首页

2️⃣ Django 用法

from django.shortcuts import redirect

def login(request):
    # 登录成功后跳到首页
    return redirect('https://www.itcast.cn')
  • redirect(url, permanent=False) 默认 302(临时)。

  • permanent=True 返回 301(永久),SEO 专用。

3️⃣ 常见场景

场景 代码示例
登录后跳转 return redirect('/')
表单提交后防刷新 return redirect(reverse('success'))
旧 URL 迁移 return redirect('/new/', permanent=True)

reverse('success') 就是把 URL 别名 翻译成 真正的 URL 字符串。redirect(reverse(‘success’)) 等价于 redirect(‘/success/’)

四 记忆口诀
“redirect 就是 302,浏览器再跑一趟。”


五、在视图中动态设置示例

def user_detail(request, user_id):
    try:
        user = User.objects.get(pk=user_id)
        return HttpResponse(
            f"用户名:{user.username}",
            content_type='text/plain',
            status=200
        )
    except User.DoesNotExist:
        return HttpResponse(
            "用户不存在",
            content_type='text/plain',
            status=404
        )

六、自定义响应头

response = HttpResponse("ok")
response['X-RateLimit'] = '100'
response['Access-Control-Allow-Origin'] = '*'
return response

Postman 或浏览器 Network 面板即可看到新增头部。


七、快捷子类

  • JsonResponse(data, status=200) —— 自动序列化字典/列表,省去手动 json.dumps

  • FileResponse(file) —— 流式发送文件,适合下载接口。

  • HttpResponseRedirect('/login/') —— 302 重定向专用。


八、调试技巧

在开发阶段,任何视图都可快速打印调试:

print(request.method, request.path, response.status_code)

九、总结

“内容、类型、状态码,头部字典随你加;JsonResponse 偷懒神器,状态码 2xx 成功 4xx 用户 5xx 服务。”

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。