Djangoで生活を簡素化する

Djangoの使用中に、デコレータ、ショートカット、カスタムフィールド、および便利なパッケージの形でプロジェクトからプロジェクトへとさまようユーティリティだけの多くの小さなツールを蓄積しました。 最終的に、このようなコードは具体化されたエクスペリエンスであり(さらに良い-コードを実行できる)、誰にとっても便利なものを開くので、私の経験を共有することにしました。

このパッケージの目的は、djangoフレームワークを使用するときに必要な定型文を減らすことです。 同じことを何度も書く必要をなくすために、コードを短くして表現力豊かにします。

したがって、パッケージをインストールします。

pip install handy 

そして始めましょう。 便利なものは何ですか?

1. HttpResponseおよびrender_to_response()回避
デコレータ@render_to()

 #        'app_name/foo.html', #  app_name -    @render_to() def foo(request): return { 'bar': Bar.objects.all() #    , HTTP ,      'STATUS': 410, 'CONTENT_TYPE': 'text/plain' } 

2.数行のJSONビュー:

 @render_to_json() def posts_by_tag(request, tag=None): posts = Post.object.values().filter(tag=tag) return list(posts) 

3.さらに複雑な非同期リクエストを処理するためのさらに高いレベルのラッパー:

 @ajax @ajax.login_required @ajax.catch(Post.DoesNotExist) def enable_post(request): post = Post.objects.get(pk=request.GET['id']) if post.author != request.user: #  {"success": false, "error": "permission_denied"} raise ajax.error('permission_denied') post.enabled = True post.save() #  {"success": true, "data": null}    

4.テンプレートによって生成されたレターを1行で送信します。

 render_to_email(article.author.email, 'approved.html', {'article': article}) 

レターテンプレートには、件名とその他の見出しを含めることができます。

5.モデルフィールドのコレクションと、対応するフォームフィールドおよびウィジェット:

 DAYS = zip(range(7), 'Sun Mon Tue Wed Thu Fri Sat'.split()) class Company(models.Model): phones = StringArrayField('Phone numbers', blank=True, default='{}') workdays = IntegerArrayField('Work days', choices=DAYS) company = Company(phones=['234-5016', '516-2314'], workdays=[1,2,3,4]) company.save() 

フォームでは、 phonesはコンマで区切られたテキストボックスに表示され、 workdaysはいくつかのチェックボックスの形で表示されます。

任意のデータや他のフィールドを保存するためのJSONFieldもあります。

そしてまた:
-html-answersから不要なスペースを切り取るミドルウェア、
-一般的なマスタースレーブルーター、
-ロギングを簡素化する小さなラッパー、
-およびテキストとデバッグユーティリティのカップル。

あなたの経験を共有してください


それに応えて、私はあなたの人生を簡素化する方法を聞いたり、もっとよく見たいです。 解決策がない場合、開発者の人生で遭遇する問題や単純に繰り返される作業パターンも興味深いものです。

リンク: GithubPyPiDjangoパッケージおよび英語のドキュメント

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


All Articles