2009-06-24 10 views
0

もっと良い解決策があるかもしれないので、私が達成したいことをまず考えなければならないかもしれません。DjangoへのリモートアクセスORM

メディア(録画したテレビ、映画など)を管理するDjangoを使用したWebアプリケーションがあります。 Webアプリケーションを使用すると、ユーザーごとに視聴したものなど、メディアにメタデータを追加したり、検索を実行したり、Webリソースと同期してショー時間などの情報を取得したりすることができます。

実際のメディアファイルは、Djangoシステムがアクセスしてデータベースをスキャンして更新するファイルサーバー上に存在します。

また、ファイルサーバーからメディアファイルを再生できるいくつかのメディア再生システムがあり、フロントエンドはPythonで書かれています。

このフロントエンドには、ユーザーインターフェイスを表示するためのメタデータが必要です。現在私はDjangoでデータをXML形式で表示し、urllib2を使用してフロントエンドでページを取得するビューを作成しています。

私が本当に好きなのは、メディア再生システムからメディアメタデータを直接管理するDjango ORMにアクセスする方法です。そのため、そこに完全なORMを持つことができます。

最後に私の質問に戻ってください。スタンドアロンの方法でORMにリモートからアクセスする方法はありますか?私はモデルをフロントエンドシステムにコピーしてから、データベースに直接アクセスできるようにすることができますが、より洗練されたソリューションが必要です。

答えて

4

本当にクライアントにORMの完全機能が必要ですか?あなたがしなければ、私のお金のために何らかの種類のWebサービスが好きになるでしょう。 RESTは現在のダーリンです。 django-rest-interface

それ以外の場合は、エレガントな方法がありません。 Querysetsとその結果をいくつかのAPIを介して回避することで直接DB接続の必要性を避けることができますが、おそらくそれは価値があるよりも面倒です。ここに私自身の参照(そしておそらく他の人)のために

+0

あなたが正しいです、私はおそらくクライアントでORM全体を必要としません。私はXMLのすべてをパッケージ化してから、いつも再び展開しなくて済むようにしたいと思っていました。 djang-rest-interfaceが面白そうに見えますが、私は読んでいます。ありがとう! –

+1

django-pistonはダーリンの中で最高のダーリンです。 –

1

データベースに直接アクセスすることは、これを達成するための悪い方法ではないと思います。モデルを適切なモジュールに入れると、それらを共有することは問題ではありません。

ただし、モデル定義が公開されているため、データベーススキーマとモデル定義を変更するのは少し難しい場合があります。したがって、これをデカップリングするためのインタフェースとしてXMLを使用することは、実際には悪いことではありません。

もう1つのオプションは、リモートプロシージャコールメカニズムのようなものです。

0

は、次のライブラリを使用して迅速な解決と例です:サーバー側で

に応答を変換するために、クライアント側で

  • python-jsonを要求します私はPython 2.6にJSONの組み込みサポートがあることを知っていますが、残念ながら私は他のライブラリの制限のためにPython 2.5に悩まされています。

    Djangoのモデル:

    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'}}] 
    

    みんな正しい方向に向いてくれてありがとう。

  • 関連する問題