Просто добавьте метод to_json
в ваш класс следующим образом:
def to_json(self):
return self.message # or how you want it to be serialized
И добавьте этот код (из этот ответ ) , чтобы где-то в верхней части всего:
from json import JSONEncoder
def _default(self, obj):
return getattr(obj.__class__, "to_json", _default.default)(obj)
_default.default = JSONEncoder().default
JSONEncoder.default = _default
Это будет модуль monkey-patch json, когда он будет импортирован, поэтому JSONEncoder.default () автоматически проверяет специальный метод «to_json ()» и использует его для кодирования объект, если найден.
Так же, как сказал Онур, но на этот раз вам не нужно обновлять каждый json.dumps()
в вашем проекте.
Способ сделать это должно управлять location.hash
, когда Ajax обновляет результат в изменении состояния, что требуется иметь осторожный URL. Например, если URL Вашей страницы:
, Если клиентская функция выполнила этот код:
// AJAX code to display the "foo" state goes here.
location.hash = 'foo';
Затем URL, отображенный в браузере, был бы обновлен к:
Это позволяет пользователям отмечать состояние "нечто" страницы и использовать историю браузера для навигации между состояниями.
С этим механизмом на месте, необходимо будет тогда проанализировать часть хеша URL на стороне клиента с помощью JavaScript, чтобы создать и отобразить соответствующее начальное состояние, поскольку идентификаторы фрагмента (часть после #) не отправляются на сервер.
hashchange плагин Ben Alman делает последнего бризом при использовании jQuery.
SWFAddress работает в Flash & проекты JavaScript и позволяют Вам создать bookmarkable URL (использующий упомянутый выше метод хеша), а также дающий Вам поддержка кнопки "Назад".
Это подобно тому, что сказал Kevin. У Вас может быть свое состояние клиента как некоторый объект JavaScript, и когда Вы хотите сохранить состояние, Вы сериализируете объект (использующий JSON и кодирование base64). Можно тогда установить фрагмент href к этой строке.
var encodedState = base64(json(state));
var newLocation = oldLocationWithoutFragment + "#" + encodedState;
document.location = newLocation; // adds new entry in browser history
document.location.replace(newLocation); // replaces current entry in browser history
первый путь будет рассматривать новое состояние как новое местоположение (таким образом, кнопка "Назад" возьмет их к предыдущему местоположению). Последний не делает.
window.location.hash метод является предпочтительным способом сделать вещи. Для объяснения того, как сделать это, Шаблоны Ajax - Уникальные URL.
YUI имеет реализацию этого шаблона как модуль, который включает IE определенная работа arounds для получения кнопки "Назад", работающей наряду с перезаписью адреса с помощью хеша. Менеджер по Истории Браузера YUI.
Другие платформы имеют подобные реализации также. Важный момент - то, если Вы хотите, чтобы история работала наряду с перезаписью адреса, различным браузерам нужны различные способы обработать его. (Это детализировано в первой статье ссылки.)
IE нужен iframe базирующийся взлом, где Firefox произведет двойную историю с помощью того же метода.