django-tastypie, чтобы получить ответ JSON

Я имел в виду именно то, что я хотел бы получить ответ JSON, когда я изменяю obj_create(). Я реализовал UserSignUpResource(ModelResource) и внутри obj_create(), я сделал некоторую проверку, и когда это не удается, я вызываю BadRequest(). Однако это не выбрасывает JSON. Вместо этого он выбрасывает String.

Есть идеи, могу ли я заставить его выбрасывать формат {'error': 184, 'message': 'Это имя пользователя уже существует'}? Или я не должен изменять obj_create()? Или что мне делать вместо этого?

Многие помогают, спасибо.

Привет, Микки


person Mickey Cheong    schedule 01.06.2012    source источник
comment
У меня была такая же проблема в django-piston, где типы ответов на ошибки удобства были простыми ответами html. Пришлось завернуть их в свой собственный JsonResponse, что бы переформатировать.   -  person jdi    schedule 01.06.2012


Ответы (2)


легко, я только что создал небольшой вспомогательный метод в http-модуле deliciouspies:

import json

#tastypies HttpResponse classes here...

def create_json_response(data, http_response_class):
    return http_response_class(content=json.dumps(data), content_type="application/json; charset=utf-8")

тогда вы можете просто сказать:

from tastypie.http import HttpNotFound, create_json_response

#choose HttpNotFound, HttpCreated whatever...
raise ImmediateHttpResponse(create_json_response({"error":"resource not found"}, HttpNotFound))
person martyglaubitz    schedule 07.10.2012
comment
Я не думаю, что создание метода в http-модуле deliciouspie — хорошая идея. Если вам действительно нужно создать его, сделайте это в каком-нибудь своем вспомогательном модуле, а не на deliciouspie (хотя я не думаю, что вам это нужно). - person cristiano2lopes; 18.12.2014

Вы должны использовать метод error_response из ресурса.

Что-то типа:

    def obj_create(self, bundle, **kwargs):
        # Code that finds Some error
        my_errors = {"error": ["Some error"]}
            raise ImmediateHttpResponse(response=self.error_response(bundle.request, my_errors))

Обычно вы вызываете super, и ошибки должны возникать в процессе проверки вкусного пирога. Исключение будет создано автоматически (с сохранением словаря ошибок в свойстве bundle.errors).

person cristiano2lopes    schedule 18.12.2014