Лучший способ сериализовать запросы Django-nonrel + MongoDb для обмена с мобильными устройствами?

Я хочу обмениваться информацией между Django-нерелом + MongoDB и мобильными устройствами через http. Когда мобильное устройство делает запрос на api, представление Django выполняет запрос, и я хотел бы ответить сериализацией результатов запроса.

Моя проблема в том, что встроенные форматы сериализации Django не очень хорошо сочетаются с моделями, содержащими встроенные агрегаты и списки. Я мог бы обойти это, не используя эти функции no-sql, но это свести на нет мою мотивацию использовать MongoDB в первую очередь.

Каков наилучший способ сериализации данных из запроса MongoDB?

Я знаю, что я могу импортировать bson и использовать функции "encode" и "decode", но они, похоже, работают только на словари. Мой текущий неэлегантный код проверки просмотра делает громоздкую встроенную структуру словаря из базовой модели:

def get_announcements(request):
 """
 Return a BSON representation of the ten most recent announcements relevant to the
 user.
 """
 user = User.objects.get(username='*<somebody>*') # Test User for now
 campaign_announcements = Campaign.objects.filter(workers=user.id)[:10]
 data = {}
 for campaign in campaign_announcements:
 data[campaign.name] = []
 for announcement in campaign.announcements:
 data[campaign.name].append({
 'tagline': announcement.tagline,
 'content': announcement.content,
 'release_time': announcement.release_time,
 })
 return HttpResponse(BSON.encode(data))
</somebody>

Я хотел бы иметь возможность сделать это:

return HttpResponse(serializers.serialize("bson", <query>))
</query>

Это предполагает, что bson - это формат, который я должен использовать. Я предполагаю это, потому что это формат MongoDB по умолчанию.

Ответы на другие вопросы включают подмодуль PyMongo json_util. Я посмотрел на него, но я не думаю, что он делает то, что я пытаюсь сделать.

Благодарю!

ОБНОВЛЕНИЕ 20 августа 2013 года: Спасибо тем, кто ответил на мой вопрос. Я решил отказаться от no-sql. Это похоже на интересную и полезную технологию, но, похоже, она не очень хорошо работает с моей средой: Django, Heroku и Android. Получение внедренных объектов для сериализации полезным способом, похоже, требует кучу взлома, которого я бы предпочел избежать, и Android использует SQLite, поэтому мне все равно придется преобразовывать сериализованные данные в схему.

3 ответа

Я бы рекомендовал посмотреть на json_util поскольку это переведет результаты запроса bson в расширенный формат json, который вы сможете легко обрабатывать в своем мобильном приложении.

Альтернативой является общение в bson и обработка декодирования в двоичном виде в мобильном приложении.


Попробуйте изучить django-tastypie. Он получил некоторые встроенные сериализаторы, и это REST API для запросов на основе ваших моделей Django.


У меня была аналогичная проблема и я нашел:

.to_json()

по запросу.

Может быть, это полезно для будущих lurkers по этому вопросу, как и я.

licensed under cc by-sa 3.0 with attribution.