Стандартизованный ответ JSON из представлений

Когда моя страница отправляет форму в мое представление Django, представление возвращает ответ с некоторыми данными, но вскоре я столкнулся с проблемой, что мои представления возвращают данные в разных форматах и ​​разных наборах информации. Я думал об использовании JSON в качестве стандартного формата для возврата моих данных.

Существует два типа статусов, success и failure . Когда POST был успешным, он просто возвращает success но когда он потерпел неудачу, он возвращает подгруппу, называемую ошибкой, которая содержит поле и ошибку этого поля.

Вот пример failure :

 {"failure": { "errors":[ {"fieldname": "<fieldname>", "fielderror": "<fielderror>" }, {"fieldname": "<fieldname>", "fielderror": "<fielderror>" }] }} 

Вот пример success ответа:

 {"success": { "data":[ {"fieldname": "<fieldname>", "fielddata": "<fielddata>" }, {"fieldname": "<fieldname>", "fielddata": "<fielddata>" }] }} 

(Ответ успеха имеет поля данных, потому что довольно часто вам нравится возвращать некоторые данные, т.е. ключ только что созданной записи БД.)

Это то, что я придумал, но так много людей, использующих Django, мне интересно, существует ли стандартный способ / более надежный способ сделать это или какой-то модуль, чтобы помочь в этом.

Благодарю.

4 Solutions collect form web for “Стандартизованный ответ JSON из представлений”

был там. Я написал решение самостоятельно (так как это просто. Я не знаю, есть ли там модуль для этого). Это всего лишь оболочка ответа json

 from django.utils import simplejson from django.http import HttpResponse class JsonResponse(HttpResponse): def __init__(self, data): content = simplejson.dumps(data) super(JsonResponse, self).__init__(content=content, mimetype='application/json') class Success(JsonResponse): def __init__(self, something): x = something # set your data here content = {'success': {'data': x}} super(Success, self).__init__(content) class Failure(JsonResponse): def __init__(self, something): x = something # set your data content = {'failures': {'errors': x}} super(Failure, self).__init__(content) 

что-то вроде того. В моем случае я делаю Success and Failure принятой строку и словарь для аргументов (например, Success(data) ), чтобы сделать это еще проще

Если ваша структура довольно сложна (или вы слишком ленивы, тоже пишите их вручную), напишите свою собственную оболочку для этой сложной структуры (чтобы вы могли создать ответ с еще меньшим набором символов), и сделайте Success / Failure принятым в качестве аргумента.

Вы знаете, как использовать питоны Python? Если это так, то есть библиотеки, которые преобразуют ваш Python dict в действительный JSON. Встроенный Django – это, например, simplejson . Вот пример:

 from django.utils import simplejson def my_view(request): .... my_json = simplejson.dumps(my_dict) #dumps a JSON string from a dict my_dict_again = simplejson.loads(my_json) #loads a Python dict from a JSON string return HttpResponse(json, mimetype="application/json") 

Ну, я не знаю, насколько это вам поможет, но у Python есть модуль json .

 >>> import json >>> json.dumps({'a':'b', 'c':'d'}) '{"a": "b", "c": "d"}' 

Я думаю, что передняя часть сделает более убедительным аргумент в пользу того, как вы должны форматировать свои данные, а затем некоторые «стандартные». Различные рамки на стороне клиента ожидают разные вещи и адаптируются к различиям от этих ожиданий лучше или хуже этого.

Один из способов, с помощью которого я пытаюсь облегчить себе жизнь, – это иметь «форму» ответа всегда примерно одинаково, например, ответ всегда будет иметь свойство «статус», которое всегда имеет свойство «errors», и если ошибок не было, тогда значение result.status.errors равно null . Если бы были ошибки, это был бы список строк, объясняющих, что пошло не так. даже если бы были ошибки, было бы свойство «value», которое было бы либо нулевым, если запрос не мог быть обслужит, либо запрошенный ресурс, если бы он мог.

  • Декодирование JSON из Reddit API в Python с использованием PRAW
  • Преобразование строкового ключа в int в словаре
  • Есть ли библиотека json python для преобразования json в объекты модели, похожие на google-gson?
  • Импорт данных JSON в Django View / Template
  • json_normalize вызывает путаницу KeyError
  • URL-код кодирует пару без значения в Python
  • Как сделать класс JSON сериализуемым
  • Рекурсивная функция для создания иерархического объекта JSON?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.