Удаленный доступ к Django ORM - PullRequest
0 голосов
/ 24 июня 2009

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

У меня есть веб-приложение, использующее Django, которое управляет мультимедиа (записанные телепередачи, фильмы и т. Д.). Веб-приложение позволяет добавлять метаданные на носитель, такие как данные, которые вы просматривали для каждого пользователя, а также выполнять поиск и синхронизацию с веб-ресурсами для получения информации о времени показа и т. Д.

Фактические медиа-файлы хранятся на файловом сервере, к которому система Django имеет доступ для сканирования и обновления своей базы данных.

У меня также есть несколько систем воспроизведения мультимедиа, которые могут воспроизводить файлы мультимедиа с файлового сервера, а внешние интерфейсы написаны на Python.

Для этого интерфейса нужны метаданные для отображения пользовательского интерфейса. В настоящее время я создаю представления с помощью Django, которые представляют данные в формате XML, а затем извлекают страницы во внешних интерфейсах, используя urllib2.

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

Итак, наконец, вернемся к моему вопросу. Есть ли способ удаленного доступа к ORM в автономном режиме? Думаю, я мог бы скопировать модель в интерфейсные системы и затем предоставить им прямой доступ к базе данных, но должно быть более элегантное решение.

Ответы [ 3 ]

4 голосов
/ 24 июня 2009

Вам действительно нужна полная мощность ORM в клиенте? Если вы этого не сделаете, какой-то веб-сервис будет любимым за мои деньги. REST является текущим дорогой, см. Например Джанго-отдых-интерфейс .

В противном случае я не вижу элегантного выхода. Возможно, вы могли бы избежать потребности в прямых соединениях с БД, выбрав Querysets и результаты и перебросив их через некоторый API, но это, вероятно, более хлопотно, чем стоит.

1 голос
/ 24 июня 2009

Для моей справки (и, возможно, для других), вот быстрое решение и пример с использованием следующих библиотек:

  • django-rest-interface на стороне сервера (как предлагает oggy)
  • python-rest-client на стороне клиента для выполнения соединения и запросов
  • python-json на стороне клиента для преобразования ответа в объект python

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

Модель Джанго:

class Show(models.Model):
    name = models.CharField(max_length=128)

Django urls.py:

from django_restapi.model_resource import Collection
from django_restapi.responder import JSONResponder

from wstest.tv.models import Show

show_resource = Collection(
        queryset = Show.objects.all(),
        responder = JSONResponder(),
        )
##
##

urlpatterns = patterns('',
    ##
    (r'^json/show/(.*?)/?$', show_resource),
)

А затем на стороне клиента прочитать список шоу (интерактивный пример):

>>> from restful_lib import Connection
>>> import json
>>> # Create restful connection object
>>> conn = Connection("http://localhost:8000")
>>> # Use a get request to get a list of shows
>>> res = conn.request_get("/json/show/")
>>> # Convert the body of the response to a python object
>>> shows=json.read(str(res['body']))
>>> # result
>>> shows
[{'pk': 1, 'model': 'tv.show', 'fields': {'name': 'The Big Bang Theory'}}, {'pk': 2, 'model': 'tv.show', 'fields': {'name': 'Stargate Atlantis'}}, {'pk': 3, 'model': 'tv.show', 'fields': {'name': 'Fringe'}}, {'pk': 4, 'model': 'tv.show', 'fields': {'name': 'CSI Las Vegas'}}]

Спасибо, что указали мне правильное направление всем.

1 голос
/ 24 июня 2009

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

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

Другим вариантом может быть какой-то механизм удаленного вызова процедур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...