Как вернуть отформатированное сообщение об ошибке и правильный HTTP-код, используя django-pneon? - PullRequest
1 голос
/ 04 октября 2010

Я хотел бы иметь возможность вернуть HTTP-ответ с форматированным контентом с помощью django-pneon.

Я думаю, мне нужно создать свой собственный rc_factory.

Я хотел бы сделать следующее:

return rc.404({'status': 0,'message': 'This restaurant does not exists.'})

С результатами, предоставляемыми XMLEmiter, JSONEmiter или YAMLEmiter относительно формата, который ищет клиент.

Как я могу это сделать?

Приветствия

1 Ответ

1 голос
/ 06 октября 2010

Что вы думаете о чем-то подобном:

# -*- coding: utf-8 -*-
from piston.handler import typemapper
from piston.emitters import Emitter

def getErrorResponse(http_code, payload, em_format='json'):
        emitter, ct = Emitter.get(em_format)
        srl = emitter(payload, typemapper, handler=None, anonymous=False)
        r = srl.render({})
        return HttpResponse(r, content_type=ct, status=http_code)

Чтобы использовать как это:

return getErrorResponse(404, {'status': 0,'message': 'This restaurant does not exists.'})

Но проблема связана с атрибутом em_format.

На самом деле метод хандера может получить эту информацию, добавив атрибут с emitter_format в функцию обработчика.

...
    def read(self, request, emitter_format=None):
        if emitter_format is None:
            emitter_format = request.GET.get('format', 'json')

        ...
        return getErrorResponse(404, {'status': 0,'message': 'This restaurant does not exists.'}, emitter_format)
...