HttpResponse对象

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

常用属性

  1. content:返回的内容。
  2. status_code:返回的HTTP响应状态码。
  3. 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文件)
  4. 设置请求头:response['X-Access-Token'] = 'xxxx'

常用方法

  1. set_cookie:用来设置cookie信息。
  2. delete_cookie:用来删除cookie信息。
  3. write:HttpResponse是一个类似于文件的对象,可以用来写入数据到数据体(content)中。

JsonResponse类

用来将对象dumpjson字符串,然后返回将json字符串封装成Response对象返回给浏览器。并且他的Content-Typeapplication/json。示例代码如下:

from django.http import JsonResponse
def index(request):
return JsonResponse({"username":"jkc","age":18})

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

def index(request):
list1 = [
{"username": "jkc", "age": 18},
{"username": "a", "age": 20},
{"username": "b", "age": 22},
]
return JsonResponse(list1, safe=False)

上述代码我们定义了一个列表,当我们想要把非字典格式的数据进行dump,那么就需要添加参数safe=False

JsonResponse类源码分析

class JsonResponse(HttpResponse):
"""
An HTTP response class that consumes data to be serialized to JSON. :param data: Data to be dumped into json. By default only ``dict`` objects
are allowed to be passed due to a security flaw before EcmaScript 5. See
the ``safe`` parameter for more information.
:param encoder: Should be a json encoder class. Defaults to
``django.core.serializers.json.DjangoJSONEncoder``.
:param safe: Controls if only ``dict`` objects may be serialized. Defaults
to ``True``.
:param json_dumps_params: A dictionary of kwargs passed to json.dumps().
""" def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
json_dumps_params=None, **kwargs):
if safe and not isinstance(data, dict):
raise TypeError(
'In order to allow non-dict objects to be serialized set the '
'safe parameter to False.'
)
if json_dumps_params is None:
json_dumps_params = {}
kwargs.setdefault('content_type', 'application/json')
data = json.dumps(data, cls=encoder, **json_dumps_params)
super().__init__(content=data, **kwargs)

我们可以看到JsonResponse是继承于HttpResponse,写了一个初始化方法,方法中有5个参数

  • data:需要转换的数据
  • encoder:json编码器
  • safe:控制是否只有dict对象可以序列化,默认为True
  • json_dumps_params:字典通过json.dumps()转化

中间代码的翻译是:如果safe设置为True并且data的数据类型不是dict,那么抛出一个TypeError类型错误,如果json_dumps_paramsNonekwargs设定一个默认值content_type='application/json',规定了返回的是json格式,最后把字典格式的数据转换成json格式

Django(26)HttpResponse对象和JsonResponse对象的更多相关文章

  1. django基础2: 路由配置系统,URLconf的正则字符串参数,命名空间模式,View(视图),Request对象,Response对象,JsonResponse对象,Template模板系统

    Django基础二 request request这个参数1. 封装了所有跟请求相关的数据,是一个对象 2. 目前我们学过1. request.method GET,POST ...2. reques ...

  2. Django day05 视图层之 (HttpRequest) \ (HttpResponse) \ (JsonResponse) 对象

    一:视图层之HttpRequest对象 # 前台Post传过来的数据,包装到POST字典中 # request.POST # 前台浏览器窗口里携带的数据,包装到GET字典中 # request.GET ...

  3. Django框架之第四篇(视图层)--HttpRequest对象、HttpResponse对象、JsonResponse、CBV和FBV、文件上传

    视图层 一.视图函数 一个视图函数,简称视图,是一个简单的python函数,它接收web请求并且会返回web响应.响应可以是一张网页的html,一个重定向,或者是一张图片...任何东西都可以.无论是什 ...

  4. Request对象和Response对象 JsonResponse对象 和 Django shortcut functions 和QueryDict对象

    request request属性 属性: django将请求报文中的请求行.头部信息.内容主体封装成 HttpRequest 类中的属性. 除了特殊说明的之外,其他均为只读的. ''' 0.Http ...

  5. django的HttpResponse对象

    服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以.视图的第一个参数必须是HttpRequest对象,在django. ...

  6. python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)

    12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...

  7. 运维开发笔记整理-JsonResponse对象

    运维开发笔记整理-JsonResponse对象 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用HttpResponse发送json格式的数据 1>.HttpRespo ...

  8. 【转】Django中的request与response对象

    关于request与response 前面几个 Sections 介绍了关于 Django 请求(Request)处理的流程分析,我们也了解到,Django 是围绕着 Request 与 Respon ...

  9. django 视图函数返回queryset对象或日期对象至浏览器ajax接收的写法

    class MyDateTimeEncode(json.JSONEncoder): def default(self, o): if isinstance(o, datetime): return o ...

随机推荐

  1. C语言函数调用完整过程

    C语言函数调用详细过程 函数调用是步骤如下: 按照调用约定传参 调用约定是调用方(Caller)和被调方(Callee)之间按相关标准 对函数的某些行为做出是商议,其中包括下面内容: 传参顺序:是从左 ...

  2. 【MCU】国民N32固件库移植

    目录 前言 移植N32Gxxx系列要点 前言 链接: 李柱明博客 移植AT32库&FreeRTOS教程 由于大部分国产MCU移植固件库.RTOS源码都是差不多的,所以本文不讲细节,如想熟悉移植 ...

  3. Go 语言入门教程,共32讲,6小时(已完结)

    Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/

  4. 使用sysbench测试mysql及postgresql(完整版)

    使用sysbench测试mysql及postgresql(完整版) 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14592166.html 前言 使用sysbe ...

  5. 解决wampserver 服务无法启动

    如图左击选中apache的httpd.conf把文本中的80端口,改成未被占用的端口.

  6. JS基础学习第三天

    条件分支语句switch语句语法: 1234567891011121314 switch(条件表达式){ case 表达式: 语句... break; case 表达式: 语句... break; c ...

  7. 201871010130-周学铭 实验二 个人项目—D{0-1}问题项目报告

    项目 内容 课程班级博客链接 18级卓越班 这个作业要求链接 实验二 软件工程个人项目 我的课程学习目标 掌握软件项目个人开发流程.掌握Github发布软件项目的操作方法. 这个作业在哪些方面帮助我实 ...

  8. leetcode 刷题(数组篇)11题 盛最多水的容器(双指针)

    题目描述 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) .找出其 ...

  9. 1.jsp-out和response输出的区别

    jsp中代码: out.write("out输出1 <br/>"); out.write("out输出2 <br/>"); respon ...

  10. SecureCRT 连接Win10内置ubuntu问题及解决办法

    1: 输入hostname, username 后连接提示: ubuntu The remote system refused the connection. 因为没有安装或启动 ssh.  使用命令 ...