django之HTTPResponse和JsonResponse详解
HttpResponse对象
Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest
对象传给视图函数。那么视图函数在处理完相关的逻辑后,也需要返回一个响应给浏览器。而这个响应,我们必须返回HttpResponseBase
或其子类的对象。而HttpResponse
则是HttpResponseBase
用得最多的子类。那么接下来就来介绍一下HttpResponse
及其子类,HttpResponse对象的属性和HTTPRequest对象的属性不同,HTTPResponse对象的属性是由服务端发送给浏览器的,所以很多属性都是由我们自己设置的。
常用属性:
- content:返回的内容。
- status_code:返回的HTTP响应状态码。
响应头:
- Content-Encoding:指定报文主体已经采用的编码方式,注意这个编码方式必须在request的Accept-Encoding中存在,否则客户端将无法解析报文主体。
- Content-Length:报文主体的长度。
- Transfer-Encoding: 用于指定传输报文主体时使用的编码方式,(传输过程中的编码格式,代理服务器之间)
- content_type:返回的数据的MIME类型,默认为
text/html
。浏览器会根据这个属性,来显示数据。如果是text/html
,那么浏览器就会把content属性中的内容按照HTML格式解析,如果text/plain
,那么就会显示一个纯文本。常用的Content-Type
如下:- text/html(默认的,html文件)
- text/plain(纯文本)
- text/css(css文件)
- text/csv (csv文件)
- text/javascript(js文件)
- multipart/form-data(文件提交)
- application/json(json传输)
- application/xml(xml文件)
- application/vnd.ms-excel (excel文件)
常用方法:
- set_cookie:用来设置
cookie
信息。后面讲到授权的时候会着重讲到。 - delete_cookie:用来删除
cookie
信息。 - write:
HttpResponse
是一个类似于文件的对象,可以用来写入数据到数据体(content)中,新写入的内容会在原先content之后。 - 设置响应头,通过设置字典的方式设置响应头,例如我们可以设置一些csrftoken相关的验证信息到响应头:
response['X-Access-Token'] = 'xxxx',我们也可以在response生成csv或者Excel文件时,设置相应的响应头来描述生成的文件信息:response['Content-Disposition'] = 'attachment;filename="abc.xls"'
JsonResponse类:
如果不使用JsonResponse,只使用HttpResponse,我们想要返回一个json字符串也是可行的,要点有两个:
1、把content中要返回的内容是由json模块dumps成json字符串
2、设置content_type为'application/json'
示例代码如下:
from django.http import HttpResponse def jsonresponse_view(request):
person = {
'name': 'xdm',
'age': 19
}
person_str = json.dumps(person)
response = HttpResponse(person_str , content_type='application/json; charset=utf-8')
return response
上面原生的方式可以解决返回json字符串的需求,注意使用HTTPResponse时,我们需要把返回的数据先dumps成json字符串。如果我们直接使用JsonResponse方式会更简单,实质上JsonResponse也是继承HttpResponse,其内部处理和上面我们演示的原理相同,也是把content内容先dumps成json字符串,content_type='application/json'这两个规则,此时,在使用时直接返回可以dumps的content数据即可,不需要自己再去做dumps操作。示例代码如下:
from django.http import JsonResponse def jsonresponse_view(request):
person = {
'name': 'xdm',
'age': 19
}
response = JsonResponse(person)
return response
默认情况下JsonResponse
只能对字典进行dumps
,如果想要对非字典的数据进行dumps
,那么需要给JsonResponse
传递一个safe=False
参数。示例代码如下:
from django.http import JsonResponse
def index(request):
persons = ['张三','李四','王五']
return HttpResponse(persons)
以上代码会报错,应该在使用HttpResponse
的时候,传入一个safe=False
参数,示例代码如下:
return HttpResponse(persons,safe=False)
django之HTTPResponse和JsonResponse详解的更多相关文章
- Django路由配置之正则表达式详解
正则表达式详解 urls.py from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles ...
- Django之form表单详解
构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method=" ...
- Django(十一)视图详解:基本使用、登录实例、HttpReqeust对象、HttpResponse对象
一.视图(基于类的视图) [参考]https://docs.djangoproject.com/zh-hans/3.0/topics/class-based-views/intro/ 1)视图的功能 ...
- django中的路由控制详解
一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 一 Django中路由的作用 URL配置(URLconf) ...
- Django基础,Day4 - views 详解
在Django中,网页和其他内容是通过视图传递的.每个视图由一个简单的Python函数表示,Django将通过检查请求的URL(准确地说,是域名后面的部分URL)来选择一个视图. 例如,用户在浏览器中 ...
- 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)
Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...
- Django中url的生成过程详解
在前面我们知道,Django启动之前会执行admin.py中的autodiscover()方法. def autodiscover(): autodiscover_modules('admin', r ...
- django url 中的namespace详解
[引子] django是一个比较全能的web框架,比如它实现了自己的orm模型来对接不同的数据库.并提供了方便的数据接口:django牛逼的地方 还有许多,如他实现了自己的模板语言,这样我们就能方便的 ...
- Django学习之站点缓存详解
本文和大家分享的主要是django缓存中站点缓存相关内容,一起来看看吧,希望对大家学习django有所帮助. 缓存整个站点,是最简单的缓存方法 在 MIDDLEWARE_CLASSES 中加入 “ ...
随机推荐
- 关于VMware给系统分区扩容的一点经验
我的VMware版本是8.0.6 build-1035888,里面安装的是Windows XP SP3 首先,在VM关机状态下使用Hard disk设置中的Utilities下的Expand给整个磁盘 ...
- Spring Java配置
Java配置 Java配置是Spring 4.x推荐的配置方式,可以完全替代xml配置:Java配置也是Sping Boot 推荐的配置方式.Java配置是通过@Configuration和@Bean ...
- php curl使用总结(一)
今天和第三方支付做对接的时候,在本地用wamp(php版本5.4.14)运行他们的支付demo的时候,报了一个错误.loadXML函数中不能传空值.排查代码的时候,发现他们用了curl,我以前也接触过 ...
- 安装ubuntu-tweak
第一步:添加tweak源 sudo add-apt-repository ppa:tualatrix/ppa 第二步:更新 sudo apt-get update 第三步:安装ubuntu-t ...
- 离散外微积分(DEC:Discrete Exterior Calculus)基础
原文链接 “若人们不相信数学简单,只因为他们未意识到生命之复杂.”——Johnvon Neumann DEC主要讨论离散情况下的外积分,它在计算机领域有重要用途.我们知道,使用计算机来处理几何图形的时 ...
- 第28章 LTDC—液晶显示中英文—零死角玩转STM32-F429系列
第28章 LTDC—液晶显示中英文 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/f ...
- git(osChina上分支的使用)
使用osChina分支的创建分为两种 1.直接在osChina上创建 需要pull否则查看git的状态是不包含改分支的; git pull <git地址/git简称> <分支名> ...
- Javascript简单特效及摘要
1.js中的Element对象 ** var input1=docuemnt.getElementById("input1"); //alert(input1.value); // ...
- 第三章 文件 I/O
3.1 引言 先说明可用的文件 I/O 函数:open.read.write.close,然后说明不同缓冲区长度对read和write函数的影响. 本章所说的函数经常被称为不带缓冲的 I/O (unb ...
- POJ:3258-River Hopscotch
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17740 Accepted: 7414 Desc ...