Make組ブログ

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

Django

【募集】DjangoCongress JPの開催地を募集します

こんにちは。今日は少しお願いがあります! DjangoCongress JPの開催地・会場を募集しています。 例年開催しているDjangoCongress JPですが、次回の開催地と会場がまだ決まっていません。とくに東京以外の場所で「ぜひここでやろう!」という方を求めていま…

結局、migrate機能ってなぜ必要なの? WebフレームワークのDBマイグレーション機能の意味を解説します

DjangoなどのWebフレームワークにはマイグレーションという機能が搭載されています。ですがこのマイグレーションという機能の必要性が分かりにくい(いまいちピンときていない人がけっこう多い)ので背景を踏まえて説明します。 マイグレーションとは何なの…

DjangoCongress JPやるってよ!

来月の10月7日(土曜日)にDjangoCongress JP 2023をやります! これを読んでくれている、Djangoに興味がある方にお伝えしたいです。 Djangoの面白いイベントです PythonのWebフレームワークDjangoに関するカンファレンスです。年に1回のお祭りです。 今年も…

DjangoCongress JP 2023のトーク応募は今日(8月21日)締切です

皆さんこんにちは。 DjangoCongress JP 2023のトーク応募の締め切りは今日です! Djangoの知見がある方、何か共有したいことがある方、会社を知ってほしい方、ぜひご応募ください。 forms.gle あまりハードルは高く考えなくても大丈夫です! この機会にカン…

ChatGPTを非同期でPythonから利用する方法

ShodoがChatGPTに対応しましたね。 最近注目されている自然言語処理技術の一つChatGPT。本記事ではPythonからChatGPTを非同期で扱う方法についてご紹介します。 実はこの記事もChatGPTに書いてもらい、僕が加筆し、Shodoで校正しています。 ChatGPTと非同期…

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/ …