pythonとdjangoに関する混乱したメモ

pythonとdjangoに関するいくつかの小さなメモ/ヒントが蓄積されていますが、それらは別々のトピックに引き寄せられていないため、一度にすべてを公開します。

カットの下:



Django:ビューコードの簡素化


Djangoのドキュメントとチュートリアルは通常、次のようなビューを作成します。

def contact(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): #  . ,  form.save() # ... return HttpResponseRedirect('/thanks/') #  POST-   else: form = ContactForm() return render_to_response('contact.html', { 'form': form, }, context_instance=RequestContext(request)) 


これはおそらく正しいです-人が何が起こっているかをよりよく理解するように説明する。 しかし実際には、このコードは正確に2倍短く書かれています。

 def contact(request): form = ContactForm(request.POST or None) if form.is_valid(): #  . ,  form.save() # ... return redirect('url_name', param1=value) return direct_to_template(request, 'contact.html', {'form': form}) 


チップ:


Django:グラフィックスを描く


管理パネルに関する記事で、彼はグラフィックスについて話すこと約束しましたが、それでも彼の手は届かず、うまくいきませんでした。 はい、そして特別なことは何もありません。すべてが単純すぎて「愚か」です-グラフはグーグルチャートを通して描かれます。 この場合、ライブラリなしで実行できます: ここで味わうグラフを作成します (これはGoogleの半公式ツールです。apigoogleチャートのヘルプからリンクがあります)。次に、結果の行をテンプレートに貼り付け、テスト値の代わりに変数を置き換えます。

Googleチャートの非常に薄いラッパーがあります: django-chart-tools 本質は同じです。グラフを視覚的に収集して変数を置き換えるには、django-chart-toolsを使用するだけで、このようなグラフを維持する方が便利です。

データのサンプリングは、タスクに応じてdjango ORMを介して、または便宜上/速度のためにdjango-qsstats-magicを介して簡単に実行できます。

その結果(django-chart-toolsとdjango-qsstats-magicを使用)、ユーザーの日次グラフは次のように表示できます。

 #   qs = User.objects.filter(is_active=True) end = datetime.today() start = end-timedelta(days=30) #     data = QuerySetStats(qs, 'date_joined').time_series(start, end) values = [t[1] for t in data] captions = [t[0].day for t in data] 


次に、変数の値とキャプションをテンプレートに渡し、そこにグラフを次のように表示します。

 {% load chart_tags %} {% bar_chart values captions «580x100» %} 


Googleチャートの画像APIでは、ヒット数に制限はありません 。1日あたり20万件を超えるヒットが負荷を分散する場合にのみ連絡するように要求します。 そのため、このようなグラフは管理パネルだけでなく使用できます。

Django:テスト


django-webtestを使用してテストを作成します。 私はすでにこのアプリケーションについて書きましたが、それから1つの非常に重要な変更が発生しました。django-webtestが(標準のdzhangovskyテストクライアントのように)テンプレートのコンテキストにアクセスできるようになりました。 GregorMülleggerに感謝します。 これで、このスタイルで書くことができます:

  # ... response = page.forms['my-form-id'].submit().follow() assert response.context['user'] == self.user 


標準の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アプリケーションを使用できます。

うわー、私たちはすべてを仮定します。

Source: https://habr.com/ru/post/J105627/


All Articles