pythonとdjangoに関するいくつかの小さなメモ/ヒントが蓄積されていますが、それらは別々のトピックに引き寄せられていないため、一度にすべてを公開します。
カットの下:
- ビューコードを正確に2回単純化する方法
- グラフを描く簡単な方法
- イアン・ビッキングが「クール!」
- 5分でDjangoでVKontakteのアプリケーション
- pymorphyは良いですか?
- pypiでのパッケージのレイアウトに関するいくつかのチップ
- デコレータとwith-contextマネージャの共通点は何ですか?
- ジャンゴサイトで支払いを受け入れる
- 指定された住所のYandex.Mapを表示します
Django:ビューコードの簡素化
Djangoのドキュメントとチュートリアルは通常、次のようなビューを作成します。
def contact(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid():
これはおそらく正しいです-人が何が起こっているかをよりよく理解するように説明する。 しかし実際には、このコードは正確に2倍短く書かれています。
def contact(request): form = ContactForm(request.POST or None) if form.is_valid():
チップ:
- 非バインドフォームの場合、is_validは常にFalseを返します。 その後、
ContactForm(request.POST or None)
コードContactForm(request.POST or None)
がどのように機能するかがすぐにわからない場合は、演習として理解して、ペイントしません。 これはシンプルで便利なイディオムです。 - リダイレクトには常に
django.shortcuts.redirect
を使用します。 URL名を逆にする、get_absolute_urlを呼び出す、または単にURLをリダイレクトする render_to_response
代わりにdjango.views.generic.simple.direct_to_template
を使用します。 それらはほとんど同じことをdirect_to_template
ますが、 direct_to_template
はほとんどの場合direct_to_template
必要であるContextの代わりにdirect_to_template
使用します。 direct_to_template
代わりに、django- direct_to_template
のrender_toデコレーターを使用できますが、これはすでに好みの問題です。
Django:グラフィックスを描く
管理パネルに関する記事で
、彼はグラフィックスについて話すこと
を約束しましたが、それでも彼の手は届かず、うまくいきませんでした。 はい、そして特別なことは何もありません。すべてが単純すぎて「愚か」です-グラフはグーグルチャートを通して描かれます。 この場合、ライブラリなしで実行できます:
ここで味わうグラフを作成し
ます (これはGoogleの半公式ツールです。apigoogleチャートのヘルプからリンクがあります)。次に、結果の行をテンプレートに貼り付け、テスト値の代わりに変数を置き換えます。
Googleチャートの非常に薄いラッパーがあります:
django-chart-tools 本質は同じです。グラフを視覚的に収集して変数を置き換えるには、django-chart-toolsを使用するだけで、このようなグラフを維持する方が便利です。
データのサンプリングは、タスクに応じてdjango ORMを介して、または便宜上/速度のために
django-qsstats-magicを介して
簡単に実行できます。
その結果(django-chart-toolsとdjango-qsstats-magicを使用)、ユーザーの日次グラフは次のように表示できます。
次に、変数の値とキャプションをテンプレートに渡し、そこにグラフを次のように表示します。
{% load chart_tags %} {% bar_chart values captions «580x100» %}
Googleチャートの画像APIでは、ヒット数に制限はあり
ません 。1日あたり20万件を超えるヒットが負荷を分散する場合にのみ連絡するように要求します。 そのため、このようなグラフは管理パネルだけでなく使用できます。
Django:テスト
django-webtestを使用してテストを作成します。 私はすでにこのアプリケーションについて
書きましたが、それから1つの非常に重要な変更が発生しました。django-webtestが(標準のdzhangovskyテストクライアントのように)テンプレートのコンテキストにアクセスできるようになりました。 GregorMülleggerに感謝します。 これで、このスタイルで書くことができます:
標準のassertTemplateUsedも機能します。
django-webtestは、ツイルの統合よりも優れています。 テンプレートのコンテキストにアクセスしたり、Unicodeを完全にサポートしたりすることはできず、ツイルは開発されません。
django-webtestは、標準のテストクライアントよりも優れています。 シンプルなAPIを提供します(標準のテストクライアントを介してデフォルト値でフォームを送信してみてください)。 また、標準のテストクライアントでcsrfトークン(または非常に
黒いループ)が存在しないことをテストすることはできませんが、django-webtestではこれは簡単に(さらには自動的に)行われます。 django-webtestを使用)
ここでは、機能を備えたポップアッププレートを作成します。django-webtestにはどこでも緑色のチェックマークがあり、ツイルと標準テストクライアントにはあちこちに赤いものがあります。 Ian Bickingでさえ、django-webtestは「クール」だと考えています。
Django:Vkontakte用のアプリケーションの作成
単純なだけでなく、非常に単純です。 通常のサイトとの違いは、ユーザーの登録方法とログイン方法のみです。 django-registrationの代わりに、django-
vkontakte-iframeを設定および構成します。 これで、すべての訪問者が登録および承認されたdjangoユーザーになりました。それ以外の場合は、通常のサイトを開発できます。 iframeサイズをページサイズに合わせるためにjsの世話をしない限り。
Python / Django:ロシア語での作業
誰も知らない、
pymorphyはロシア語を扱うためのpythonライブラリです。 形態素解析と大砲からスズメを撃つことができます:たとえば、ベースから単語を傾斜させる(または単純なフレーズ)djangoテンプレートに直接入力したり、数に応じて正しい形式に配置したりする-偏角のすべてのバリアントの明示的なリストなし
pymorphyは、ギーク雑誌の
記事から成長しました 私は認める、コードは最初は良くなかった、なぜなら これはpythonとnlp(自然言語処理)の両方での初めての経験でした。 しかし、形態素解析器は書かれており、1年間放棄されました。
今年の初めに、彼はpymorphyの作業を再開し、そこにあるすべてのものを書き直しました。 そして春には、Dialogue 2010カンファレンスで形態素解析の「競合」が行われました。 非常に真剣な
人がそこに参加し、結果はプロの言語学者によってチェックされました。 Morphologyトラックの
pymorphyが最善を尽くしました(おそらく、ハイフンで書かれた複合語を使用して作業を展開したためです)。 また、pymorphyは、トラックの解析を「ダーティ歌詞」で送信する唯一の参加者でした。 これは本当に何の意味もありませんが、素晴らしいです)
Python:pypiでパッケージをレイアウトするためのいくつかのトリック
1. long_descriptionのsetup.pyでは、ReSTマークアップを使用できます。 README.rstファイルをsetup.pyの横に配置してから、指定するだけで便利です
long_description = open('README.rst').read()
その後、pypiのプロジェクトページはすぐにヘルプを表示します-シンプルで便利で、90%の個別のドキュメントに関するトラブルの必要性を排除します(別のそのような発言があります-それでもパッケージにナビゲーションなどのドキュメントが必要と思われる場合)検討する価値があります-パッケージが多すぎますか?)。
2. setup.pyにはあまり知られていないハックがあります。 マークアップが意図したとおりに見えない場合、またはタイプミスや分類子が修正されている場合、これらのエラーを修正するために新しいリリースを作成する必要はありません。単に
./setup.py register
を実行するとデータが
./setup.py register
ます。
Python:デコレータと
デコレータとpythonのwith演算子は、同じことのためによく使用されます。特定のコードの前または後に追加のアクションを実行するためです。 そしてこれは、デコレータとして、およびwith用のコンテキストマネージャとして使用できるもの(たとえば、
gist.github.com/573536 )を作成できることを意味します。
Django:サイトで支払いを受け入れる
どちらかといえば、django-robokassaとdjango-assist-ruを介して、数千件の購入が生産で行われ、100万ルーブルを超えました。
誰が何を使用するかをリストに追加します。
Python / Django:サイトにYandex.Mapを表示する
ジオコーディングとキャッシュを混乱させないために、
yandex-mapsアプリケーションを使用できます。
うわー、私たちはすべてを仮定します。