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:
⑴编辑视图
高级视图_HttpResponse对象

⑵访问
高级视图_HttpResponse对象


例1_1:其实例1中的写法就是相当于最开始介绍的
⑴编辑视图
高级视图_HttpResponse对象

⑵查看HttpResponse源码
高级视图_HttpResponse对象

注:
1、可以看到其实HttpResponse对象的第一个参数就是content。例1中的写法其实就是将content分开来写了(所以例1中的写法意义不大)

2、当然HttpResponse的对象也可以用来返回一个HTML模板,只是说返回模板时不怎么用HttpResponse对象来返回,直接用render()方法简便的多(前面的"模板系统"那章有介绍)

 

status_code

1、作用:用于设置返回状态码

2、一般情况下,服务器成功响应时状态码为200,服务器错误时响应状态码是400等等

例2:
⑴查看源码
高级视图_HttpResponse对象

⑵编辑视图
高级视图_HttpResponse对象

⑶访问
高级视图_HttpResponse对象

 

content_type

作用:用于标记返回的content是一个什么样的类型。如果没有设置content_type属性的话,就默认返回的是一个text/html类型
    ⑴也就是告诉浏览器返回的是一个html文本,那么浏览器就会把这个字符串用html的方式来进行解析和渲染

例3:
⑴编辑视图
高级视图_HttpResponse对象

⑵访问
高级视图_HttpResponse对象

例3_1:
⑴编辑视图
高级视图_HttpResponse对象

⑵访问
高级视图_HttpResponse对象

注:
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:
⑴编辑视图
高级视图_HttpResponse对象

⑵访问
高级视图_HttpResponse对象

注:
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:
⑴编辑视图
高级视图_HttpResponse对象

⑵访问
高级视图_HttpResponse对象

注:
1、当然write方法还有其他用处,比如在处理CSV文件时,这个后面介绍

2、set_cookie和delete_cookie方法都是用于处理cookie的,这个后面会单独介绍cookie

 

 

拓展

下面两个例子只是自己想到的场景来写的,所以应该有错误或者不对的地方

例6:视图函数为接口性质

⑴编辑视图
高级视图_HttpResponse对象

⑵请求数据
高级视图_HttpResponse对象

⑶查看响应头
高级视图_HttpResponse对象


 

例7:返回HTML模板

⑴编辑视图高级视图_HttpResponse对象

⑵编辑模板
高级视图_HttpResponse对象

⑶访问

高级视图_HttpResponse对象

⑷请求
高级视图_HttpResponse对象

⑸查看响应头
高级视图_HttpResponse对象

 

 

 

 


 

相关文章:

  • 2022-12-23
  • 2021-06-18
  • 2021-06-11
  • 2022-12-23
  • 2022-12-23
  • 2021-11-27
  • 2021-09-24
猜你喜欢
  • 2021-12-01
  • 2021-08-29
  • 2022-01-29
  • 2021-05-31
  • 2021-05-11
  • 2021-09-08
  • 2022-02-25
相关资源
相似解决方案