Make組ブログ

Python、Webアプリや製品・サービス開発についてhirokikyが書きます。

Django

DjangoCongress JP 2022、開催します!そしてトークを募集中です

DjangoCongress JP 2022を11月12日(土曜日)に開催します! そのトークを募集中ですので、ぜひお気軽に応募してください。 締切は 8月12日(金曜日) いっぱいです。 応募フォームはこちら 「私なんて…」と思う方、ご安心ください。今日はトーク応募のポイ…

DjangoのQuerySetでグループごとに最大・最小のデータのみ取得する

DjangoのQuerySetでグループごとに最大・最小のデータのみ抽出する方法を紹介します。 この記事はDjango Advent Calendar 2021 3日目の記事です。 グループごとの最大・最小のデータとは何でしょうか? たとえば以下のような場合に必要となります。 ブログ記…

DjangoCongress JP 2021が発表してくれる人を募集しています

2021年7月3日(土曜日)にDjangoCongress JP 2021が開催されます。 そのイベント当日に、Djangoについて発表してくれる方を募集しています。締切は5月12日(水曜日)です。 djangocongress.jp 今年もイベントの代表として頑張っていますので、応援いただける…

Djangoのマイグレーションで実行される処理(とSQL)を確認する方法

Djangoのマイグレーションで実行される処理(とSQL)を確認する方法を説明します。 先日の記事では「Djangoマイグレーションを無停止で反映する方法」を説明しましたが、そのためにはマイグレーションでどんなSQLが実行されるかが重要になります。 blog.hiro…

DjangoマイグレーションをWebアプリが無停止のまま安全に反映する方法

Djangoはデータベースマイグレーションの機能を持っています。 ですが、 実際、Djangoマイグレーションってどう使うの? という疑問が多いかと思います。 docs.djangoproject.com この記事では、 マイグレーションを稼働中のアプリケーションに、無停止でど…

Djangoでdjango-hijack-adminをカスタムユーザーモデルと使うときのハマりポイント

django-hijack-admin とDjangoのカスタムユーザーを併せて使うとき、Adminサイトへの登録でハマるので書いておきます。 django-hijackとは、Admin画面から別ユーザーのセッションを乗っ取れるライブラリーです。 個別のユーザーで問題が発生しているときに状…

Djangoのcacheのキーには必ず文字列を指定しよう

Djangoのキャッシュ(cache)にはキーを文字列として指定しましょう。 >>> from django.core.cache import cache >>> cache.get("mykey") # OK >>> cache.get("1") # OK >>> cache.get(1) # よくない キャッシュバックエンドの実装によっては数値でも指定で…

DjangoCongress JP 2019を主催したよという話

DjangoCongress JP 2019というイベントを主催しました。 2018年もDjangoCongress JP 2018 を主催しましたが、今年も主催しました。 全員であわせて130人くらいが参加するイベントになりました。 「130人にもなるとやっぱ人多いなぁ」 と、集合写真を撮ってい…

Djangoのresponse.set_cookieはmax_ageを指定すればexpiresが勝手に計算される

DjangoでCookieを設定するときは response.set_cookie を使います。 response = TemplateResponse(...) response.set_cookie("key", "value", max_age=3600) 今まで知らずに expires も自分で計算して設定していましたが、 max_age を指定して expires を指…

DjangoGirlsTokyo 4 でコーチをしました #djangogirls

DjangoGirls Tokyo #4 でコーチをしてきました。 私がコーチをするのは 第1回目 以来です。 djangogirls.org 進め方としては、 Django Girls Tutorial というチュートリアルを参加者の方が進めて学んで、コーチがサポートします。 このチュートリアルはかな…

gunicornでPython製Webアプリケーションを動作させよう(DjangoとFlask)

前の記事ではWSGIアプリケーションをWSGIサーバー(gunicorn)で起動する方法を説明しました。 ここではgunicornを使って、Python製WebフレームワークでできたWebアプリケーションを起動しましょう。 blog.hirokiky.org なぜgunicornなどのWSGIサーバーを使…

DjangoRestFrameworkのSerializerから関数/メソッドの結果をフィールドの値として返す

DjangoRestFrameworkのSerializer(ModelSerializer)で、フィールドの値を関数/メソッドの結果で返したいことがあります。 これはバリデーションとしてSerializerを使うのでなく、モデルから辞書に値を変換したい場合の話です。 例えば、フィールドの日時が…

Djangoで親の親のモデルを1クエリーで取る

Djangoのモデルから親のモデルを取ると(select_relatedなどしていないと)1クエリー実行されてしまいます。 以下のように、親のさらに親を取ろうとすると2クエリー実行されます。 me.parent.parent me.parent の時点で1クエリー実行されて、 parent.parent …

DjangoのField.__init__ でクエリーしてはいけない

動的にフォームの choices の値を作りたい場合など、フォームの内容のためにクエリーすることはよくあると思います。 でも、フィールドの __init__ でクエリーしてしまうコードを書くとインポート時に実行されてしまうので注意が必要です。 ダメな例 class F…

DjangoでDB非依存に権限管理できるライブラリーdjango-keeperを作りました

Djangoで権限管理ってどうやっていますか? Django自体が持つGroupやPermissionはイマイチ業務では使えないというのが実際のところなのではと思います。 そんな悩みを解決するために django-keeper というライブラリーを作りました。 こんな悩みに: DBで権限…

Django、チュートリアルの次にやったこと(2012Pythonアドベントカレンダー1日目 #python_adv)

2012Pythonアドベントカレンダー1日目を担当します、取りまとめ役の id:hirokiky です。 この記事では私がDjangoのチュートリアルの次にやってきたことを書きます。 内容としては「Django」に限った話ではなくて、そもそもプログラミング自体そんなにしたこ…

DjangoでオレオレWidgetを作ってみた(Renderer編)

ウィジェットとは、Django で HTML の入力エレメントを表現するためのオブジェクトです。ウィジェットは、 HTML のレンダリングや、個々のウィジェットに対応するデータをGET/POST 辞書から抽出する処理を行います。 http://djangoproject.jp/doc/ja/1.0/ref…

DjangoでTwitterBootstrap使うならdjango-boostrap-toolkitがオススメ

Django 製サイトで TwitterBootstrap を使いたいときはdjango-bootstrap-toolkit を使うのがオススメ。

Django の FormWizard で FormSet を使う

単一のフォームについて複数回入力するなら FormSet 、 複数種類のフォームを画面遷移なしで入力するなら FormWizard がある。FormWizard で FormSet を使ってみた

フォームにすでに入力されている値をテストする (オブジェクト更新用のビューをテスト)

オブジェクト更新用のビューのテストをするときに、フォームにすでに入力されている値をテスト したいことがある。 >>> response = self.client.get('/update/1/') response オブジェクトから、いかにフォームの初期値を取るかという問題。

FormSet を空の状態で提供する (オブジェクト作成用のビューで使える)

>>> HogeFormSet = modelformset_factory(Hoge) >>> hoge_formset = HogeFormSet() とすると、FormSet(ModelFormSet) が DB に保存されている既存のオブジェクトに束縛されて提供される。 この挙動はオブジェクトの新規作成をするビューで使うには好ましくな…

Django の FormSet で更新用のビュー作ろうとしてハマったことろ

Django の FormSet についてハマったメモある更新用のビューに FormSet を使いたかった。更新用のビューなので、既存のオブジェクトがある場合は FormSet をそれに対して束縛してやる必要があった。 環境 Django==1.4.1 解法 下記ブログ参考に。 Django mode…

WSGIからDjangoの流れを理解する

WSGIからの流れを大まかに掴めたのでまとめたい。かなり大まかには、この画像を念頭におけばいいと思う。 今回はDjango1.4を対象にしている。 注意 流れを理解するために読むべきソースコードへのリンクと、その順番をまとめてる。 読みやすさはあんまり考慮…

Django1.4のクラスベースビューにおけるHEADリクエストの処理について。

django.views.generic.base.TemplateViewなどのクラスベースビューの実装を見てみると、head()メソッドが書かれていないように見える。しかしHEADリクエストには対応してる、という話。「TemplateViewはHEAD対応していない」的なお話を聞くことがあるから書…

django-cms で言語別のページを用意しない方法

django-cms で言語別のページを用意しない方法。django-cms のチュートリアル (3. Introductory Tutorial — django cms 2.3 documentation) どおりに導入すると、例えば /tempura というURLに http://example.com/tempura/ http://example.com/en/tempura/ …

django-cms 導入中にurlsがインポートできない件の解決

django-cms のドキュメント (https://www.django-cms.org/en/documentation/) を参考に django-cms 導入デモ中のこと。 開発用サーバー起動後にブラウザから開くと ImportError at / No module named urls がでる。

django-blog-zinnia導入時のハマりどころ2点

Django製サイトにブログを導入するdjango-blog-zinniaについて、ハマりどころ書く。 http://django-blog-zinnia.com/documentation/getting-started/overview/ 以下2点でハマった。 Error: One or more models did not validate TemplateSyntaxError at /web…

Django製サイトにSphinx製ドキュメントを導入する方法

Django製のサイトにSphinx製のドキュメントをアッサリ導入する方法。 Sphinxドキュメントを http://example.com/docs/ に導入できる。 ユーザーグループのサイト作って、ドキュメントを/docs/以下に用意したい人とかが対象になると思う。記事の内容はほとん…

Django 1.4のproject template便利

Django 1.4からの機能であるproject templateが大変便利であると最近気づいた。 2012.9.21 追記 app templateじゃないよ app templateって書いてたけどproject templateだった。 Django & Pyramid Con で話した project templateについては Django & Pyramid…

Django1.4のドキュメント翻訳とかそのコミッタになったとか

django-docs-ja · GitHubのメンバーになりました。 これはDjangoのドキュメントの日本語訳をしているグループで、このたび1.4に対応させようと活動しています。 django-docs-ja/django-docs-ja · GitHub