Django の Debug Toolbar をリモート接続で表示
以前書いたエントリーの追記。
やはり、リモートでデバッグしてる時にも、Debug Toolbar を使いたくなったので調べてみると、接続元IPがわかれば、設定に書いてあげることで表示が可能でした。
設定方法
settings.py とかに、次の変数をセットしてあげればOK。
INTERNAL_IPS = ('127.0.0.1', 'aaa.bbb.ccc.ddd',)
※aaa.bbb.ccc.ddd は、接続「元」IP
ちなみに、
If INTERNAL_IPS is empty, the Debug Toolbar automatically sets it to '127.0.0.1' and '::1'.
とあるので、設定しない時には、ローカルホストからのアクセスのみが許可されるという状態です。
参考:
Django アップグレード手順まとめ 1.6.x to 1.8.x
この記事は、Python その2 Advent Calendar 2015 の10日目の記事です。
昨日は @CS_Toku さんの Python2からPython3.0での変更点 - Qiita 。明日は @FGtatsuro さん !
どんな話題?
Webアプリを長期運用する時に避けれないのが、フレームワークのアップグレード。約1年前に作った Djangoアプリも例にもれず、1.6.xのメンテナンスが終了ということで、長期サポート(LTS)である 1.8.x へのアップグレードに取り組みました。
大まかな流れとしては、こんな感じです。
- 複数バージョンの環境を準備
- 1.6.x で Deprecateに対応
- 1.7系にバージョンをあげる
- migrate する / Deprecateに対応
- 1.8系にバージョンをあげる
- migrate する / Deprecateに対応
- その他の対応
環境
1.7で DB migrate 機能が入ったためか、結構難儀。教訓としては 『メジャーバージョンは1つずつあげていこう』 でしょうか(あたりまえ??)。
(なお migration ツール South 未使用アプリの為、利用してるケースのフローは抑えてません。あと、本来なれば test 走らせるのでしょうか、カバレッジが全然低いので動作は手動で確認。。)
事前準備
公式では、pip使ってるのであれば -U オプションで上書きとありますが、なかなか勇気いりますよね。
僕の場合は、次のような準備を行って、1つずつバージョンを上げるようにしました(DBバックアップを取得したりしながら)。
- virtualenv/virtualenvwrapper などを用意して、1.6最新 , 1.7最新 , 1.8.x(目的のバージョン)を用意
- 各種環境で django-admin startproject
しておいて、settings.py の違いをdiffっておくと、概要の把握によかった
django-sphinxdoc 試したけど使わなかった
こちらのエントリーみて、納品直前に使いかけた django-sphinxdoc 。django-sphinxdoc の動作としては、Sphinx ドキュメントを JSON 形式でDBに入れて、Heystackで全文検索できるようにしてくれるというもの(と思われます)。
しかし、半日ほど試行錯誤した結果、取りやめたので経過をメモしておきます。
欲しかったもの:
やめた理由:
- Sphinx のドキュメント、各ページをDBに保存する仕組み (想定より重厚に感じた)
- Heystack に初めて触れた (知識は増えたが、心のハードルあがったw)
- templates/base.html が用意されてることが前提 (base.html は作りこみしてなく、Sphinxのテーマのまんまが綺麗と思ってしまった)
導入は、そんなに難しくなく、この手順などで行けました。しかし、ver1.4.0の場合そのままで動かずコードを2箇所ほど修正(UTF-8にない ' 文字?)した事もあり、今回はやめました。
staticなドキュメントをauth配下においてくれるぐらいの、ライトな仕組みが何かないかなぁ?
Python & Django 読んでおきたいエントリー
ここ一年ほど、Python&Djangoをやってきて気になったエントリー集。けっこう好きになった気がする > Python。壮大なフレームワークなんだねと実感してきた > Django。
読破したというより、読んでみたいがメインではあります。あと、Pythonメインの選定になってる。
Python
PHP, Perl , JSプログラマーが、Pythonを初めて一ヶ月ではまったポイントなどを整理してくれている、2010年のエントリー。is in 演算子とか、switchがないとか。「 x = 'foo' if <条件式> else 'bar' 」は、三項演算子だったかぁと気づいたり(いまさら。。。)
「 x, y = y, x 」で値の入れ替えを行ったり、スライスの「 items[start:end:step] 」 step を指定して、飛び飛びの値を指定できる。「from xxx import (x, y, z)」 が流行りとあり、トレンドってあるんだなぁと知りました。