daemonfreaks.com

システム制御情報学会セミナーに参加 その2

posted by jun-g at Sun, 14 Oct 2007 00:56 JST

2日目も参加。これまた適当なメモを。

  • セマンティックウェブって思ってたより深い。
  • 僕はあまりにもアカデミックな内容の話はあまり好きじゃないらしい。初めて気付いた。
  • 認証にはこれといった決定打が無い。

両日とも色々と為になる話が聞けたので、参加してよかった。

さて、会社への報告書を書かねば…。

システム制御情報学会セミナーに参加 その1

posted by jun-g at Thu, 11 Oct 2007 23:21 JST

システム制御情報学会主催のセミナー「ウェブを守る、ウェブを活用する」に参加してきた。参加費用が結構高額だったので珍しく会社に出してもらった。会社に出してもらうのあまり好きじゃないんやけど、たまにはいいよね。

コミュニティ主催の勉強会のレポートみたいに詳しく書いて良いものかよくわからんので、適当なメモだけ書いとく。

  • セキュリティリスクはコスト換算してやるとスーツの連中も理解しやすい。なるほど。
  • 可視化重要。ミクロ/マクロ/相関という3つの解析の視点。この考え方はうちでも応用できるかも。
  • グニャラくんキタ━━━━━(゚∀゚)━━━━━!!!! 名刺交換させて頂きました。
  • kfuruhataさんは「ニコ動」という言葉に反応しすぎ。自重汁w

もちろん明日も参加します。わくわく。

Djangoの新規作成の汎用ビューでフォームのデフォルト値を設定したい

posted by jun-g at Sun, 07 Oct 2007 20:32 JST

汎用ビューの勉強がてら、views.pyを一切書かずにツールを作ってみるか、と思って試してみてるんやけど、いきなり躓いた。

作っているツールはちょっとしたメモ用のツールで、画面上、内容と日時を入力するテキストフィールドが表示される。この日時のフィールドにデフォルト値として現在日時を設定しておきたいんやけど、やり方がわからなかった。一応調べたとこまでメモ。

とりあえずdjango.views.generic.create_update.create_objectのソースを読んでみたところ、マニピュレータを自作して、flatten_data()メソッドを実装すれば良さそうな感じがしたので、さらにdjango.db.models.manipulatorsを読んで、モデルクラス内に以下のクラスを追加してみた。

class AddManipulator(models.manipulators.AutomaticAddManipulator):
    def flatten_data(self):
        now = datetime.now()
        return dict(
            rec_time_date = now.strftime('%Y-%m-%d'),
            rec_time_time = now.strftime('%H:%M:%S'))

しかし、ここで定義したクラスはまったく使われていない様子。python manage.py shellを起動して確認してみたところ、モデルのAddManipulatorは<class 'django.db.models.manipulators.AddManipulator'>を参照していたので、自分で定義したAddManipulatorクラスは自動マニピュレータで上書きされているっぽい。

ドキュメント見ても「このビューは、 Django モデルに付属の自動マニピュレータを使います。」って書いてあるしなー…。やっぱり汎用ビューを止めてviews.pyを書いたほうがいいのか…?

Djangoのテンプレートでsettings.pyのMEDIA_URLを参照

posted by jun-g at Tue, 25 Sep 2007 01:36 JST

そういえば静的なコンテンツを一切扱ってなかったなと思い、まず、ドキュメントのmod_python で Django を動かす - メディアファイルの提供を参考にしてApacheの設定を変更。元々/django/以下をdjangoで動くように設定していたので、

<Location "/django/media/">
    SetHandler None
</Location>

とした。後はdjango/media/以下にアプリケーション毎にディレクトリを掘って、その中にメディアファイルを入れればOK。

しかし、テンプレート内の画像タグなんかでURLを全部絶対パスで書いちゃうと可搬性が下がるという問題に気付いた。で、settings.pyにMEDIA_URLっていう設定があった事を思い出したので、それをテンプレートから参照する方法を調べてみたところ、やっぱり同じ事考えている人はいた。

テンプレート上でのMEDIA_URL呼び出しについて その2 | pythonでつくるskyfish開発ブログ

上記ページのeveresさんのコメントを参考にsettings.pyに、

from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = \
    global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    'myproject.context_processors.media',
    )

を追加。で、Djangoプロジェクト直下にcontext_processors.pyを作成し、その中に、

from django.conf import settings
def media(request):
    return {'MEDIA_URL': settings.MEDIA_URL}

と書いた。generic viewsを使っているので、以上でテンプレート内で{{ MEDIA_URL }}と書けるようになった。自前のviewsを使用している場合はcontextにRequestContextを指定しないといけないようなので、忘れないようにしよう。

そういえばドキュメントのコンテキストのサブクラス: RequestContextで、TEMPLATE_CONTEXT_PROCESSORSの値のデフォルトは

("django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media")

になっている、と書かれているけど、自分の環境ではdjango.core.context_processors.mediaという値は含まれていなかったし、実際django/core/context_processors.pyの中にはmediaという関数は存在しなかった。バージョンが違うからかな…?

Djangoを使ってみてる その2

posted by jun-g at Sun, 23 Sep 2007 20:54 JST

チュートリアル通り進めた場合、チュートリアルその3のURLconf の脱カップリングで行った内容だけだとDjangoアプリケーションの切り離しは出来ない。何故ならviews.pyに

from mysite.polls.models import Poll

と書いてしまっているから。これだとmysite以外のプロジェクト内に移動した場合にコードの修正が発生してしまう。完全に切り離すには、

from polls.models import Poll

と書かなければならないと思う。チュートリアルその4まで見たけどこの事についてはどこにも触れられていないっぽい。誰でもすぐ気付くからかな?

ちなみに、Django付属の開発用サーバではimport文を上記のように書き換えてもそのまま動くけど、Apache+mod_python上ではPythonPath上にpolls.modelsが見つからない、というエラーになった。ドキュメントのmod_python で Django を動かすには、DjangoプロジェクトおよびDjangoアプリケーションそれぞれの親ディレクトリをPythonPathに含める必要がある、と書いてあった。なので例えば/home/jun-g以下にチュートリアル通りの以下のようなディレクトリ構成で配置した場合、

mysite
  |
  +-- polls

PythonPathには以下のように書く必要がある。

PythonPath "['/home/jun-g', '/home/jun-g/mysite'] + sys.path"

っていうポイントにちょっとだけ引っかかった。

後、作成した自分用のアプリの入力フォーム生成とデータのバリデーションをnewformsを使うように修正した。泥臭いコードがかなり減ったけど、もうちょっと適切なWidgetを適用すればまだまだ整理できそうな感じ。そういえば、ドキュメントにoldformsの事は知らなくて良い、と書かれていたので、oldformsには一切触れず。

あ、generic viewsもmiddlewaresもまだ全然触っていない。これは次のアプリで使ってみることにしよう。後、動作環境をApache+mod_wsgi上に移す、とかもやりたい。

<<  Page 103 of 125  >>