我想使用Django构建API服务。基本工作流程如下:
首先,http请求转到http://mycompany.com/create?id=001&callback=http://callback.com
。它将在服务器上创建一个名为001的文件夹。
其次,如果该文件夹不存在,则会创建该文件夹。您将立即以XML格式获得响应。它看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<status>
<statusCode>0</statusCode>
<message>Success</message>
</status>
<group id="001"/>
</response>
最后,服务器将完成其工作(即创建文件夹)。完成后,服务器会对提供的URL进行回调。
目前,我使用
return render_to_response('create.xml', {'statusCode': statusCode,
'statusMessage': statusMessage,
'groupId': groupId,
}, mimetype = 'text/xml')
发回XML响应。我有一个XML模板,其中包含statusCode
,statusMessage
,groupId
个占位符。
<?xml version="1.0" encoding="UTF-8"?>
<response>
<status>
<statusCode>{{ statusCode }}</statusCode>
<message>{{ statusMessage }}</message>
</status>
{% if not statusCode %}
<group id="{{ groupId }}"/>
{% endif %}
</response>
但是这样我必须在步骤2之前放置第3步,否则如果它在return
语句之后将不会执行第3步。
有人可以给我一些建议怎么做吗?感谢。
答案 0 :(得分:4)
我觉得你可能会错过一些Django基础知识。
为什么create.py
在您的网址中?
如果你正在使用Django的url路由和视图,render_to_response应该可以正常工作。您可能会错误地得出关于为什么您的回复没有被退回的结论。
我不确定我理解这句话:
但是这样我必须把步骤3 在第2步之前,因为否则步骤 如果是3,则不会执行 退货声明。
步骤3不在return语句之后。它是退货声明的一部分。
你总是可以做这样的事情来分开这个过程:
# Code that creates folder, statusCode, statusMessage, groupId
response = render_to_response('create.xml', {'statusCode': statusCode,
'statusMessage': statusMessage,
'groupId': groupId,
}, mimetype = 'text/xml')
# Some other code, maybe an import pdb; pdb.set_trace()
# So that you can inspect the response inside of a python shell.
return response
答案 1 :(得分:2)
您可以使用celery来解决队列问题