2010-04-11 41 views
1

我想使用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> 

但這種方式我已經把第3步第2步之前,否則一步,如果是後return聲明3將不會被執行。

有人可以給我一些建議如何做到這一點?謝謝。

回答

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 
+0

謝謝回答。是的,應該是'http://mycompany.com/create?params ...'我也在'url.py'中定義了URL。我的意思是渲染XML和創建文件夾是兩個獨立的步驟。我想先返回XML(緊接在HTTP請求之後),然後創建文件夾。應該在創建文件夾後進行回調。 – zihaoyu 2010-04-11 19:29:39

+0

好的。你可能需要設計一些創意。如果您想在之後創建文件夾,您將需要某些待處理文件夾的隊列。隊列的數據必須在請求之間持續存在。您可能需要創建一個模型,例如FolderQueue,您可以在其中隱藏所有待創建的文件夾。因爲它是一個完整的模型,所以它可以非常健壯並跟蹤各種數據(創建它的人,創建時的名稱,名稱等等)。 可能不是最簡單的,但它的強大,並仍然非常容易做到感謝orm。 – Koobz 2010-04-11 19:43:05

+0

另一種方法是在會話中存儲數據,但這是在尋求麻煩。使用隊列方法,至少它有點慣用和自我記錄,而不是一起欺騙;) – Koobz 2010-04-11 19:45:14

2

可以使用celery爲TE隊列的問題

+0

謝謝,這應該是有幫助的。 – zihaoyu 2010-04-11 23:21:59