使用django-rest-framework渲染器

时间:2018-01-09 07:12:27

标签: python django-rest-framework uwsgi

我利用uwsgi,django和django-rest-framework来开发一个应用程序。

我在渲染器类中引入了一个类变量,这个变量将作为响应的一部分填充。

问题似乎如下:

class xxxRenderer(xxxBase)
    response_pb_msg = obj # it's one instance of protobuf message 

    def render():
        if True:
            self.response_pb_msg.items = []
        else:
            self.response_pb_msg.retCode = 100
            self.response_pb_msg.otherXXXX = xxxx

在django logger处理程序中,我再次访问此类变量,如下所示:

xxxRenderer.response_pb_msg.ParseFromString(body)
第一次回复后,这个类变量' response_pb_msg'只有一个属性" retCode"

但是第二个响应,它有三个属性" retCode"," otherXXXX"和"项目"

很奇怪,第二个回复包含第一个回复中存在的所有内容。

过了一段时间,我重写了这节课,如下:

class xxxBaserender(xxRender)
    def __init__():
        if self.response_pb_msg_cls is not None and isinstance(self.response_pb_msg_cls, GeneratedProtocolMessageType):
            self.response_pb_message = self.response_pb_msg_cls()

class xxxRenderer(xxxBaserender)
    response_pb_msg_cls = msgName # the class of protobuf message 
理论上,第二类是好的。我测试过,没有复制过这个问题。

让我们回到我们开始的地方 每个请求finisehd,所有resoure应该是干净的。 但我对这个问题非常困惑,似乎在响应返回后,类变量没有在uwsgi进度中发布。

我读过“PEP 3333”,没有得到任何有价值的信息。 我想我并没有完全理解python中的类可变,wsgi和web处理流程。

任何人都可以帮我理解这个问题吗?

非常感谢。

0 个答案:

没有答案