Django接受json_django获取post数据

Django接受json_django获取post数据HttpResponse对象Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest对象传给视图函数。那么视图函数在处理完相关的逻辑后,也需要返回一个响

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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类

用来将对象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格式

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

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

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


相关推荐

  • “电梯汇报”方法

    “电梯汇报”方法将问题通过:时间维度、空间维度、立体维度三个方面立体的表达。      时间维度:比如“昨天、今天、明天”“过去、现在、将来”等      空间维度:比如“国内、国外”“北京、上海、深圳”等      立体维度:比如“XXX方面”“XXX进展””“XXX风险”

    2022年5月5日
    37
  • 【原创】婚前男女必看的一本好书 —— 《男人这东西》 BY:渡边淳一

    【原创】婚前男女必看的一本好书 —— 《男人这东西》 BY:渡边淳一

    2021年8月16日
    87
  • docker搭建kafka集群[通俗易懂]

    docker搭建kafka集群[通俗易懂]docker搭建kafka集群我在M1mbp上使用的以下镜像新建文件zk-kafka-docker-compose.ymlversion:”2″services:zookeeper:user:rootimage:docker.io/zookeeperports:-“12181:2181″environment:-ALLOW_ANONYMOUS_LOGIN=yesvolumes:-zoo

    2022年4月25日
    29
  • 如何理解掩码、反掩码、通配符「建议收藏」

    如何理解掩码、反掩码、通配符「建议收藏」反掩码、掩码和通配符的区别一、掩码在掩码中,1表示精确匹配,0表示随机1和0,永远不交叉;1永远在左边,0永远在右边;在配置IP地址以及路由的时候,会使用掩码;二、反掩码在反掩码中,1表示随机,0表示精确匹配0和1,永远不交叉;0永远在左边,1永远在右边;在路由协议的配置中,通过network命令进行网段宣告时,会使用三、通配符在统配符中,1表示随机,0表示精确匹配0和1的位置,没有任何的固定限制可以连续,可以交叉在ACL中,使用的通配符通配符掩码表CIDR子网掩码反掩

    2022年7月19日
    11
  • php获取前一天,前一个月,前一年的时间[通俗易懂]

    php获取前一天,前一个月,前一年的时间

    2022年1月18日
    38
  • jdk下载与安装[通俗易懂]

    1.JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html安装完成后,需要进行环境变量的配置,右键我的电脑—属性—-高级系统设置就会看到下面的界面:2.点击环境变量,开始坏境变量的配置:(1)点击系统变量下的新建按钮,变量名JAVA_HOME(代表你的JDK安装路径),值对应的是你的JDK的安装路径。(2)继续在系统变量里面新建一个CLASSPATH变量,其变量值如下图所示:….

    2022年4月3日
    42

发表回复

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

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