HttpResponse对象
Django服务器接收到客户端发送过来的请求后,会将提交上来的数据封装成httpRequest对象传给视图函数。那么视图处理完相关逻辑后,也需要返回一个响应给浏览器。而这个响应必须返回HttpResponseBase或者他的子类的对象,而HttpResponse就是HttpResponseBase中用得最多的子类对象
⑴在django.http模块中定义了HttpResponse对象的API
⑵HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建
⑶在每一个视图函数中必须返回一个HttpResponseBase对象,当然也可以是HttpResponseBase的子类的对象
⑷HttpResponse对象下面有很多属性和方法,这些属性和方法可以用来对我们的视图函数返回的HttpResponse对象进行一些设置
常用属性
| 属性 | 说明 |
| content | 返回的内容 |
| status_code | 返回状态码 |
| content_type | 返回数据MIME类型,默认为text/html |
| response['X-Access-Token'] = 'xxxx' | 设置请求头(其实我感觉更应该叫响应头,因为它是在响应的header中) |
| charset | 编码的字符集。 如果没指定,将会从content_type中解析出来 |
content_type
content_type说明
⑴用于设置返回数据的MIME类型,默认为text/html
⑵浏览器会根据这个属性,来显示数据,如果是text/html,那么就会解析这个字符串如果text/plain,那么就会显示一个纯文本
⑶常用的content-type如下:
| 属性名 | 说明 |
| text/html | 默认的,html文件 |
| text/plain | 纯文本 |
| text/css | css文件 |
| text/javascript | js文件 |
| multipart/form-data | 文件提交 |
| application/json | json传输 |
| application/xml | xml文件 |
content
作用:用于设置返回的内容(响应内容为字符串时:不用模板,直接返回数据)
例1:
⑴编辑视图
⑵访问
例1_1:其实例1中的写法就是相当于最开始介绍的
⑴编辑视图
⑵查看HttpResponse源码
注:
1、可以看到其实HttpResponse对象的第一个参数就是content。例1中的写法其实就是将content分开来写了(所以例1中的写法意义不大)
2、当然HttpResponse的对象也可以用来返回一个HTML模板,只是说返回模板时不怎么用HttpResponse对象来返回,直接用render()方法简便的多(前面的"模板系统"那章有介绍)
status_code
1、作用:用于设置返回状态码
2、一般情况下,服务器成功响应时状态码为200,服务器错误时响应状态码是400等等
例2:
⑴查看源码
⑵编辑视图
⑶访问
content_type
作用:用于标记返回的content是一个什么样的类型。如果没有设置content_type属性的话,就默认返回的是一个text/html类型
⑴也就是告诉浏览器返回的是一个html文本,那么浏览器就会把这个字符串用html的方式来进行解析和渲染
例3:
⑴编辑视图
⑵访问
例3_1:
⑴编辑视图
⑵访问
注:
1、在设置content_type属性时需要在实例化HttpResponse类时作为参数传入:HttpResponse(content_type="text/plain")
2、字符串文本中存在中文时最好设置下其编码,不然解析到浏览器中后会显示乱码:HttpResponse(content_type="text/plain;charset=utf-8")
设置请求头
1、方法:response['X-Access-Token'] = 'xxxx'
2、可以把HttpResponse对象当作一个字典一样,在其中增加和删除头部字段
3、注意!与字典不同的是,若要删除的头部字段不存在,del不会抛出KeyError异常
例4:
⑴编辑视图
⑵访问
注:
1、在视图函数中设置请求头:最常见的场景就是在做服务器接口(API)的时候,需要前端传入Token。这里的Token就可以在headers中设置
⑴就是,登录成功以后,在响应的headers中设置一个Token给你,然后以后你每次在请求我这个接口的时候,就在请求头中带上这个Token,那么我就可以根据这个Token来判断你是否已经登录了
⑵其实跟后面要介绍的Cookie差不多:只是说如果是Token的话,浏览器在请求的时候不会自动将Token添加到请求头中进行请求而是需要代码来实现这一步,而cookie的话浏览器可以自动添加到请求头中
⑶在视图函数中设置响应头时:响应头的键值对都是我们自定义的
2、比如在前端中使用JS代码将Token添加到请求头中并请求后,那么在视图函数(服务器)中就可以使用HttpRequest对象下的META属性来获得传过来的Token值了:request.META.get("header key")
⑴header key必须大写,前缀必须是"HTTP",后面如果连接符是横线“-”,要改成下划线“_”
⑵例如你的header的key为api_auth,那在Django中应该使用request.META.get("HTTP_API_AUTH")来获取请求头的数据
常用的方法
| 方法 | 说明 |
| set_cookie | 用来设置cookie信息 |
| delete_cookie | 用来删除cookie信息 |
| write | HttpResponse是一个类似于文件的对象,可以用来写入数据到数据体(content)中 |
write方法
作用:可以将response看做一个类文件对象,使用write()方法不断地往里面添加内容
例5:
⑴编辑视图
⑵访问
注:
1、当然write方法还有其他用处,比如在处理CSV文件时,这个后面介绍
2、set_cookie和delete_cookie方法都是用于处理cookie的,这个后面会单独介绍cookie
拓展
下面两个例子只是自己想到的场景来写的,所以应该有错误或者不对的地方
例6:视图函数为接口性质
⑴编辑视图
⑵请求数据
⑶查看响应头
例7:返回HTML模板
⑴编辑视图
⑵编辑模板
⑶访问
⑷请求
⑸查看响应头