在Django中构建API服务

时间:2010-04-11 18:12:16

标签: python django api

我想使用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模板,其中包含statusCodestatusMessagegroupId个占位符。

<?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步。

有人可以给我一些建议怎么做吗?感谢。

2 个答案:

答案 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来解决队列问题