以下是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")
所有投入赞赏:)
答案 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")