如何在Django视图中捕获和修改Google Protocol Buffers?

时间:2014-06-13 08:18:37

标签: django protocol-buffers bitcoin

以下是proto file的链接。

请有人帮我理解如何使这项工作:

from django.views.decorators.csrf import csrf_exempt
from bitchikun import payments_pb2

@csrf_exempt
def protoresponse(request):
    xpo = payments_pb2.Payment.ParseFromString(request)
    t = type(xpo)

    xpa = request.PaymentACK
    xpa.payment = xpo.SerializeToString()
    xpa.memo = u'success'
    return HttpResponse(xpa.SerializeToString(), content_type="application/octet-stream")

所有投入赞赏:)

1 个答案:

答案 0 :(得分:3)

好的,所以我想我明白现在发生了什么。你有一个系统将一个序列化的protobuf张贴到你的Django应用程序,你需要返回另一个protobuf作为回应。

在Django中,您可以通过request.body中的POST访问数据。这可能是您需要传递给ParseFromString

您还有其他一些错误:您引用request.PaymentACK,它不存在 - 您的意思是payments_pb2.PaymentACK - 并且您实际上从未实例化它。此外,当您应该传递实际消息时,您正尝试将原始请求protobuf的序列化版本传递给该响应。

所以,总之它看起来像这样:

xpo = payments_pb2.Payment.FromString(request.body)
xpa = payments_pb2.PaymentACK()
xpa.payment = xpo
xpa.memo = u'success'
return HttpResponse(xpa.SerializeToString(), content_type="application/octet-stream")