DRF返回JsonResponse参数设置疑惑点.safe=False 解决...

回顾DRF框架时,产生疑惑点

代码如下:

class BooksAPIVIew(View):
    def get(self, request):
        """
        查询所有图书
        路由:GET /books/
        """
        queryset = BookInfo.objects.all()
        book_list = []
        for book in queryset:
            book_list.append({
                'id': book.id,
                'btitle': book.btitle,
                'bpub_date': book.bpub_date,
                'bread': book.bread,
                'bcomment': book.bcomment,
                'image': book.image.url if book.image else ''
            })
        return JsonResponse(book_list, safe=False)

问题点:

return JsonResponse(book_list,safe=False),其中safe=False是做什么用,联想到类似于过滤器中的safe防转译…

解决问题 >>>

类似于此种问题,直接进去JsonResponse源码里面找答案,是最有效的方法,

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)

其中:

if safe and not isinstance(data,dict):
	raise TypeError(
		'In order to allow non-dict objects to be serialized 'safe parameter to False'
)

告诉我们,当safe=True并且所传过来的data不是dict类型时,会引发异常,提醒我们如果传过来的objects不是dict,就将safe参数设置为False.

其实这也告诉了我们一点,标准的JsonResponse内的数据类型应该为dict字典类型,而不该是其他类型。

如有说得不对,还请点醒我 傲娇脸哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值