Djangoでredis接続を管理するためのプラグインまたはサードパーティのバックエンドがあるので、view.pyのメソッドはすべての要求に対して明示的にredisに接続する必要はありませんか?Django redis接続バックエンドまたは1つの実装方法
もしそうでなければ、どのように実装しますか?新しいプラグインですか?新しいバックエンド?新しいジャンゴミドルウェアですか?
ありがとうございます。
Djangoでredis接続を管理するためのプラグインまたはサードパーティのバックエンドがあるので、view.pyのメソッドはすべての要求に対して明示的にredisに接続する必要はありませんか?Django redis接続バックエンドまたは1つの実装方法
もしそうでなければ、どのように実装しますか?新しいプラグインですか?新しいバックエンド?新しいジャンゴミドルウェアですか?
ありがとうございます。
非relデータベースの新興標準はdjango-nonrelだと思います。私はdjango-nonrelが生産準備が整っているのか、それともredisがサポートされているのかはわかりませんが、writing a custom no-sql backendに関するガイドがあります。
残念ながら、私は標準djangoのredisのサポートを書くことはDatabaseBackend
と書くのが簡単だとは思わない。 ACIDデータベースを仮定したdjangoモデルのメカニックやワークフローには、多くのものがあります。 syncdb
はどうですか?約Querysets
?
しかし、models.Manager
を使用して貧弱なアプローチを作成し、モデル上で多くの調整を行うことがあります。たとえば、次の
# helper
def fill_model_instance(instance, values):
""" Fills an model instance with the values from dict values """
attributes = filter(lambda x: not x.startswith('_'), instance.__dict__.keys())
for a in attributes:
try:
setattr(instance, a, values[a.upper()])
del values[a.upper()]
except:
pass
for v in values.keys():
setattr(instance, v, values[v])
return instance
class AuthorManager(models.Manager):
# You may try to use the default methods.
# But should be freaking hard...
def get_query_set(self):
raise NotImplementedError("Maybe you can write a Non relational Queryset()! ")
def latest(self, *args, **kwargs):
# redis Latest query
pass
def filter(self, *args, **kwargs):
# redis filter query
pass
# Custom methods that you may use, instead of rewriting
# the defaults ones.
def open_connection(self):
# Open a redis connection
pass
def search_author(self, *args, **kwargs):
self.open_connection()
# Write your query. I don't know how this shiny non-sql works.
# Assumes it returns a dict for every matched author.
authors_list = [{'name': 'Leibniz', 'email': '[email protected]'},
'name': 'Kurt Godel','email': '[email protected]'}]
return [fill_instance(Author(), author) for author in authors_list]
class Author(models.Model):
name = models.CharField(max_length = 255)
email = models.EmailField(max_length = 255)
def save(self):
raise NotImplementedError("TODO: write a redis save")
def delete(self):
raise NotImplementedError(""TODO: write a delete save")
class Meta:
managed = False
。私は をテストし、このコードを実行していません。まず、ジャンゴ・ノンレルの調査をお勧めします。
ありがとうございます。私はモデルを赤いインスタンスに格納する必要はないので、私はdjango-nonrelが必要とは思わない。私は自分で接続管理モジュールを実装します。 – simao