首页> 软件工程> 【开发语言】Python--HttpResponse...

[文章]【开发语言】Python--HttpResponse和JsonResponse

收藏
0 613 0

【摘要】

        两个模块都是用于返回数据给前端的,但是在返回数据的时候存在一些细小的差别。为了展示,这里使用单文件的django来进行操作。

【正文】

   HttpResponse

        首先附上单文件django(test1.py)的源码:

    # coding:utf-8

# Data:2019/3/20

from django.conf import settings

from django.http import HttpResponse, JsonResponse

from django.conf.urls import url

import json

setting = {

    'DEBUG': True,

    'ROOT_URLCONF': __name__   # 指定根路由为当前文件里的路由

}

settings.configure(**setting)

def home(request):

    return HttpResponse("Hello world!")

urlpatterns = [

    url('^$', home)

]

if __name__ == '__main__':

    import sys

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

   

    开启项目:

      python test1.py runserver

   

    效果图:

      

  

        上面的结果可以看出,使用HttpResponse返回的内容类型是:text/html,如果要返回json数据,需要使用json模块和将content_type            设置为application/json,只使用json模块是不行的,返回的数据还是text/html

     return HttpResponse(json.dumps({"result": True, "message": "OK"}), content_type="application/json")

   

    效果图:

      

  

   JsonResponse

            如果使用JsonResponse可以省去一些设置,直接返回json数据:

    return JsonResponse({"result": True, "message": "OK"})

   

    效果图:

             

  

         JsonResponse还可以返回非字典类型的数据,例如:列表。不过要进行设置:

      return JsonResponse(['a', 'b', 'v'], safe=False)

   

    效果图:

      

  

   JsonResponse源码如下:

      class JsonResponse(HttpResponse):

        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(JsonResponse, self).__init__(content=data, **kwargs)

    从源码可以看出JsonResponse是在HttpResponse的基础上进行封装,使用json模块进行格式转换,并设置content_typeapplication/json

软件工程
最近热帖
{{item.Title}} {{item.ViewCount}}
近期热议
{{item.Title}} {{item.PostCount}}