Skip to main content

7 posts tagged with "Django"

View All Tags

· One min read

携帯ってクッキーを使えない奴がいたはず。 確か、docomo。 最近の機種は使えるようになったが、不具合が出て・・・なんてことになってた気がする。 クッキーを使えないとセッションの維持が面倒そうだ。 少なくともDjangoの認証ではクッキーが必要だったはず。

· One min read

とあるサイトを見て、djangoをいじってた。

urlpatterns = patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':'/path/to/static'}),
)

document_rootには'./static'って相対パスで書いてあったんだけど、実際は絶対パスじゃないと動かない。 もしかしたら、相対パスの基準となる場所が違っていただけなのかもしれないけど、基準がわからず。

· One min read

東京に戻ってきました〜。 早速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

· 4 min read

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 も参照してください)。

具体的には、

  • 文字列はnullを扱えない
  • nullをセットしたかったらnull=Trueを使う
  • ForeignKeyの場合はblank=True, null=Trueと併せて使う

ということ。

勝手な解釈ではあるが、

  • 空文字はわかるけど、文字が無いってなんか変じゃない?
  • nullにしたい場合は明示的に
  • ForeignKeyみたいな場合は未入力(blank)を許しつつ、参照してるんだからnullも許可させる必要がある

ってことなんじゃないかな。 なぜ、blankとnullみたいな、似たような項目があるのか?ということについては似て非なるものだからだと思ってる。 blankについては入力時のチェックに使う、validationに関する項目。 nullについてはデータの存在意義(意義というとちょっと違うかな)についての定義。 こう考えると、文字列はblankを許可する必要はあるかもしれないけど、値が無いってのはおかしいでしょ?だから、null=Trueなんて設定できないよ〜。 ForeignKeyを設定したく無いなら、未入力(blank)を許可しなきゃね。それとは別に、参照先が無い場合(null)があるからそれは別に定義しなきゃダメだよね。 ってことなんだと思う。

今のところ自分ではすっきりしてるのでいいかな?と思ってる。

· One min read
Python3とDjango x Pythonは微妙に読みづらい。

"はじめてのPython3"はタイトル通りPython3を視野に入れた本。 "Django x Python"はPython2.5をベースに書いてる。 Django本はDjangoのところだけ読めばいいんだろうけど、ちょっと読みづらい(^^;

· One min read
Python3はじめてのPython3 こっちは流し読み程度にしとくつもり。Django x PythonDjango x Python こっちは読みつつ、調べつつという感じかな。

あと、PLUTO 7を買ったんだった。

PLUTO 7PLUTO 7

Amazonのリンクはめんどいな・・・。 プラグインを調べたけど、どれもあまり気に入らなかったからなぁ・・・自分で書くか?

· 3 min read

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を消せば済みそう。