2012-06-01 1 views
0

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

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

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

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

+0

У меня была такая же проблема в django-piston, где типы ответов об ошибках удобство было простым html-ответом. Мне пришлось обернуть их в свой собственный «JsonResponse», который переформатировал бы его. – jdi

ответ

2

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

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)) 
+0

Я не думаю, что создание метода на http-модуле tastypie является хорошей идеей здесь. Если вам действительно нужно создать его, сделайте это в каком-нибудь вспомогательном модуле, а не на tastypie (хотя я не думаю, что вам это нужно). – cristiano2lopes

0

You должен использовать метод 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)) 

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

 Смежные вопросы

  • Нет связанных вопросов^_^