Django系列(七)HttpRequest(请求)和HttpResponse(响应)对象

news/2025/9/25 15:07:10/文章来源:https://www.cnblogs.com/sunjiwei/p/19111175
一、概述
Django 使用请求和响应对象在系统中传递状态。

当一个页面被请求时,Django 会创建一个 HttpRequest 对象,这个对象包含了请求的元数据。然后,Django 加载相应的视图,将 HttpRequest 作为视图函数的第一个参数。每个视图负责返回一个 HttpResponse 对象。

本文档解释了 django.http 模块中定义的 HttpRequest 和 HttpResponse 对象的 API。

官网地址:https://docs.djangoproject.com/zh-hans/4.2/ref/request-response/

二、请求对象
注意:在视图中不管是函数还是类方法中都会有一个HttpRequest对象request 下面这些方法都是通过request对象来访问
###   以下是属性
# request.scheme
代表请求协议的字符串(通常是 http 或 https)。# request.body
作用:直接返回请求体的原始二进制数据(bytes 类型),是最常用的读取请求体的方式。
特点:
数据以二进制形式存在,需根据实际格式(如 JSON、表单数据)手动解码(如 json.loads(request.body.decode('utf-8')))。
可多次访问(Django 内部会缓存数据),不会因为读取而 “消耗” 数据。也可以使用request.read(size). request.readline() 来读取请求体数据,详见下文
# request.method
代表请求中使用的 HTTP 方法的字符串。保证是大写字母。例如:if request.method == "GET":do_something()
elif request.method == "POST":do_something_else()# request.encoding
表示当前用于解码表单提交数据的编码的字符串# request.content_type
代表请求的 MIME 类型的字符串,从 CONTENT_TYPE 头解析。# request.content_params
CONTENT_TYPE 头中包含的键/值参数字典。# request.GET
一个类似字典的对象,包含所有给定的 HTTP GET 参数。参见下面的 QueryDict 文档。# request.POST
一个类似字典的对象,包含所有给定的 HTTP POST 参数,前提是请求包含表单数据# request.COOKIES
一个包含所有 cookies 的字典。键和值是字符串。# request.FILES
一个类似字典的对象,包含所有上传的文件。FILES 中的每个键是 <input type="file" name=""> 中的 name。FILES 中的每个值是一个 UploadedFile。
FILES 只有在请求方法是 POST,并且发布请求的 <form> 有 enctype="multipart/form-data" 的情况下,才会包含数据。否则,FILES 将是一个类似字典的空白对象。# request.headers
一个不区分大小写的类似字典的对象,提供对请求中所有 HTTP 前缀头的访问# request.session
来自 SessionMiddleware。一个可读可写的,类似字典的对象,代表当前会话。# request.user
从 AuthenticationMiddleware。AUTH_USER_MODEL 的一个实例,代表当前登录的用户。如果用户当前没有登录,user 将被设置为一个 AnonymousUser 的实例。你可以用 is_authenticated 来区分它们,比如:if request.user.is_authenticated:...  # Do something for logged-in users.
else:...  # Do something for anonymous users.### 以下是方法
# request.get_host()
按顺序返回请求的发起主机# request.get_full_path()
返回 path,也就是https://example.com/music/bands/the_beatles/?print=true 这种# request.read(size)
作用:从请求体中读取指定字节数的二进制数据(bytes 类型),若不指定 size 则读取全部剩余数据。
特点:
流式读取:类似文件的 read() 方法,读取后指针会移动,再次调用会读取剩余数据(直到读完返回空字节 b'')。
数据读取后会被 “消耗”,无法重复读取(除非手动重置指针,但 Django 不推荐)。
底层依赖 WSGI 协议的 input 流,与 request.body 共享同一数据源(先调用 read() 会导致 request.body 为空,反之亦然)。
适用场景:
处理大型请求体(如大文件上传),避免一次性加载到内存,减少内存占用。
流式解析数据(如逐段处理二进制流)。# request.readline()(方法)
作用:从请求体中读取一行数据(以 \n 为分隔符),返回二进制数据(bytes 类型)。
特点:
同样是流式读取,指针会随读取移动,读完一行后下次调用读取下一行。
适用于按行分割的文本数据(如 CSV、日志文件等)。
与 request.read() 共享数据源,读取后会影响 request.body 的可用性。
适用场景:
处理按行结构化的文本数据(如逐行解析 CSV 格式的请求体)。# request.readlines()
一次读取多行,参考request.readline()
三、响应对象
与 Django 自动创建的 HttpRequest 对象不同, HttpResponse 对象是你的责任。你写的每个视图都要负责实例化、填充和返回一个 HttpResponse 对象。

HttpResponse 类位于 django.http 模块中。

### 以下是作用
# 传入字符串
>>> from django.http import HttpResponse
>>> response = HttpResponse("Text only, please.", content_type="text/plain")但如果你想逐步添加内容,你可以将 response 当作类似文件的对象来使用:>>> response = HttpResponse()
>>> response.write("<p>Here's the text of the web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")### 以下是属性
# HttpResponse.content
一个代表内容的字节或者字符串,必要时由字符串编码。# HttpResponse.cookies
一个包含在响应中的 cookie 的 http.cookies.SimpleCookie 对象。# HttpResponse.headers
一个不区分大小写的、类似字典的对象,提供对响应中除了 Set-Cookie 头部之外的所有 HTTP 头部的接口。# HttpResponse.charset
表示响应将被编码的字符集的字符串。如果在 HttpResponse 实例化时没有给出,将从 content_type 中提取,如果不成功,将使用 DEFAULT_CHARSET 设置。# HttpResponse.status_code
响应的 HTTP 状态码。### 以下是方法
# HttpResponse.setdefault(header, value)
设置响应头# HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)
设置一个 cookie
max_age 应该是一个 timedelta 对象、整数秒数,或者 None (默认值)expires 应是格式为 "Wdy, DD-Mon-YY HH:MM:SS GMT" 的字符串,或者是 UTC 的 datetime.datetime 对象。如果 expires 是一个 datetime 对象,将计算 max_age。如果你想设置一个跨域的 cookie,请使用 domain。例如,domain="example.com" 将设置一个可被 www.example.com、blog.example.com 等域读取的 cookie。否则,一个 cookie 将只能被设置它的域读取。如果你想让 cookie 只在使用 https 方案进行请求时才发送给服务器,请使用 secure=True。如果你想防止客户端的 JavaScript 访问 cookie,请使用 httponly=True。####
HttpResponse还有很多子类,其中最重要的一个JsonResponse
from django.http import JsonResponse它和HttpResponse区别如下:
一、核心定位与继承关系
首先明确两者的层级:HttpResponse(基类) → JsonResponse(子类)
HttpResponse:通用响应类,可返回任意格式的响应内容(文本、HTML、二进制数据等),是 Django 中所有响应的 “基础模板”。
JsonResponse:专用响应类,仅用于返回 JSON 格式数据,是在 HttpResponse 基础上封装了 JSON 序列化和响应头配置的 “快捷工具”。二、关键区别对比(表格)
对比维度	                                HttpResponse(基类)	                                                            JsonResponse(子类)
核心用途	                      通用场景:返回 HTML、纯文本、二进制文件等任意格式	              专用场景:仅返回 JSON 格式数据(前后端分离 / API)
数据序列化	                      需手动处理:若返回 JSON,需先用 json.dumps() 序列化	              自动处理:直接传入 Python 数据(字典 / 列表),内部自动转为 JSON 字符串
响应头 Content-Type	      默认值为 text/html(需手动修改为目标格式)	                          自动设置为 application/json(前端可直接解析 JSON)
用法复杂度	                      繁琐:需手动处理 “数据格式转换 + 响应头设置”	                          简洁:一行代码即可完成 JSON 响应,无需额外配置
特殊参数支持	                  无 JSON 相关专属参数,需手动拼接	                                          支持 safe(控制是否允许列表)、json_dumps_params(JSON 序列化配置)等专属参数

参考文档:https://docs.djangoproject.com/zh-hans/4.2/ref/request-response/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

值得收藏!GraphRAG:助力大模型突破“健忘”困局,构建逻辑化升级

值得收藏!GraphRAG:助力大模型突破“健忘”困局,构建逻辑化升级pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

工业主板:智能制造与严苛环境的坚实基石

在自动化生产线的精细控制、智能交通系统的稳定运行、医疗影像设备的可靠运转背后,工业主板扮演着不可或缺的重要角色。它不同于我们日常使用的消费级电脑主板,是为应对复杂严苛的工业环境而生的”专业心脏”。理解工…

12建网站电商眼

1.must :相当于and 2.must_not :相当于not 3.should:相当于or 4. filter:过滤 gte 大于 gt大于 lte小于等于 lt小于 使用示例&#xff1a; {“bool”:{“must”:{“match”:{“title”:”how to make millons “}},“must_not”:{“match”:{“tag”:”spam“}},“should”:[{…

网站开发的后端注册网站会员 我们的信息

春去秋来&#xff0c;一个轮回又一年。“ 你知道F518创意园开园多久了吗&#xff1f;对的&#xff0c;13年&#xff01;”作为深圳实施“腾笼换鸟”首批项目和深圳申请联合国科教文组织“设计之都”重要组成部分&#xff0c;我们开园至今已经13年了&#xff01;白驹过隙&#x…

标题。

你好,20231302 邱之钊!很高兴看到你正在学习Linux C编程,这对你未来在国产化操作系统上的就业非常有帮助。我会根据你的中等基础,详细讲解每个步骤,帮助你更好地理解和掌握这些知识。让我们一起努力,逐步完成这些…

虚拟机下的麒麟V10SP1与SP2进行iSCSI连接——基于MobaXterm

好的!作为小白,我会带你一步一步完成 iSCSI 存储管理的配置。我会用最详细的方式解释每个步骤,确保你能完全理解。🎯 准备工作:理解你的环境 根据你的描述,你的环境是: Windows 11 主机 VMware Workstation 17…

中断的基本概念

在计算机执行程序的过程中,出现某些需要紧急处理的特殊情况或者特殊请求,cpu暂时终止现行程序。而转去对这些特殊情况处理,处理完毕后在返回到原程序的断点处。 工作流程 1.中断请求 中断源向cpu发送中断请求信号 2…

郑州市科协网站做农村电子商务的网站有哪些内容

LANMP简介 LANMP是指一组通常用来搭建动态网站或者服务器的开源软件&#xff0c;本身都是各自独立的程序&#xff0c;但是因为常被放在一起使用&#xff0c;拥有了越来越高的兼容度&#xff0c;共同组成了一个强大的Web应用程序平台。 L:指Linux&#xff0c;一类Unix计算机操作…

AT_arc173_e [ARC173E] Rearrange and Adjacent XOR

好家伙,标签一出来给我假完了。 刚开始以为是拆位对于每一位的每一层去做贪心,结果发现假了。 有一个很显然的性质是,答案一定由原序列若干个数异或得到,现在我们需要观察这些数有什么性质。 我们再仔细一想,如果…

修复gradle8使用Transform第一个构建中断第二次构建失败的问题:java.io.IOException: Unable to delete directory xxxx\build

问题描述 使用了gradle编译插件,编译插件使用的是Transform处理字节码,如果第一次ctrl+c中断或者其它原因中断,下次再次构建会出现build文件夹清理不了的问题 Execution failed for task :my-module:my-submodule:c…

.NET操作Word/WPS打造专业文档 - 页面设置与打印控制完全指南

本文将详细介绍如何使用MudTools.OfficeInterop.Word库来设置页面参数、管理页眉页脚以及控制文档打印。我们将深入探讨从基础的纸张设置到高级的分节页面控制,从简单的页眉页脚到复杂的多区域布局,以及如何精确控制…

NORDIC蓝牙6.0新品NRF54L15多协议超低功耗高性能BLE芯片 - 动能世纪

NRF54L15,NRF54L10,NRF54L05 是NORDIC推出的高性能,多协议,低功耗BLE6.0芯片 产品简介 增强的多协议支持nRF54L 系列支持低功耗蓝牙、蓝牙 Mesh、Thread、Matter、Zigbee、Amazon Sidewalk 和 2.4 GHz 专有协议,并…

记录:git、.${index}. 滚动条

解决问题:从底层找,从最开始的位置打日志,一步步节点去找问题发生的位置 记录、统计:各环境账号。。。上线:需要准备的资源、账号、人员 去掉debugger 1、提交代码;2、dev,fat,本地各种自测;3、new tag,改动…

快速入门HarmonyOS应用开发(三) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Docker + IDEA 一键部署! - 实践

Docker + IDEA 一键部署! - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

使用springboot开发一个宿舍管理系统练习项目 - 实践

使用springboot开发一个宿舍管理系统练习项目 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

有做兼职赚钱的网站吗12315可以查询营业执照吗

本文小编给大家分享的是腾讯视频下载的视频怎么导出来_手机腾讯视频怎么缓存视频电影。相比其它的视频客户端&#xff0c;腾讯视频的多维度筛选&#xff0c;大数据比对&#xff0c;更有利于用户发现和推荐自己喜爱的影视剧内容。腾讯视频播放器推荐精准&#xff0c;越用越懂你&…

seo网站制作网站专题报道页面怎么做的

最近开始阅读java底层的源码&#xff0c;是因为发现越到后面越发现读源码的重要性&#xff0c;真的很重要&#xff0c;不阅读源码&#xff0c;你会发现“路”越走越窄。 今天看到了String的这个构造方法&#xff0c; /*** Initializes a newly created {code String} object so…

深圳有做网站公司wordpress onethink

可以放在服务器上&#xff0c;对服务器上的文件进行浏览、上传、下载&#xff0c;可下载文件源码。把下所有代码入在一个文件里即可&#xff0c;文件的后缀要为asp。thedir request("thedir")if thedir "" thenfolderini server.mappath(".")…