Django的响应对象

news2024/9/19 10:47:57

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客

《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)

Django的请求对象-CSDN博客

在Django框架中,HttpResponse对象是由HttpResponse类来定义的,而HttpResponse类同样定义在django.http模块中。

HttpRequest对象是浏览器发送过来的请求数据的封装,HttpResponse对象则是将要返回给浏览器的数据的封装。HttpRequest对象由Django自动解析HTTP数据包而创建,而HttpResponse对象则由程序员手动创建。

通常由设计人员负责编写的每个视图都要实例化、填充和返回一个HttpResponse对象。

1. HttpResponse类的使用方法

1)返回字符串

使用HttpResponse类最典型的方式用作构造函数,将string、bytes或者memoryview(Python 3.8+版本新增的一种类型)类型的值作为页面的内容传递给HttpResponse类。示例代码如下:

【代码4-70】

>>> from django.http import HttpResponse
>>> response = HttpResponse("Here's the text of the Web page.")
>>> response = HttpResponse("Text only, please.", content_type="text/plain")
>>> response = HttpResponse(b'Bytestrings are also accepted.')
>>> response = HttpResponse(memoryview(b'Memoryview as well.'))

另外,还可以将response看作一个类文件对象,使用wirte()方法不断地往里面增加内容。示例代码如下:

【代码4-71】

>>> response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")

2)传递可迭代对象

设计人员可以传递一个可迭代的对象给HttpResponse对象(例如StreamingHttpResponse),HttpResponse类会立即处理这个迭代器,并将其内容保存为字符串,最后废弃这个迭代器。

例如,在读取文件后,会立刻调用close()方法关闭这个文件。

3)设置头部字段

设计时可以把HttpResponse对象当作一个字典,在其中增加和删除头部字段,示例代码如下:

【代码4-72】

>>> response = HttpResponse()
>>> response['Age'] = 120
>>> del response['Age']

注意,如果要删除的头部字段不存在,则del操作不会抛出KeyError异常,这与字典是不一样的;因为HTTP头部字段中不能包含换行符,所以如果提供的头部字段值中包含换行符(CR或者LF),则将会抛出BadHeaderError异常。

4)附件形式

让浏览器以文件附件的形式处理响应,需要声明content_type类型和设置Content-Disposition头信息。

例如,给浏览器返回一个Excel电子表格,示例代码如下:

【代码4-73】

>>> response = HttpResponse(my_data, content_type='application/vnd.ms-excel')
>>> response['Content-Disposition'] = 'attachment; filename="excel.xls"'

2. HttpResponse类属性

(1)content属性:该属性表示响应的内容(bytes类型)。

(2)charset属性:该属性表示编码的字符集。如果没指定,将会从content_type中解析出来。

(3)status_code属性:该属性表示响应的状态码,例如200。

(4)reason_phrase:该属性表示响应的HTTP原因短语,一般使用HTTP标准的默认原因短语。另外,除非明确设置,否则该属性将由status_code的值决定。

(5)streaming:该属性的值总是False。由于该属性的存在,使得中间件能够区别对待流式响应和常规响应。

(6)closed:如果响应已关闭,那么该属性的值为True。

3. HttpResponse类方法

(1)HttpResponse.__init__(content=b'',content_type=None,status=200,reason=None,charset=None)

方法:该方法为HttpResponse类的初始化方法,通过使用content和content-type参数来实例化一个HttpResponse对象。具体参数介绍如下:

  • content参数通常是一个迭代器、bytestring、memoryview或字符串类型。如果是其他类型,则将通过编码转换为bytestring类型;如果是迭代器,那么这个迭代器返回的应该是字符串,并且这些字符串连接起来形成response的内容。
  • content_type参数是可选的,用于填充HTTP的Content-Type头部。如果未指定,默认情况下由DEFAULT_CONTENT_TYPE和DEFAULT_CHARSET设置组成,例如“text/html;charset=utf-8”。
  • status参数表示响应的状态码。
  • reason参数是HTTP响应短语。
  • charset参数是编码方式。

(2)HttpResponse.__setitem__(header, value)方法:该方法用于设置头部的键-值对。其中的两个参数都必须为字符串类型。

(3)HttpResponse.__delitem__(header)方法:该方法用于删除头部的某个键,如果键不存在也不会报错。该方法不区分字母大小写。

(4)HttpResponse.__getitem__(header)方法:该方法用于返回对应键的值。该方法不区分字母大小写。

(5)HttpResponse.get(header, alternate=None)方法:该方法用于返回给定的头部的值,当头部不存在时返回一个alternate参数。

(6)HttpResponse.has_header(header)方法:该方法用于检查头部中是否有给定的名称(不区分字母大小写),结果返回布尔值(True或False)。

(7)HttpResponse.items()方法:该方法的行为类似于Python字典中的dict.items()方法,用于获取HTTP响应中的头部。

(8)HttpResponse.setdefault(header, value)方法:该方法用于设置一个头部,除非该头部已经设置过了。

(9)HttpResponse.set_cookie(key,value='',max_age=None,expires=None,path='/',domain=None, secure=False, httponly=False,samesite=None)方法:该方法用于设置一个Cookie。其中的参数与Python标准库中的Morsel.Cookie对象相同。具体参数介绍如下:

  • max_age参数:用于定义生存周期,以秒为单位。如果设置为None,则在浏览器开启期间该Cookie一直保持,浏览器关闭后该Cookie一同删除。
  • expires参数:用于定义到期时间。
  • domain参数:用于设置跨域的Cookie。例如domain="example.com"将设置一个www.example.com和blogs.example.com等都可读的Cookie。否则,Cookie将只能被设置成其域可读取。
  • secure参数:secure=True表明支持HTTPS安全协议,secure=False表明不支持HTTPS安全协议。
  • httponly=True:阻止客户端的Java Script代码访问Cookie。
  • samesite参数:使用samesite='Strict'或samesite='Lax'通知浏览器在执行跨源请求时不要发送此Cookie。并非所有浏览器都支持samesite参数,因此该参数不是Django框架的CSRF保护的替代品,而是一种深度防御措施。使用samesite='None'(string)(Django v3.1版本新增的内容)显式声明此Cookie与所有相同站点和跨站点请求一起发送。

(10)HttpResponse.set_signed_cookie(key,value,salt='',max_age=None,expires=None,path='/', domain= None, secure=False,httponly=False,samesite=None)方法:该方法与set_cookie()方法类似,但是在设置之前将对Cookie进行加密签名。该方法通常与HttpRequest.get_signed_cookie()一起使用。其中samesite=None参数也是Django v3.1版本新增的内容。

(11)HttpResponse.delete_cookie(key,path='/',domain=None,samesite=None)方法:该方法用于删除Cookie中指定的key。由于Cookie的工作方式,路径(path)和域名(domain)应该使用与set_cookie()方法中相同的值,否则Cookie不会被删掉。

(12)HttpResponse.close()方法:在请求结束后WSGI服务器会调用此方法来关闭连接。

(13)HttpResponse.write(content)方法:该方法会将HttpResponse实例看作类似文件的对象,往里面添加内容。

(14)HttpResponse.flush()方法:该方法用于清空HttpResponse实例的内容。

(15)HttpResponse.tell()方法:该方法将HttpResponse实例看作类似文件的对象,移动位置   指针。

(16)HttpResponse.getvalue()方法:该方法返回HttpResponse.content的值。同时,该方法将HttpResponse实例看作一个类似流的对象。

(17)HttpResponse.readable()方法:该方法返回的值始终为False,判断是否可读。

(18)HttpResponse.seekable()方法:该方法返回的值始终为False,判断指针是否可以移动。

(19)HttpResponse.writable()方法:该方法返回的值始终为True,判断是否可写。

(20)HttpResponse.writelines(lines)方法:该方法将一个包含行的列表写入响应对象中,不添加分行符。

4. HttpResponse子类

Django还包含了一系列的HttpResponse的衍生类(子类),用来处理不同类型的HTTP响应。与HttpResponse类相同,这些子类存在于django.http模块之中。同时,这些子类并不算复杂,代码也很简单,主要区别就是响应码的不同。

HttpResponse衍生类(子类)的具体说明如下:

  • HttpResponseRedirect类:重定向,返回302状态码。目前,已经被redirect()方法替代。
  • HttpResponsePermanentRedirect类:永久重定向,返回301状态码。
  • HttpResponseNotModified类:未修改的页面,返回304状态码。
  • HttpResponseBadRequest类:错误的请求,返回400状态码。
  • HttpResponseNotFound类:页面不存在,返回404状态码。
  • HttpResponseForbidden类:禁止访问,返回403状态码。
  • HttpResponseNotAllowed类:禁止访问,返回405状态码。
  • HttpResponseGone类:响应过期,返回405状态码。
  • HttpResponseServerError类:服务器错误,返回500状态码。

同时,设计人员还可以自定义HttpResponse的子类,示例代码如下:

【代码4-74】

01  from http import HTTPStatus
02  from django.http import HttpResponse
03 
04  class HttpResponseNoContent(HttpResponse):
05      status_code = HTTPStatus.NO_CONTENT

《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)

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

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

相关文章

支持向量机和梯度提升决策树

支持向量机&#xff08;SVM, Support Vector Machine&#xff09; 原理 支持向量机是一种监督学习模型&#xff0c;适用于分类和回归任务。SVM 的目标是找到一个能够最大化类别间间隔的超平面&#xff0c;以便更好地对数据进行分类。对于非线性数据&#xff0c;SVM 通过核技巧…

C语言程序设计17

程序设计17 问题17_1代码17_1结果17_1 问题17_2代码17_2结果17_2 问题17_3代码17_3结果17_3 问题17_1 下列给定程序的功能是 &#xff1a;调用函数 f u n fun fun 将指定源文件中的内容复制到指定的目标文件中&#xff0c;复制成功时函数返回 1 1 1 &#xff0c;失败时返回 …

Brant-2:开启脑信号分析新篇章的基础模型

人工智能咨询培训老师叶梓 转载标明出处 脑信号&#xff0c;包括通过侵入性或非侵入性方式收集的脑电图&#xff08;EEG&#xff09;和立体脑电图&#xff08;SEEG&#xff09;等生物测量信息&#xff0c;为我们理解大脑的生理功能和相关疾病的机制提供了宝贵的洞见。然而脑信号…

vue3+cesium创建地图

1.我这边使用的是cdn引入形式 比较简单的方式 不需要下载依赖 在项目文件的index.html引入 这样cesium就会挂载到window对象上面去了 <!-- 引入cesium-js文件 --><script src"https://cesium.com/downloads/cesiumjs/releases/1.111/Build/Cesium/Cesium.js"…

Java二十三种设计模式-外观模式(9/23)

外观模式&#xff1a;简化复杂系统的统一接口 引言 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供一个统一的高层接口。外观模式定义了一个可以与复杂子系统交互的简化接口&#xff0c;使得子系统更加易于使用…

科研绘图系列:R语言GWAS曼哈顿图(Manhattan plot)

介绍 曼哈顿图(Manhattan Plot)是一种常用于展示全基因组关联研究(Genome-Wide Association Study, GWAS)结果的图形。GWAS是一种研究方法,用于识别整个基因组中与特定疾病或性状相关的遗传变异。 特点: 染色体表示:曼哈顿图通常将每个染色体表示为一个水平条,染色体…

Git 基础操作手册:轻松掌握常用命令

Git 操作完全手册&#xff1a;轻松掌握常用命令 引言一、暂存&#xff1a;git add ✏️二、提交&#xff1a;git commit &#x1f4dd;三、拉取、拉取合并 &#x1f504;四、推送&#xff1a;git push &#x1f310;五、查看状态&#xff1a;git status &#x1f4ca;六、查看历…

第09课 Scratch入门篇:小鸡啄米-自制积木实现

小鸡啄米-自制积木 故事背景&#xff1a; 在上一章的案例中&#xff0c;实现了小鸡啄米的动画&#xff0c;但是发现太多的重复代码&#xff0c;是我们编程的时候代码泰国繁琐&#xff0c;我们可以使用自制积木&#xff0c;将相同的代码提取出来制作成一个新的积木&#xff0c;在…

ESP32CAM人工智能教学17

ESP32CAM人工智能教学17 内网穿透,视频上云 小智一心想让ESP32Cam视频能发送到云端,这样我们在任何地方,都能查看到家里的摄像头了,甚至能控制摄像头的小车了。 内网穿透的技术原理想要让ESP32Cam把视频发送到云端,就必须要做内网穿透。也就是用户的手机(或电脑),可以…

Windows中如何配置Gradle环境变量?

本篇教程,主要介绍,如何在Windows中配置Gradle7.4环境变量 一、下载安装包 安装包下载;gradle-7.4-all.zip 二、解压安装包

Python基础知识笔记---保留字

保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。 一、保留字概览 二、保留字用途 1. False&#xff1a;表示布尔值假。 2. None&#xff1a;表示空值或无值。 3. True&#xff1a;表示布尔值真。 4. not&#xff1a;布尔逻辑操作符…

LabVIEW 使用 I/O 服务器

I/O 服务器是共享变量引擎&#xff08;SVE&#xff09;插件&#xff0c;用于与不使用NI专有的NI发布-订阅协议&#xff08;NI-PSP&#xff09;的设备和应用程序通信。I/O 服务器充当LabVIEW VI中的共享变量与OPC、Modbus或EPICS数据标签之间的桥梁。它们插入SVE中&#xff0c;提…

生成式人工智能最重要的三个神经网络,从谷歌DeepDream、Magenta、到NVIDIA的StyleGAN

神经网络模型&#xff08;Neural Network Model&#xff09;是一种受生物大脑启发的机器学习模型&#xff0c;用于模拟人脑的结构和功能。它由大量相互连接的人工神经元&#xff08;节点&#xff09;组成&#xff0c;这些神经元按层级结构排列&#xff0c;通常包括输入层、隐藏…

OSI七层网络模型:构建网络通信的基石

在计算机网络领域&#xff0c;OSI&#xff08;Open Systems Interconnection&#xff09;七层模型是理解网络通信过程的关键框架。该模型将网络通信过程细分为七个层次&#xff0c;每一层都有其特定的功能和职责&#xff0c;共同协作完成数据从发送端到接收端的传输。接下来&am…

制品库nexus

详见&#xff1a;Sonatype Nexus Repository搭建与使用&#xff08;详细教程3.70.1&#xff09;-CSDN博客 注意事项&#xff1a; 1.java8环境使用nexus-3.69.0-02-java8-unix.tar.gz包 2.java11环境使用nexus-3.70.1-02-java11-unix.tar.gz包 3.注意使用制品库/etc/yum.repos.…

leetcode 1596 每位顾客经常订购的商品(postgresql)

需求 表&#xff1a;Customers ---------------------- | Column Name | Type | ---------------------- | customer_id | int | | name | varchar | ---------------------- customer_id 是该表主键 该表包含所有顾客的信息 表&#xff1a;Orders ---------------------- …

LeetCode 144.二叉树的前序遍历 C写法

LeetCode 144.二叉树的前序遍历 思路&#x1f9d0;&#xff1a; 遍历很简单&#xff0c;但是我们需要开空间进行值的存储&#xff0c;结点个数也可以用递归进行统计&#xff0c;开好空间就可以用数组进行值的存储&#xff0c;注意下标要么用全局&#xff0c;要么指针解引用&…

【Canvas与艺术】五色五角大楼

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>五L莫比乌斯五角大楼</title><style type"text/css&qu…

解决国内 github.com 打不开进不去的方法

解决国内 github.com 打不开进不去的方法 修改host文件 电脑的hosts文件在下面这个地址&#xff0c;找到hosts文件 C:\Windows\System32\Drivers\etc 右键点击hosts文件,选择复制,然后粘贴到桌面上。右键点击桌面上的hosts文件,选择“用记事本打开该文件”,hosts 文件中需要写…