Django(26)HttpResponse对象和JsonResponse对象「建议收藏」

Django(26)HttpResponse对象和JsonResponse对象「建议收藏」HttpResponse对象Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest对象传给视图函数。那么视图函数在处理完相关的逻辑后,也需要返回一个响


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

HttpResponse对象

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

常用属性

  • content:返回的内容。
  • status_code:返回的HTTP响应状态码。
  • 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['X-Access-Token'] = 'xxxx'。
     

常用方法

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

JsonResponse类

用来将对象dump成json字符串,然后返回将json字符串封装成Response对象返回给浏览器。并且他的Content-Type是application/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_params为None,kwargs设定一个默认值content_type='application/json',规定了返回的是json格式,最后把字典格式的数据转换成json格式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165452.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 计算机保护插件无法安装,电脑无法安装ActiveX控件怎么办「建议收藏」

    计算机保护插件无法安装,电脑无法安装ActiveX控件怎么办「建议收藏」ActiveX控件是网站常用的一款网页辅助工具,有时候我们可能需要安装它,但是却发现浏览器阻止了它安装,那么你知道电脑无法安装ActiveX控件怎么办吗?下面是学习啦小编整理的一些关于电脑无法安装ActiveX控件的相关资料,供你参考。电脑无法安装ActiveX控件的解决方法:1、首先建议将相应网站加入可信站点。2、其次建议选中可信站点。自定义级别——找到“下载未签名的ActiveX控件”——选中…

    2022年5月14日
  • h5页面 请在微信客户端打开链接_如何看到“请在微信客户端打开链接”页面的源码?…

    h5页面 请在微信客户端打开链接_如何看到“请在微信客户端打开链接”页面的源码?…在H5学习的过程中,看一些好的H5是很有必要的。但是经常有一些H5打开以后在页面显示如下,阻碍了我们探索的脚步~这是因为H5的开发者调用了微信获取用户信息的权限,这个时候你在浏览器打开获取不到微信用户的信息,自然会出现这样的页面了。但是,如果你探索的欲望比较强,那么也是可以看到源码的~具体步骤如下:①安装微信web开发者工具②在手机端打开你要查看的页面,复制页面的链接③进入微信web开发者工具,选…

    2022年6月7日
  • RTP协议头详解

    RTP协议头详解1.RTP协议RTP:即可心跑在TCP也可以跑在UDP上,实时流协议,所以通常是跑在UDP上。前12个字节出现在每个RTP包中,仅仅在被混合器插入时,才出现CSRC识别符列表。各个域的含义如下所示:(1)版本(V):2比特,此域定义了RTP的版本。此协议定义的版本是2。(值1被RTP草案版本使用,值0用在最初”vat”语音工具使用的协议中。)(2)填充(P):1比特,若填料比特被设置,则此包包含一到多个附加在末端的填充比特,填充比特不算作负载的一部分。填

    2022年6月28日
  • layoutparams方法_LAYOUT

    layoutparams方法_LAYOUT沙翁向昨天要经验;向今天要结果;向明天要动力Android开发:LayoutParams的用法LayoutParams继承于Android.View.ViewGroup.LayoutParams.    LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。假设在屏幕上一块区域是由一个Layout

    2022年9月21日
  • elasticsearch.bat闪退的解决方案

    elasticsearch.bat闪退的解决方案

    2022年2月19日
  • 推荐算法中的MF, PMF, BPMF[通俗易懂]

    推荐算法中的MF, PMF, BPMF[通俗易懂]1.矩阵分解(MF)目前推荐系统中用的最多的就是矩阵分解方法,在NetflixPrize推荐系统大赛中取得突出效果。以用户-项目评分矩阵为例,矩阵分解就是预测出评分矩阵中的缺失值,然后根据预测值以某种方式向用户推荐。常见的矩阵分解方法有基本矩阵分解(basicMF),正则化矩阵分解)(RegularizedMF),基于概率的矩阵分解(PMF)等。利用代数中SVD方法对矩阵进行分解。奇异值

    2022年5月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号