这是指向proto file的链接。在
花了很长时间试图弄清楚信息是如何编码的,结果发现,如果我注释掉了HttpResponse
行,那么在发送测试存款时,我的比特币qt客户端仍然收到相同的internal server error
消息:
from django.views.decorators.csrf import csrf_exempt
from project import payments_pb2
@csrf_exempt
def protoresponse(request):
x = payments_pb2
xpo = x.Payment.FromString(request.body)
xpa = x.PaymentACK()
xpa.payment = xpo
xpa.memo = 'success'
return HttpResponse(xpa.SerializeToString(), content_type="application/bitcoin-paymentack")
我看不出这段代码有什么问题,但是通信错误仍然存在,服务器错误"POST /protoresponse/ HTTP/1.1" 500 58538
。在
我将调试代码放入脚本中以检查是否设置了变量,并且它一直工作到xpa.memo = ''success'
,因此看起来HttpResponse()
方法中出现了错误。要么是这样,要么是什么妨碍了回应。在
怀疑它与csrf有关,如果没有@csrf_exempt
修饰符,我得到的是"POST /protoresponse/ HTTP/1.1" 403 2282
错误。在
如有任何意见,我们将不胜感激:)
我设法用
ParseFromString()
方法使其正常工作,如下所示:问题是我试图将返回的“Payment”对象中的信息解码为新实例化的“Payment”对象,然后将该信息编码到付款确认付款'(它们也非常相似'Payment/Payment,这也造成了一些混乱)。在
它会完美地工作,我可以用:
^{pr2}$但这似乎是无缘无故的额外工作。在
@Daniel我知道你告诉我不要使用
request.body
,但我计划在heroku上托管这个应用程序,它们按我理解的cpu使用量收费,所以我尽量减少数据操作:)非常感谢您的帮助(两次都是这样),非常感谢,我现在对protobuff的理解也好多了:)我不知道是否还有csrf错误,但是这里有一个明显的缺陷:没有实例化protobuff对象。在
还有其他错误:正如我在my previous answer中所示,
xpa.payment
也应该是protobuff,属于Payment类型,而不是原始的http主体。我不知道你为什么把答案改了。在相关问题 更多 >
编程相关推荐