携帯のセッション維持
携帯ってクッキーを使えない奴がいたはず。
確か、docomo。
最近の機種は使えるようになったが、不具合が出て・・・なんてことになってた気がする。
クッキーを使えないとセッションの維持が面倒そうだ。
少なくともDjangoの認証ではクッキーが必要だったはず。
携帯ってクッキーを使えない奴がいたはず。
確か、docomo。
最近の機種は使えるようになったが、不具合が出て・・・なんてことになってた気がする。
クッキーを使えないとセッションの維持が面倒そうだ。
少なくともDjangoの認証ではクッキーが必要だったはず。
とあるサイトを見て、djangoをいじってた。
urlpatterns = patterns(”,
(r’^static/(?P.*)$’, ‘django.views.static.serve’, {‘document_root’:'/path/to/static’}),
)
document_rootには’./static’って相対パスで書いてあったんだけど、実際は絶対パスじゃないと動かない。
もしかしたら、相対パスの基準となる場所が違っていただけなのかもしれないけど、基準がわからず。
東京に戻ってきました〜。
早速Djangoネタ。
django-evolution – Google Code
http://code.google.com/p/django-evolution/
python manage.py syndb後にDBを更新しなければならないんだけど、それをやってくれるモジュール。
使い方は書いてある通りなんだけど、こんな感じに便利もジュールを増やしていくと、あとが大変そうなのでシンボリックリンクで分離してみた。
modules
`– django_evolution
project_dir
|– django_evolution –> ../modules/django_evolution
`– other apps
modulesにはどこかで拾ってきたものを入れて、project_dir配下からシンボリックリンクで参照。
こんなのを書いておくと./syndbだけで済んじゃうけど、悪影響は無いかな?
しばらく使ってみるか。
#!/bin/bash
py manage.py syncdb
py manage.py evolve –hint –execute
Djangoでnullをセットしようとした場合、ちょっとしたコツが必要。
コツというか、考え方としては突拍子なわけでもない。
ただ、知らないとどうしていいのかわかんない。
モデルフィールドリファレンス — Django v1.0 documentation
http://djangoproject.jp/doc/ja/1.0/ref/models/fields.html#django.db.models.fields.Field.null
まずはここに書いてあること。
空の文字列値は NULL ではなく空文字列として保存されることに注意して下さい。 null=True が使えるのは、整数型やブール型、日付のような、文字列ではないフィールド型の場合だけです。 null はデータベースでの記録操作にのみかかわるパラメタなので、フォーム上で空の値を入力できるようにしたければ blank=True も指定する必要があるでしょう (blank も参照してください)。
具体的には、
ということ。
勝手な解釈ではあるが、
ってことなんじゃないかな。
なぜ、blankとnullみたいな、似たような項目があるのか?ということについては似て非なるものだからだと思ってる。
blankについては入力時のチェックに使う、validationに関する項目。
nullについてはデータの存在意義(意義というとちょっと違うかな)についての定義。
こう考えると、文字列はblankを許可する必要はあるかもしれないけど、値が無いってのはおかしいでしょ?だから、null=Trueなんて設定できないよ〜。
ForeignKeyを設定したく無いなら、未入力(blank)を許可しなきゃね。それとは別に、参照先が無い場合(null)があるからそれは別に定義しなきゃダメだよね。
ってことなんだと思う。
今のところ自分ではすっきりしてるのでいいかな?と思ってる。
“はじめてのPython3″はタイトル通りPython3を視野に入れた本。
“Django x Python”はPython2.5をベースに書いてる。
Django本はDjangoのところだけ読めばいいんだろうけど、ちょっと読みづらい(^^;

はじめてのPython3
こっちは流し読み程度にしとくつもり。

Django x Python
こっちは読みつつ、調べつつという感じかな。
Amazonのリンクはめんどいな・・・。
プラグインを調べたけど、どれもあまり気に入らなかったからなぁ・・・自分で書くか?
djangoを入れてみたものの、sqlite3のモジュール部分で動作せず。
python manage.py syncdbでなぜかエラー。
Error loading sqlite3 module: No module named _sqlite3
環境はUbuntu 8.10にPython2.6をソースでインストール。
そこに、djangoをsetup.pyでインストールした。
Web上でも似たような人たちがいて、人それぞれ対応が違う。
ソースで入れ直す人、CentOSでdevelパッケージを入れたりしてる人。
結局、直接的な解決に至らなかったので、自分で対応を考えることにした。
まず、_sqliteが無いと言われているので存在を確認。
Python2.6ディレクトリ配下には存在せず ![]()
Python2.5は・・・あった!
たぶん、python-pysqlite2というパッケージが入っているからだと思う。
というわけで、_sqliteを使うべく、Python2.6のライブラリとして使うためにシンボリックリンク作成。
そしたら、unicodeなんとかでエラー。
2.6の役割の一つに3.0への移行があるから、それに関する違いでエラーが出たっぽい。
じゃ、setup.pyで_sqliteを作ればいっか、と調べてみるとpysqlite2というライブラリがあるっぽい。
dpkgではpython-pysqlite2として配布されてるやつだな。
pysqlite – Trac
http://oss.itsystementwicklung.de/trac/pysqlite
ここからダウンロードしてきて、インストールを実行。
python setup.py install
インストール途中でエラー発生。
sqliteのソースが無いようなことを言われたのでソースをインストール。
sudo apt-get install libsqlite3-dev
yumパッケージで言う”-devel”みたいなパッケージっぽい。
再度、pysqlite2をsetup.pyでインストール。
このあと、syncdbを試したら動作しました。
無理な構成にもなってないし、この対応でよかった気がする。
setup.pyでインストールする時はそのバージョン配下のライブラリとして増えていくみたいなので、2.6が不要となったら/opt/python2.6を消せば済みそう。