построить сервис API в Django - PullRequest
1 голос
/ 11 апреля 2010

Я хочу создать сервис API с использованием Django. Основной рабочий процесс выглядит следующим образом:

Сначала запрос 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>

Но таким образом я должен поставить шаг 3 перед шагом 2, потому что иначе шаг 3 не будет выполнен, если он идет после оператора return.

Может кто-нибудь дать мне несколько советов, как это сделать? Спасибо.

Ответы [ 2 ]

4 голосов
/ 11 апреля 2010

У меня есть ощущение, что вы можете упустить некоторые основы Django здесь.

Почему create.py внутри вашего URL?

Если вы используете маршрутизацию и представления URL в Django, render_to_response должен работать нормально. Возможно, вы пришли к неверному выводу о том, почему ваш ответ не возвращается.

Я не уверен, что понимаю утверждение:

Но таким образом я должен поставить шаг 3 до шага 2, потому что иначе шаг 3 не будет выполнен, если это после возврат заявления.

Шаг 3 не после оператора возврата. Это часть оператора возврата.

Вы всегда можете сделать что-то подобное, чтобы разделить процесс:

# 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
2 голосов
/ 12 апреля 2010

Вы можете использовать сельдерей для задачи очереди

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...