django-user-streams

ソフトウェアのスクリーンショット:
django-user-streams
ソフトウェアの詳細:
バージョン: 0.5.0
日付のアップロード: 14 Apr 15
開発者: Jamie Matthews
ライセンス: 無料
人気: 25

Rating: 5.0/5 (Total Votes: 1)

ジャンゴ - ユーザーストリームあなたのサイトの周りに起こって活動をそれらに通知する、ユーザーのために(また、アクティビティストリームとして知られている)ニュースフィードを作成するためのDjangoのアプリです。スピード、プラガビリティと簡単にするために最適化された。
ニュースフィード項目は、文字列とタイムスタンプとして保存されます。あなたはそのような一般的な外部キーへと俳優またはターゲットとしてストリームアイテム、に関する追加のメタデータを格納することはできません。あなただけのプレーンテキスト(またはHTML)などの項目の内容を保存する。あなたが他のオブジェクトへのリンクが必要な場合は、単にタグを挿入します。
<強い>インストールの
あなたはPyPIのからジャンゴ·ユーザー·ストリームをインストールすることができます。
ジャンゴ·ユーザ·ストリームをインストールピップ
あなたのINSTALLED_APPS設定にuser_streamsを追加します。また、あなたのストリームが保存されている方法を定義するバックエンドを、必要とする。これらは、以下に説明する。
INSTALLED_APPS = [
&NBSP; ...
&NBSP; 'user_streams」、
&NBSP; 'user_streams.backends.single_table」、
&NBSP; ...
]
USER_STREAMS_BACKEND = 'user_streams.backends.single_table.SingleTableDatabaseBackend」
Djangoのモデルレイヤを使用してストリーム·アイテムを格納バックエンドを使用している場合最後に、必要なデータベーステーブルを作成するためにmanage.py syncdbを実行します。
のAPI
ストリームにアイテムを追加する
ストリーム項目を作成するには:
輸入user_streams
ユーザー= User.objects.get(ユーザ名= 'ジェイミー')
user_streams.add_stream_item(ユーザー、 'これは、ストリーム項目の内容である')
add_stream_itemの最初の引数は、単一のユーザー·インスタンス、または複数のユーザーを表すクエリセットすることができます。後者の場合、ユーザーが指定するメッセージは、クエリセット内の各ユーザのストリームに追加される。
輸入user_streams
user_streams.add_stream_item(User.objects.all()、「すべてのユーザーにブロードキャストメッセージ ')
また、created_atと引数の値としてdatetime.datetimeのインスタンスを渡すことでストリーム項目の作成時間を指定することができます。
輸入user_streams
日時輸入日時から
ユーザー= User.objects.get(ユーザ名= 'ジェイミー')
user_streams.add_stream_item(ユーザー、「あなたは、新しいメッセージを持っている!」、はcreated_at = DateTime.Nowが())
タイムゾーン上の注意
あなたがadd_stream_itemするcreated_atと引数を渡さない場合、デフォルトでは、datetime.datetime.now()の値は、あなたのストリームアイテムにタイムスタンプするために使用されます。これはおそらく、少なくとも意外な動作であり、あなたのアプリは、これまでに1タイムゾーン(およびそれらのユーザーがWebサーバーと同じタイムゾーンにあります)のユーザーを扱う場合には、それはおそらく大丈夫です。
ユーザーが世界中にある場合は、しかし、これは悪い考えです。この理由はアーミンRonacherによるこのブログの記事で説明されています。データベースにタイムスタンプを格納するための最良の方法は、UTCタイムゾーンを使用することです。次に、(datetimeオブジェクトがユーザに提示するためにフォーマットされている)最後の可能な瞬間に、ユーザーのローカル時間に変換することができます。
これをサポートするには、いずれかのcreated_at引数あなたがadd_stream_itemメソッドを呼び出すたびに提供することができます。
user_streams.add_stream_item(ユーザー、「あなたは、新しいメッセージを持っている!」、はcreated_at = datetime.utcnow())
あるいは、(デフォルトではFalseです)Trueに(あなたのsettings.pyで)USER_STREAMS_USE_UTC設定を設定することができます。これを行う場合、datetime.utcnow()は、各ストリームアイテムのタイムスタンプを生成するためにDateTime.Nowが()の代わりに使用されます。
あなたはこれらの事のいずれかを行う場合は、ストリームの各項目のcreated_atとプロパティは、UTC時刻に設定されます。これは、書式設定のために、各ユーザーのローカル時間にこれを変換するためにあなたの責任です。それに対処するための簡単​​な方法のための時間を見てみましょう。
ユーザーのためのストリームを取得する
ユーザーのためのストリーム項目を取得するには、次の
輸入user_streams
ユーザー= User.objects.get(ユーザ名= 'ジェイミー')
アイテム= user_streams.get_stream_items(ユーザー)
文字列としてメッセージの内容が含まれますcreated_atと、メッセージの作成タイムスタンプを表すdatetime.datetimeのインスタンスとなり、コンテンツ、これは2つのプロパティを持つことが保証され、それぞれのオブジェクトの反復可能に、戻ります。オブジェクトは、最新の最初に、彼らはcreated_atフィールドが発注されます。返された反復可能な、あなたがそれをスライス(とDjango paginatorのオブジェクトに渡します)、データベースからすべてのアイテムをロードせずにできることを意味し、怠惰になります。
バックエンド
ストリーム記憶は、バックエンドクラスに抽象化されます。三つのバックエンドは、ジャンゴ·ユーザーストリームに含まれています。各バックエンドは主user_streamsアプリに別々にINSTALLED_APPSに追加しておく必要があり独立した再利用可能なアプリで、内に保持されている。これは(Djangoのモデル層を介してデータを格納するバックエンドを使用していると仮定して)各バックエンドに必要な唯一のデータベーステーブルが作成されることを保証することである。
あなたが選ぶどのバックエンドアプリケーションの規模だけでなく、あなたの予想される使用パターンによって異なります。それぞれの長所と短所を以下に記載されている。
SingleTableDatabaseBackend
user_streams.backends.single_table.SingleTableDatabaseBackend
最も単純なバックエンド。あなたのストリーム項目は、ユーザオブジェクト、DateTimeField型のタイムスタンプ、およびあなたのメッセージを格納するためのTextFieldへの外部キーで構成される、単一のデータベーステーブルに格納されています。にデータベースが関与している加入ないのでユーザーのためのストリームをフェッチする、非常に高速である必要があります。トレードオフは、収納スペースである:複数のユーザにメッセージを送信する場合、メッセージは、一度、ユーザ毎に、複数回格納されている。あなたが定期的に数千人のユーザーにメッセージをブロードキャストする場合は、テーブルが非常に大きくなることがあります。
ManyToManyDatabaseBackend
user_streams.backends.many_to_many.ManyToManyDatabaseBackend
このバックエンドは、あなたのユーザオブジェクトへのManyToManyField関係を持つテーブルにあなたのメッセージを格納します。各メッセージは、各受信者のための中間テーブルの行で、一度保存されます。これは、ブロードキャストメッセージのためにはるかに少ないスペースを必要と意味しますが、あなたのクエリが多少遅くなることがあります。
RedisBackend
user_streams.backends.redis.RedisBackend
Redisの店舗でのあなたのメッセージは、各項目のスコアとしてUnixタイムスタンプ(のcreated_at属性)で、セット、ユーザーごとに1つのセットをソート。このアプローチは、ここでより詳細に説明する。 get_stream_itemsによって返さ反復可能な、フィードの各スライスを取得するためにZREVRANGEを使用し、ZCARDはアイテムのセットの完全なサイズを取得する。このバックエンドはものすごく高速である必要があります。
*注意:RedisのバックエンドはRedisの-PYライブラリが必要です。 PIPでインストールRedisのをインストールします。
Redisのバックエンドの設定
以下の設定はRedisのバックエンドの動作を制御します。
USER_STREAMS_REDIS_KEY_PREFIX
バックエンドによって生成された各キーは、この設定の値が付けされます。デフォルトの接頭辞は「user_streams」です。
USER_STREAMS_REDIS_CLIENT_ARGUMENTS
Redisのクライアント·インスタンスのコンストラクタに渡されることになるキーワード引数の辞書。
あなた自身のバックエンドを書く
あなたは、データ·ストアは、アプリケーションに適した何にメッセージを格納するために、独自のバックエンドを作成することができます。バックエンドには2つのメソッドを実装する必要があり、単純なクラスです。
add_stream_item
add_stream_item(自己、ユーザー、コンテンツ、のcreated_at)
あなたのバックエンドのメソッドは、常に人のユーザだけを含むリストである反復可能な、と呼ばれます - ユーザーはあなたが単一のインスタンスを受け入れることを心配する必要はありません(ユーザーインスタンスの反復可能になります。
内容は、ストアへのストリームメッセージを含む文字列になります。
created_atとは、Pythonストリーム項目が作成された時刻を表すのdatetime.datetimeオブジェクトになります。
get_stream_items
get_stream_items(自己、ユーザ)
この方法は、まず、最新のタイムスタンプによってソート与えられたユーザーのためにメッセージの反復可能を返す必要があります。 created_atと(メッセージの内容を含む文字列でなければならない)とコンテンツ(Pythonのdatetime.datetimeのオブジェクトである必要があります):各アイテムに2つの属性を持つオブジェクトでなければなりません。
この方法は、単にメッセージのリストを返すこともできますが、それはあなたのデータストアがサポートしているどのような方法では、リストは何らかの方法でページ分割されると仮定することははるかに効率的だし、サポート·スライシングとオンデマンドのオブジェクトを数える。これを行うには、__getitem__と__len__を上書きする、反復可能オブジェクトを返す必要があります。例えばRedisBackendの実装を参照してください。
の代替品
https://github.com/justquick/django-activity-stream
の開発
貢献するには、次の、リポジトリをforkして変更を行い、いくつかのテストを追加、コミット、機能ブランチにプッシュし、プルリクエストを行ってください。
テストを実行する方法
レポのクローンを作成し、あなたのvirtualenvのに必要条件をインストールし、その後のpython manage.pyテストuser_streamsを入力します。また、すべてのバックエンドのテストを実行するためのpython manage.pyテストuser_streams SINGLE_TABLE many_to_manyのRedisのを使用することができます。あなたはジャンゴ·ユーザ·ストリームをインストールしている場合は、上記のいずれも(もちろん、自分だけが使用しているバックエンドのテストを実行します)、既存のDjangoのプロジェクトに動作するはずます。

の何をこのリリースで新しいのです。

  • Redisのバックエンドでの修正スライス行動します。

の要件

  • のPythonます。
  • ジャンゴます。

開発者の他のソフトウェア Jamie Matthews

confuzzle

20 Feb 15

django-spurl
django-spurl

15 Apr 15

django-activelink
django-activelink

11 May 15

へのコメント django-user-streams

コメントが見つかりません
コメントを追加
画像をオンにする!