远程访问Django ORM

远程访问Django ORM,django,orm,Django,Orm,也许我应该首先给出一个我想要实现的想法,因为可能有更好的解决方案 我有一个使用Django的web应用程序,用于管理媒体录制的电视、电影等。该web应用程序允许您向媒体添加元数据,例如您在每个用户的基础上观看的内容,并允许您执行搜索,并与web资源同步,以获取节目时间等信息 实际的媒体文件位于文件服务器上,Django系统可以访问该文件服务器扫描和更新其数据库 我还有几个媒体播放系统,可以从文件服务器播放媒体文件,前端用Python编写 这个前端需要元数据来显示用户界面。目前,我正在使用Djan

也许我应该首先给出一个我想要实现的想法,因为可能有更好的解决方案

我有一个使用Django的web应用程序,用于管理媒体录制的电视、电影等。该web应用程序允许您向媒体添加元数据,例如您在每个用户的基础上观看的内容,并允许您执行搜索,并与web资源同步,以获取节目时间等信息

实际的媒体文件位于文件服务器上,Django系统可以访问该文件服务器扫描和更新其数据库

我还有几个媒体播放系统,可以从文件服务器播放媒体文件,前端用Python编写

这个前端需要元数据来显示用户界面。目前,我正在使用Django创建视图,以XML格式显示数据,然后使用urllib2在前端检索页面

我真正想要的是一种访问Django ORM的方法,它直接管理媒体播放系统中的媒体元数据,这样我就可以拥有完整ORM的能力


所以,最后回到我的问题上来。有没有办法以独立方式远程访问ORM?我想我可以将模型复制到前端系统,然后让它们直接访问数据库,但必须有一个更优雅的解决方案。

我不认为直接访问数据库是实现这一点的一个坏方法。如果您将模型放入合适的模块中,那么共享它们应该不是问题

但是,您将公开模型定义,因此更改数据库架构和模型定义可能有点困难。因此,使用XML作为接口来解耦这一点并不是很糟糕


另一种选择是某种远程过程调用机制。

我不认为直接访问数据库是一种不好的方法。如果您将模型放入合适的模块中,那么共享它们应该不是问题

但是,您将公开模型定义,因此更改数据库架构和模型定义可能有点困难。因此,使用XML作为接口来解耦这一点并不是很糟糕


另一种选择是某种远程过程调用机制。

您真的需要客户机中ORM的全部功能吗?如果你不喜欢的话,我的钱会很喜欢某种Web服务。REST是当前的宠儿,请参见例如


否则我看不到一条优雅的出路。您可以通过酸洗查询集和结果,并通过一些API将其丢弃,从而避免直接数据库连接的需要,但这可能比它的价值更麻烦。

您真的需要在客户端使用ORM的全部功能吗?如果你不喜欢的话,我的钱会很喜欢某种Web服务。REST是当前的宠儿,请参见例如


否则我看不到一条优雅的出路。您可以通过对查询集和结果进行酸洗,并通过一些API对其进行处理,从而避免直接数据库连接的需要,但这可能比它的价值更麻烦。

对于我自己和其他人来说,这里有一个使用以下库的快速解决方案和示例:

按照oggy的建议,在服务器端 在客户端执行连接和请求 在客户端将响应转换为python对象 我知道Python2.6内置了对JSON的支持,但不幸的是,由于其他库限制,我一直使用Python2.5,至少目前是这样

Django模型:

class Show(models.Model):
    name = models.CharField(max_length=128)
Django URL.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'}}]

感谢各位为我指明了正确的方向。

以下是一个使用以下库的快速解决方案和示例,供我自己或其他人参考:

按照oggy的建议,在服务器端 在客户端执行连接和请求 在客户端将响应转换为python对象 我知道Python2.6内置了对JSON的支持,但不幸的是,由于其他库限制,我一直使用Python2.5,至少目前是这样

Django模型:

class Show(models.Model):
    name = models.CharField(max_length=128)
Django URL.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'}}]

谢谢大家为我指出了正确的方向。

你说得对,我可能不需要在客户端使用整个ORM。我只是想摆脱把所有东西都打包成XML,然后一直把它解包的习惯。djang rest界面看起来很有趣,我去看看。谢谢django活塞是宠儿中的宠儿。你是对的,我可能不需要整个ORM在客户中。我只是想摆脱把所有东西都打包成XML,然后一直把它解包的习惯。djang rest界面看起来很有趣,我去看看。谢谢django活塞是宠儿中的宠儿。