前フリ

DjangoをApacheで動かす場合には、mod_pythonを使う方法とmod_wsgiを使う方法があって、mod_wsgiを使う場合はコンパイル済みのバイナリが配布されている。コンパイルされたときのPython、Apacheのバージョンと、開発に使っているPython、Apacheのバージョンが異なると、Apacheのログにwarningログが出力されて、少し気持ち悪い。Linuxだとgccでコンパイルすればいいが、Windowsでのコンパイル方法があまり情報が少なかったので、まとめておく。

前フリ

Pythonにはpydocというモジュールがあって、これを使うと同じようにAPIリストが出力できると思っていた。今までDjangoのコードを書いてみて、いわゆるヘッダーコメントとかドキュメンテーションコメントと言われているものをなんとなくjavadocライクに書いていたが、pydocだとあんまり期待した通りのHTMLを出力してくれないことが分かった。

sphinxでautodocを使用する場合はプライベートメンバー('_'から始まるメンバー)はデフォルトで非表示となっていて、docstringが出力されない。出力する場合には、autodoc-skip-memberというカスタムメソッドを使用して表示するメンバーを指定すれば良いらしいが、これだと手間が増える。

Djangoでアプリケーション開発をする場合、Django付属の開発サーバー(manage.py)を使用していたが、どうもリロードが遅かったり、Linux用にデプロイするのが、めんどくさそうと思ったので、開発時からApacheを使ってホストできないか調べてみた。ちなみにリロードが遅いのは、pythonコードを読み込みなおしているから、という記述をどこかで見かけた。Apacheを使うと、リロードが必要になる。MaxRequestsPerChild 1を指定すればよいが、これだと、毎回リロードすることになり、Apacheを開発サーバーとして使う意味がなくなる。変更ファイルを検出して、自動でリスタートしてくれればいいけど、Windowsだとやり方が分からないので、とりあえず、Apacheは再起動することにする。

モデルの使い方がいまいち覚えられないので、ちょっとまとめてみることにした。Djangoのドキュメントってちょっと分かりにくいよねぇ。Pythonのドキュメントも分かりにくいけど。チュートリアルなのか、リファレンスなのか、ごちゃごちゃになっているからかもしれない。使い方2では内部結合・外部結合について書くつもりだけど、納得できるまで書かないので、書けない可能性もある。エンティティどうしが結合する場合、Entity Frameworkみたいに新しいエンティティを作らないといけないのだろうか。それとも合成せずに簡単にかけるのか。