2

Apacheサーバーで実行されているmysql上でdjangoモデルを使用するdjango 1.5プロジェクトがあります。

class Person(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    birthdate = models.DateField()

class Book(models.Model):
    name = models.CharField(max_length=100)
    author = models.ForeignKey(Person)

これらのモデルを使用する必要があるリモート コンピューターで実行されている python/django アプリケーション (django カスタム コマンドを使用) もあります。

  • リモート アプリケーションはサーバーと同じモデル定義を共有します
  • リモート アプリケーションには、モデルへの読み取り専用アクセスが必要です
  • サーバーはユーザー権限に基づいてクエリセットを返す必要があるため、リモート アプリケーションはサーバー データベースの完全なダンプを取得できません。
  • リモート アプリケーションは、http 経由でのみサーバーに接続できます
  • サーバーは REST API (json) を介してモデルを公開できます

http 経由でモデルを自動転送する方法はありますか? django.core.serializers を使用しようとしましたが、次の問題がありました。

  • クエリセット内の関連オブジェクトをシリアル化できません
  • リモート アプリケーションは、ローカル データベースがないと機能しません
  • リモート アプリケーションは、逆シリアル化後にローカル データベースで関連オブジェクトを検索します (存在しません)。

編集:

私はこのようなモデルをシリアライズすることができました:

books = Book.objects.prefetch_related('author').all()
authors = [book.author for book in books]
data = authors + list(books.all())
serialized_data = django.core.serializers.serialize("json", data)

私の問題は、ローカル データベースがないとリモート アプリケーションがデシリアライズできないことです。

4

2 に答える 2

0

http 経由でモデルを転送する必要があるとは思わないでください。サーバーdbに接続するだけです。リモートアプリの設定で、dbエンジン(あなたの場合はmysql)、名前を選択します。適切なユーザーとパスワードを指定します。有効なホストとプロキシを入力します (必要な場合)。データベースサーバーが実行されているもの

ユーザーに関しては。サーバー上で、データベースへの読み取り専用権限を持つ mysql ユーザーを作成します。

これにより、サーバーとリモート アプリの両方で同じデータベースを使用できるようになります。

于 2013-03-13T15:46:31.657 に答える
0

最後に、クライアント側のRAMで実行されているsqliteを使用して解決しました

settings.py では、この構成を使用しました

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': ':memory:'
    }
}

コードは次のようになります。

from django.db import connections
from django.core.management.color import no_style
from django.core import serializers
from apps.my_models import Book, Person

connection = connections['default']
cursor = connection.cursor()

sql, references = connection.creation.sql_create_model(Book, no_style(), set())
cursor.execute(sql[0])
sql, references = connection.creation.sql_create_model(Person, no_style(), set())
cursor.execute(sql[0])

serialized_data = get_serialized_data()
for obj in serializers.deserialize("json", serialized_data):
    obj.save()
books = Book.objects.prefetch_related('author').all()
于 2013-03-14T11:34:07.823 に答える