Djangoでの経験、または生活を楽にする10の便利なモジュール

Django、またはブロンド、ブルネット、オールオールオールのDjangoでの貴重な体験 過去15週間、私たちはDjangoで書かれた最初の主流プロジェクトであるStillionプロジェクトに積極的に取り組んできました。 コミュニティと共有したいという興味深い経験が得られました。

この記事は主にDjangoの初心者にとって興味深いものです。





Djangoモジュール



Southは、スキーマとデータをdjangoのデータベースに移行するためのメカニズムです。これを使用しないと、共同開発なしでは生きられません。 残念ながら、Dzhangにはプロジェクトデータベーススキーマの変更を追跡するための定期的な移行メカニズムはありません。 このギャップを埋めるために、私たちは南を使用しました。これは良いことが証明されました。主なことは、それがどのように機能するかを調べることです。 レーキ:移行はフィクスチャなしで実行できるため、これを使用する必要があります。 データの移行は手書きで作成する必要があります。 異常なフィールド(たとえば、WYSIWYGフィールド)を使用してから破棄すると、古い移行は機能しません(ただし、手動で書き換えることができます)。



django-mptt

ジャンゴモデルのネストされたセットの実装。 適切なフィールドと、ツリーを操作するためのメソッドを追加します。 リレーショナルDBMSで階層構造を実装するために不可欠なもの。 管理パネルでツリーを表すために、fein-cmsを使用しました。

django-mptt






ジャンゴ迷惑

view_toおよびajax_requestデコレータまたはHttpResponseReloadなどの便利なユーティリティのセット。 コードの優雅さを高めるために推奨されます。



django-debug-toolbar

デバッグ情報を含むパネルを表示するモジュール。 私たちは主に、クエリのソース、時間などに関する情報によって補足されるSQLクエリログに関心がありました。



変身

Djangoと統合可能な形態学的アナライザー。 通常の形式で格納されている単語を宣言するために使用されます(つまり、1つの単語のさまざまな形式を格納する必要がなくなります)。 彼はまた、単語を複数形にする方法を知っています。
morph.pluralize_inflected_ru(u'', 38) >>> 
      
      



欠点-バックエンドとしてのsqliteの速度が遅い(Shelve、CDB、Tokyo Cabinetの高速な代替手段がありますが、私たちはそれらが好きではありません)、すべての単語が正しく処理されるわけではありませんが、これはまれです。



ピチル

「2011年3月18日」に悩まされないようにするために、ピチルを使用してロシアの日付を処理します。 ちなみに、このモジュールはロシア語のテキストを音訳し、数字と形容詞に応じて正しい大文字と小文字を選択できます(ただし、辞書がない場合は、テンプレートに3つの単語形式を保存する必要があります)。



sorl-thumbnail

画像のサムネイルを自動的に作成するためのアプリケーション。 キーと値のストレージに基づいて動作します(もちろん、ボックスから利用可能なredisバックエンドとして使用されます )。 バックエンドはサムネイル自体を保存せず(ファイルに保存されます)、メタ情報( モジュールの概略図 )のみを保存します。
 {% thumbnail image "100x100" crop="top" as im %} <img src="{{ im.url }}"> {% endthumbnail %}
      
      





sorl-thumbnail


ジャンゴ圧縮

CSSとJSの接着と縮小。 構成では、接着用のファイルセットが格納され、テンプレートではアセンブリの名前を指定し、圧縮により縮小バージョン(YUIおよびCSSMinフィルター)が生成されます。 フィルタを使用して機能を拡張できます。 バージョン化されたファイル名をサポートします。これは、Expiresヘッダーを長期間設定する場合に非常に便利です(manage.py syncompressは、本番環境に配置されたときに、縮小されたファイル自体の名前と内容を更新します)。



ジャンゴ歩sen

DISQUSの作成者による非常に便利なアプリケーション。データベースにエラーを簡単に記録できます。 Sentryは例外(たとえば、Http404)をキャッチして保存し、エラーの頻度を(グラフィカルを含めて)表示する美しいインターフェースを提供します。 複数のサーバーからエラーを収集することが可能です。 セントリーオンアブレのレビュー

django-sentry






django-admin-tools

このアプリケーションは、管理ダッシュボードを便利にするのに役立ちます。 組み込みのウ​​ィジェットセットがありますが、独自のウィジェットを作成することは難しくありません。 タスク用のメニューを作成することもできます。このメニューは、管理パネルのすべてのページで利用できます。 Habrの管理ツールのレビュー

django-admin-tools










コメント



コメントを行ったとき、サードパーティのサービス(VKontakte、Facebook、openid、およびそれらのような他のサービス)を介した承認が最良の選択肢になると判断しました。 これは、ユーザーがさまざまなリソースから多くのパスワードを作成して覚える必要がないため、ユーザーにとって非常に便利です。 これを迅速かつ簡単に行うために、 Loginzaサービスがあります。 インターフェースがあまり好きではなかったため、メインサービスとの統合を独自に実装しました。









publicauthモジュールは基礎として採用されましたが、完全に終了する必要がありました。 問題は、mail.ruおよびその他のロシアのサービスとの統合を追加することに限定されませんでした。 「正しい」openIdプロバイダーの署名検証を追加し、かなりフレンドリーな2クリックウィジェットを作成しました。







生産性の最適化



実際には、djangoの弱点の1つはORMでした。 すべてのORMと同様に、データを取得するときに大量のリクエストを生成し、大量のメモリを消費します。 キャッシュなしでは、 メインページの生成に数秒かかりました。 データベーススキーマではselect_relatedなどの通常のツールの使用が許可されていないため、可能な最適化戦略の中で、キャッシングが最も安価で効果的であることが判明しました。



キャッシング

「すぐに使用可能な」タイムアウトによるブロックキャッシュは、キャッシュをフラッシュする便利な方法を提供しなかったため、私たちには適していませんでした。 したがって、次の戦略が選択されました。キャッシュは無期限に存続し(TIMEOUT = 0)、キャッシュ内の書き込みキーの一部の1つは、メインオブジェクトの最終更新の日付です。 依存オブジェクトは、post_save信号を使用してコアを更新します。 したがって、オブジェクトを変更すると、キャッシュ用のキーの名前が自動的に変更され、サイト上の最新データを表示できます。 Redisは、allkeys-lru押し出しアルゴリズムでキャッシュバックエンドとして使用されます(長時間使用されていないキャッシュキーは、maxmemoryの制限に達すると削除されます)。 ところで、大根では、データベースをもう少しオフロードするためにユーザーセッションも保存します。



RANDによる注文()

.order_by( '?')を介してランダムな値を選択してデータベースをロードしないために、次のアプローチが使用されます:混合する必要があるデータが取り出され、キャッシュに入れられます(特に、このデータを選択するロジックが簡単ではなく、多数のクエリが必要な場合)識別子のリスト、および発行されるとrandom.shuffle()がこのリストに適用されます。

要約:賢明なキャッシュ:-))





結論として



Djangoは多くの素晴らしい追加機能を備えた素晴らしいフレームワークです。 それを使用するとき、あなたはそれが私たちの便宜のために作成されたことを理解します。 素敵なコーディングをしてください!
脅威。 仕事を探しているおなじみのタイプセッター/フロントエンド開発者がいますか(常勤、オフィス、モスクワ)。



All Articles