Подводные камни генерации JSON в шаблонах Django - PullRequest
2 голосов
/ 19 июля 2010

Я обнаружил, что неудовлетворен способностью Django отображать данные JSON. Если я использую встроенную сериализацию, то отношения внешних ключей базы данных не включаются в данные (только ключи). Кроме того, представляется невозможным включить пользовательские данные в канал json, который не является частью сериализуемой модели.

В качестве теста я реализовал шаблон, который отображал некоторый JSON для набора результатов конкретной модели. Я мог включать / исключать любые части модели, которые я хотел, и мог также включать пользовательские данные.

Тест, похоже, работал хорошо и не медленнее, чем рекомендуемые методы сериализации.

Есть ли какие-либо подводные камни с этим методом сериализации?

Ответы [ 5 ]

2 голосов
/ 20 июля 2010

Я не понимаю, почему вы видите выбор «использовать сериализаторы Django» или «писать JSON в шаблонах». Средний способ, который, на мой взгляд, гораздо более надежен и хорошо подходит для вашего случая использования, состоит в том, чтобы собрать данные в виде списков / словарей Python, а затем просто использовать simplejson.dumps() для преобразования их в строку JSON.

2 голосов
/ 19 июля 2010

Одной из проблем может быть экранирование таких метасимволов, как ". Система шаблонов Django автоматически экранирует опасные символы, но она настроена на это для HTML. Вы должны точно узнать, что делает экранирование шаблона, и сравнить это с тем, что опасно в JSON.В противном случае вы могли бы вызвать проблемы с XSS.

Можно подумать о создании структуры данных из диктовок и списков, а затем о запуске сериализатора JSON, а не непосредственно в вашей модели базы данных.

2 голосов
/ 19 июля 2010

Хотя трудно сказать однозначно, есть ли у этого метода какие-либо подводные камни, этот метод мы используем в производстве, когда вы контролируете все, что сериализуется, даже если базовая модель изменяется. Мы использовали приложение с высоким трафиком в течение почти двух лет, используя этот метод.

Надеюсь, это поможет.

0 голосов
/ 16 марта 2012

Пока что, генерируя JSON из шаблонов, мы столкнулись с необходимостью избегать перевода строки. Глядя на выполнение simplejson.dumps () далее.

0 голосов
/ 20 июля 2010

Мы используем этот метод, чтобы получить пользовательский формат JSON, используемый datatables.net Это был самый простой способ, который мы нашли для выполнения этой задачи, и он пока выглядит очень хорошо, без проблем.

Вы можете найти детали здесь: http://datatables.net/development/server-side/django

...