Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通行证;选项“;对序列化程序进行测试_Python_Django_Tastypie - Fatal编程技术网

Python 通行证;选项“;对序列化程序进行测试

Python 通行证;选项“;对序列化程序进行测试,python,django,tastypie,Python,Django,Tastypie,Tastypie序列化程序和自定义序列化程序的文档显示了默认为None的选项: to_json(self, data, options=None): options = options or {} 但是下游代码似乎并没有利用它,而是将它传递给到\u simple(),后者也不使用它。也没有说明如何将选项传递给这些函数的文档。我希望能够在这里传递选项,以便调整序列化程序的工作方式。例如,我们有引用GridFS中数据的内容。我想做一些类似的事情: /api/v1/foo/?format=c

Tastypie序列化程序和自定义序列化程序的文档显示了默认为
None
选项:

to_json(self, data, options=None):
    options = options or {}
但是下游代码似乎并没有利用它,而是将它传递给
到\u simple()
,后者也不使用它。也没有说明如何将选项传递给这些函数的文档。我希望能够在这里传递选项,以便调整序列化程序的工作方式。例如,我们有引用GridFS中数据的内容。我想做一些类似的事情:

/api/v1/foo/?format=custom&gridfs=1
并有以下几点:

to_custom(self, data, options=None):
    options = options or {}
    if options and 'gridfs' in options:
        ...

我认为您需要实现自己的序列化程序,如下所述:

您还需要覆盖资源中的
create\u response
函数,该函数调用
serialize

您可以在这里打开pass-in
options
进行序列化,这将向下传播。例如:

    def create_response(self, request, data, response_class=HttpResponse, **response_kwargs):
        """
        Extracts the common "which-format/serialize/return-response" cycle.

        Mostly a useful shortcut/hook.
        """
        desired_format = self.determine_format(request)
        serialized = self.serialize(request, data, desired_format, options=request.GET)
        return response_class(content=serialized, content_type=build_content_type(desired_format), **response_kwargs

为了完整性,这里的错误响应中也调用了
serialize:

我实现了一个自定义的。这不是关于制作一个定制的,而是关于如何将“选项”传递给它们。您会注意到,在您链接的示例中,它们将“选项”传递到to_json()函数中,但该函数未被使用,并且始终为空。我想知道如何传递选项,以便可以根据使用它们的API调用更改自定义序列化程序中的to*()函数。啊,我明白了,我更新了上面的答案,并提供了一些关于如何将“选项”传播到serialize方法以及如何将“选项”作为请求的查询参数的详细信息!天才和学者!就像广告宣传的那样!现在我只需要创建自己的资源,这样我就可以继承它,而不是到处复制create\u响应!