2010-10-04 1 views
1

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

Предполагаю, что мне нужно создать свой собственный rc_factory.

То, что я хотел бы сделать, это:

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

С результате обеспечивают по XMLEmiter, JSONEmiter или YAMLEmiter в отношении к формату клиент ищет.

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

Приветствия

ответ

1

Что вы думаете о Somthing так:

# -*- 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.

На самом деле метод hander может получить эту информацию, добавив атрибут 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) 
+0

Я должен был что-то изменить в 'piston', чтобы иметь возможность получить' emitter_format' в 'read' метод и теперь emitter_format должен определить в качестве параметра во всей моей' read' метода. – Natim