Django的响应对象

【图书介绍】《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://xiahunao.cn/news/3280368.html

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

相关文章

react中zuStand状态管理工具使用

一、zuStand的基本使用 1.安装工具 npm install zustand 2.新建文件 在src下新建store文件夹&#xff0c;在store文件夹下新建zuStand.js文件 3.配置zuStand.js // 1.引入创建方法 import { create } from "zustand";// 2.创建store const useStore create((s…

hive 中编写生成连续月sql

记录一下 sql 编写生成从一个确定的起始月份到当前月份的连续月份序列 SELECT substr(add_months(table1.start_dt,table2.pos),1,4) AS INDICT_YEAR,substr(add_months(table1.start_dt,table2.pos),1,7) AS INDICT_MON FROM (SELECT 2024-01-01 AS start_dt,substr(CURRE…

vue3+cesium创建地图

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

【云原生】Kubernetes中的定时任务CronJob的详细用法与企业级应用案例分享

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

数据库安全:MySQL文件权限的安全问题和解决方案

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

Java8新特性之Stream-Map

Map一些新方法的具体使用案例 1、getOrDefault:default V getOrDefault(Object key, V defaultValue) package com.qbb.threadpool;import java.util.HashMap; import java.util.Map;/*** author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)* version 1.0* date…

从功能出发:优化超市商品陈列,助力销售额提升

随着时代的发展&#xff0c;竞争的加剧&#xff0c;人们的生活节奏加快&#xff0c;时间观念越来越强。在这种情形下&#xff0c;作为超市&#xff0c;怎样为顾客提供一个舒适方便的购物环境&#xff0c;尽可能让顾客逛完整个卖场&#xff0c;满足一站式购足呢&#xff1f;除了…

外卖项目day10---缓存商品/Spring Cache初学、购物车功能

缓存菜品&#xff0c;只需要在DishController中修改一下代码即可 /*** 菜品管理*/ RestController RequestMapping("/admin/dish") Api(tags "菜品相关接口") Slf4j public class DishController {Autowiredprivate DishService dishService;Autowiredpri…

【前端面试】七、算法-递归

遍历方法总结 链式调用 数组的很多操作可以构成链式操作&#xff0c;类似这样的格式&#xff1a;…map().filter(…).sort(…).map(….)链式操作就是对象方法返回类型是自身的。比如map是属于数组的方法&#xff0c;它返回数组&#xff0c;所以构成了链式操作优势&#xff1a;…

The Llama 3 Herd of Models 第4部分后训练的全文

Llama 3前三部分包括介绍、总体概述和预训练https://blog.csdn.net/qq_51570094/article/details/140682445?spm=1001.2014.3001.5501 4 Post-Training 后训练 我们通过应用几轮后训练6或将模型与人类反馈对齐来生成对齐的Llama 3模型(Ouyang等人,2022;Rafailov等人,2024)在…

Null Pointer Exception: 如何快速定位和修复?️

Null Pointer Exception: 如何快速定位和修复&#xff1f;&#x1f4a1;&#x1f6e0;️ Null Pointer Exception: 如何快速定位和修复&#xff1f;&#x1f4a1;&#x1f6e0;️摘要引言正文内容什么是Null Pointer Exception&#xff1f;&#x1f914;NPE的常见原因&#x1f…

使子查询可行

使用 子查询 时&#xff0c;行为或要求可能不会保存为普通查询。 此查询有效&#xff1a; 但是&#xff0c;作为子查询&#xff0c;它不再起作用&#xff1a; 原因是子查询需要别名&#xff1a;当我们添加它时&#xff0c;原来的错误消失了&#xff0c;但又出现了新的错误&…

springboot集成thymeleaf实战

引言 笔者最近接到一个打印标签的需求&#xff0c;由于之前没有做过类似的功能&#xff0c;所以这也是一次学习探索的机会了&#xff0c;打印的效果图如下&#xff1a; 这个最终的打印是放在58mm*58mm的小标签纸上&#xff0c;条形码就是下面的35165165qweqweqe序列号生成的&…

FPGA知识基础之--按键控制LED灯项目

文章目录 前言一、按键简介按键:通过按下或者释放来控制电路通断的电子元件按键原理图 二、实验要求三、程序设计3.1思路整理3.2 模型搭建3.3 顶层模块3.4 波形分析 四、代码整理4.1RTL代码4.2 仿真只需在Testbench上增加上述一段代码即可将参数实例化,可达到在Testbench上更改…

卷积神经网络的入门基本介绍 | 带你快速上手各种概念【附图解】

文章目录 1、简介2、核心概念3、关键操作4、常见架构5、训练过程6、重要概念图解⭐6.1、卷积神经网络工作⭐6.2、卷积核6.3、全连接与卷积网络的对比6.4、池化层6.5、感受野和卷积堆叠6.6、神经元计算和激活函数 7、卷积网络可以改进的地方8、结论 &#x1f343;作者介绍&#…

vue3集成LuckySheet实现导入本地Excel进行在线编辑

第一步&#xff1a;克隆或者下载下面的代码 git clone https://github.com/dream-num/Luckysheet.git第二步&#xff1a;安装依赖 npm install npm install gulp -g 第三步&#xff1a;运行 npm run dev效果如下图所示 第四步&#xff1a;打包 打包执行成功后&#xff0c;…

TypeError: Components is not a function

Vue中按需引入Element-plus时&#xff0c;报错TypeError: Components is not a function。 1、参考Element-plus官方文档 安装unplugin-vue-components 和 unplugin-auto-import这两款插件 2、然后需要在vue.config.js中配置webPack打包plugin配置 3、重新启动项目会报错 T…

程序员开发指南

在这个快节奏的时代&#xff0c;作为一名程序员&#xff0c;大家都希望能更快地开发出高质量的应用&#xff0c;而不是花费大量时间在基础设施和后台服务的搭建上。今天&#xff0c;我要向大家介绍一款专为懒人开发者准备的一站式开发应用的神器——MemFire Cloud。 一站式开发…

制品库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.…