Django 中HttpResponse对象

Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest对象传给视图函数。那么视图函数在处理完相关的逻辑后,也需要返回一个响应给浏览器。而这个响应,我们必须返回HttpResponseBase或者他的子类的对象。而HttpResponse则是HttpResponseBase用得最多的子类。那么接下来就来介绍一下HttpResponse及其子类。

常用属性:

  1. content:返回的内容。
    response = HttpResponse()
    response.content = '知了课堂'
    return response
  1. status_code:返回的HTTP响应状态码。
    默认是200,也可以自行设置
response.status_code = 400

常见状态码表达意思:

1xx开头:指示信息–表示请求已接收,继续处理

100:客户端的请求已被服务器端正确接收。客户端可以采取继续发送或者或略此响应。
101:服务器理解了客户的请求,并且通过Upgrade消息头通知客户端采用不同协议完成这个请求。

2xx开头:请求被服务器端正确处理。

200      交易成功
201      提示知道新文件的URL
202      接受和处理、但处理未完成
203      返回信息不确定或不完整
204      请求收到,但返回信息为空
205      服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206      服务器已经完成了部分用户的GET请求

3xx开头:重定向。

300      请求的资源可在多处得到
301      永久重定向,在Location响应首部的值仍为当前URL(隐式重定向)
302      临时重定向,在Location响应首部的值仍为新的URL(显示重定向)
303      建议客户端访问其他URL或访问方式
304      Not Modified 请求的资源没有改变 可以继续使用缓存
305      请求的资源必须从服务器指定的地址得到
306      前一版本HTTP中使用的代码,现行版本中不再使用
307      声明请求的资源临时性删除

4xx开头:客户端错误:

400      错误请求,如语法错误
401      未授权
   HTTP 401.1    未授权,登录失败
   HTTP 401.2    未授权,服务器配置问题导致登录失败
   HTTP 401.3    ACL  禁止访问资源
   HTTP 401.4    未授权  授权被筛选器拒绝
   HTTP 401.5    未授权  ISAPI或CGI授权失败
402      保留有效ChargeTo头响应
403      禁止访问
   HTTP 403.1    禁止访问  禁止可执行访问
   HTTP 403.2    禁止访问  禁止读访问
   HTTP 403.3    禁止访问  禁止写访问
   HTTP 403.4    禁止访问  要求SSL
   HTTP 403.5    禁止访问  要求SSL 128
   HTTP 403.6    禁止访问  IP地址被拒绝
   HTTP 403.7    禁止访问  要求客户端证书
   HTTP 403.8    禁止访问  禁止站点访问
   HTTP 403.9    禁止访问  连接的用户过多
   HTTP 403.10   禁止访问  配置无效
   HTTP 403.11   禁止访问  密码更改
   HTTP 403.12   禁止访问  映射器拒绝访问
   HTTP 403.13   禁止访问  客户端证书已被吊销
   HTTP 403.15   禁止访问  客户端访问许可过多
   HTTP 403.16   禁止访问  客户端证书不可信或者无效
   HTTP 403.17   禁止访问  客户端证书已经到期或者尚未生效
404       没有发现文件、查询或URL
405       用户在Request-Line字段定义的方法不允许
406       根据用户发送的Accept拖,请求资源不可访问
407       类似401,用户必须首先在代理服务器上得到授权
408       客户端没有在用户指定的饿时间内完成请求
409       对当前资源状态,请求不能完成
410       服务器上不再有此资源且无进一步的参考地址
411       服务器拒绝用户定义的Content-Length属性请求   
412       一个或多个请求头字段在当前请求中错误
413       请求的资源大于服务器允许的大小
414       请求的资源URL长于服务器允许的长度
415       请求资源不支持请求项目格式
416       请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,       请求也不包含If-Range请求头字段
417       服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长
服务器端错误: 

5xx开头:服务器端的错误

500 - 内部服务器错误
    HTTP 500.100 - 内部服务器错误 
    HTTP 500-11 服务器关闭
    HTTP 500-12 应用程序重新启动
    HTTP 500-13 - 服务器太忙
    HTTP 500-14 - 应用程序无效
    HTTP 500-15 - 不允许请求 
 501 - 未实现
 502 - 网关错误
 503 - 服务不可用
 504 - 网关超时
  1. content_type:
    返回的数据的MIME类型,默认为text/html。浏览器会根据这个属性,来显示数据。如果是text/html,那么就会解析这个字符串,如果text/plain,那么就会显示一个纯文本。常用的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文件)
    示例:
    response = HttpResponse('<h1>知了课堂</h1>')
    return response
    response = HttpResponse('<h1>知了课堂</h1>',content_type='text/plain;charset=utf-8')
    return response

注意: 一般在使用‘text/plain’时,都会添加‘charset=utf-8’,否则是会乱码的。

常用方法:

  1. set_cookie:用来设置cookie信息
  2. delete_cookie:用来删除cookie信息。
  3. write:HttpResponse是一个类似于文件的对象,可以用来写入数据到数据体(content)中。
    示例:
    response = HttpResponse('<h1>知了课堂</h1>',content_type='text/plain;charset=utf-8')
    response.write('zhiliao')
    return response

JsonResponse类:

编写一些接口函数的时候,经常需要给调用者返回json格式的数据,那么如何返回可直接解析的json格式的数据呢?

使用HttpResponsemoni返回一个json。

from django.http import HttpResponse
import json
def jsonresponse_view(request):
    persion = {
        'username':'ziliao',
        'age':18,
        'height':180
    }
    persion_str = json.dumps(persion)
    response = HttpResponse(persion_str,content_type='application/json')
    return response

使用JsonResponse返回一个json。

from django.http import HttpResponse,JsonResponse
def jsonresponse_view(request):
    persion = {
        'username':'ziliao',
        'age':18,
        'height':180
    }
    # persion_str = json.dumps(persion)
    # response = HttpResponse(persion_str,content_type='application/json')
    response = JsonResponse(persion)
    return response

默认情况下JsonResponse只能对字典进行dump,如果想要对非字典的数据进行dump,那么需要给JsonResponse传递一个safe=False参数。示例代码如下:

def jsonresponse_view(request):
    persions = [
        {
            'username': 'ziliao',
            'age': 18,
            'height': 180
        },
        {
            'username': 'ziliao1',
            'age': 20,
            'height': 180
        }
    ]
    # persion_str = json.dumps(persion)
    # response = HttpResponse(persion_str,content_type='application/json')
    response = JsonResponse(persions,safe=False)
    return response

猜你喜欢

转载自blog.csdn.net/xujin0/article/details/84001023