2010-12-28 6 views
5

Djangoでredis接続を管理するためのプラグインまたはサードパーティのバックエンドがあるので、view.pyのメソッドはすべての要求に対して明示的にredisに接続する必要はありませんか?Django redis接続バックエンドまたは1つの実装方法

もしそうでなければ、どのように実装しますか?新しいプラグインですか?新しいバックエンド?新しいジャンゴミドルウェアですか?

ありがとうございます。

答えて

5

非relデータベースの新興標準はdjango-nonrelだと思います。私はdjango-nonrelが生産準備が整っているのか、それともredisがサポートされているのかはわかりませんが、writing a custom no-sql backendに関するガイドがあります。

残念ながら、私は標準djangoのredisのサポートを書くことはDatabaseBackendと書くのが簡単だとは思わない。 ACIDデータベースを仮定したdjangoモデルのメカニックやワークフローには、多くのものがあります。 syncdbはどうですか?約Querysets

しかし、models.Managerを使用して貧弱なアプローチを作成し、モデル上で多くの調整を行うことがあります。たとえば、次の

私はあなたがDjangoのモデルを微調整することができる方法のスケッチを作ったしてくださいではないことを
# 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 

。私は をテストし、このコードを実行していません。まず、ジャンゴ・ノンレルの調査をお勧めします。

+0

ありがとうございます。私はモデルを赤いインスタンスに格納する必要はないので、私はdjango-nonrelが必要とは思わない。私は自分で接続管理モジュールを実装します。 – simao

関連する問題