Как вернуть объект с кодом состояния не 200 с помощью django -алиста? - PullRequest
1 голос
/ 03 января 2011

В моих функциях обработчика django-поршня, похоже, я могу сделать две вещи.Либо я могу вернуть определенный код состояния с некоторым неформатированным содержимым:

def create(...):
    ...    
    resp = rc.BAD_REQUEST
    resp.content = 'Some string error message'
    return resp

Или я могу вернуть словарь сообщений об ошибках, который может быть отформатирован в соответствии с указанным отправителем, но с кодом состояния 200:

def create(...):
    ...
    return error_dict

Как вернуть словарь или объект модели, отформатированный указанным эмиттером, но с настроенным кодом состояния?

Ответы [ 2 ]

4 голосов
/ 04 марта 2011

Как насчет этого?

def create(...):
    ...    
    resp = rc.BAD_REQUEST
    resp.content = error_dict
    return resp
1 голос
/ 03 января 2011

Чтобы решить эту проблему, я добавил новую функцию в мой подкласс BaseHandler, хотя ее можно было просто добавить в любой обработчик. Функция вручную вызывает эмиттер для правильного форматирования содержимого, затем добавляет тип содержимого и код состояния.

class MyBaseHandler(BaseHandler):

    def render_response(self, request, response, content):

        em_info = None
        for ext in Emitter.EMITTERS:
            if request.path.find('.'+ext) > -1:
                em_info = Emitter.get(ext)
        if not em_info:
            return rc.NOT_FOUND

        RequestEmitter = em_info[0]

        emitter = RequestEmitter(content, typemapper, self, self.fields, False)
        response.content = emitter.render(request)
        response['Content-Type'] = em_info[1]

        return response

Вызывается так:

def create(...):
    ... 
    return self.render_response(request, rc.BAD_REQUEST, error_dict)
...