Django

webassetsがよさげ

webassetsはWebアプリケーションのJavaScript/CSSの管理ユーティリティライブラリ。もっとわかり易く言うと、複数のJavaScriptファイルをまとめたり、圧縮してくれたり、URLに変更日時のタイムスタンプを付けてくれたりする便利ライブラリ。 PyPI http://pyp…

cacheのKEY_PREFIX, VERSION, KEY_FUNCTION

Django 1.3ではcacheにKEY_PREFIX, VERSION, KEY_FUNCTIONというオプションが追加されていた。 http://docs.djangoproject.com/en/dev/topics/cache/#cache-arguments # settings.py from django.utils.encoding import smart_str def my_make_key(key, key_…

Django 1.3では複数のキャッシュの設定ができる

ふとDjango 1.3 beta1を触ってみたら、今までのCACHE_BACKENDという設定に変わって、CACHESという設定が可能になった。これを使うと複数のキャッシュを指定できる。 # settings.py CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcache…

セッションIDの作り方

メモ。 PHP REMOTE_ADDR, 現在の秒数, 現在のミリ秒, (0, 1)の範囲のランダムなdoubleを結合してランダムな文字列を作る session.hash_functionで指定されたハッシュアルゴリズム(MD5 or SHA-1)でdigestをする session.entropy_lengthが0以上が指定されてい…

Django1.3ではloggingの設定が加わった

Django1.3のalpha版が公開されて、変更点をつらつらと眺めているが、一番気に入っているのはsettings.pyにloggingの設定をかけるようになったところ。 http://docs.djangoproject.com/en/dev/topics/logging/ settings.pyに、 LOGGING = { 'version': 1, 'di…

OpenSocial RESTful APIのテスト用のアプリケーションを書いた

mixiのサーバーに対してOpenSocial RESTful APIのテストをしていたらそのうち逮捕されるのではないかと思い、Djangoでテスト用のアプリケーションを書いた。 http://github.com/csakatoku/freunde 起動方法。 $ git clone git://github.com/csakatoku/freund…

style="display:none"にするとauはフォームの値を送信しない

タイトルのとおりなんだけれども、 <form method="post" action="."> <div style="display:none"><input type="hidden" name="csrfmiddlewaretoken" value="xxxxx" /></div> <input id="id_name" type="text" name="name" value="" maxlength="15" /><br /> <input type="submit" value="Submit" /> </form> のようなHTMLを書くと、auのブラウザはcsrfmiddl…

superfcgiがよさげ

The only one true way to run WSGI apps through fastcgi http://pypi.python.org/pypi/superfcgi/ superfcgiは「WSGIアプリケーションをFastCGIで動かすための唯一正しい方法」という意欲的なライブラリ。superfcgiはfastcgi.comが提供しているfastcgiapp…

Spawningを使ってDjangoを動かす

http://pypi.python.org/pypi/Spawning/ 以下はシングルプロセス・シングルスレッドの場合。プロセス数を増やすには-sオプションを、スレッド数を増やすには-tオプションを指定。 $ cd /paht/to/my_django_project/ $ PYTHONPATH=.. spawn --factory=spawnin…

メールを送るにはdjango-mailerが便利かも

django-mailerは、メール送信をする際にメッセージのキューイングを行うためのDjangoアプリケーション。 http://github.com/jtauber/django-mailer/ Djangoアプリケーションからメールを送る際には通常django.core.mailを使うが、django-mailerの利点として…

mod_passengerでWSGIアプリケーションを動かす

Passenger(mod_passenger)は言わずと知れたRuby on Rails/Rackアプリケーションを動かすための定番サーバーのひとつ。 Phusion Passenger http://www.modrails.com/ 実はPassengerではPython WSGIを動かすこともできる。誰が得するか分からないから誰もほと…

Facebookアプリケーション事始

アプリケーション登録 下記のページを参照。 http://developers.facebook.com/get_started.php Developerアプリケーションにログインする。 アプリケーション名を決め、規約に同意して新規作成 アプリケーションの管理画面からEdit settings > Canvasを選択…

FBMLに触ってみる

FMBLについては、以下のページを参照。 http://wiki.developers.facebook.com/index.php/FBML 詳しくは上のページや、前述した「FBMLとiframeの違い」のページに書いてあるが、とりあえずは、「Facebookのルックアンド&フィール、ユーザーエクスペリエンスに…

Django Hack-a-thon Disc.8に行ってきた

事前にエントリしていなかったのに、気が変わったので当日朝7時に主催者にメールして、ずうずうしく参加してきた。ハンズオンとHackathonのチームに分かれるということなので、Hackathonチームに「DjangoでMixiアプリを作りましょう!」とそれとなく提案して…

アンダースコアを含むアプリケーション名

- myproject -- __init__.py -- settings.py -- apps --- __init__.py --- app_a ---- __init__.py ---- templates ---- templatetags --- app_b --- app_cのような構成のDjangoプロジェクトを作って、settings.pyのINSTALLED_APPSに、 INSTALLED_APPS = ( '…

シングル/ダブルクォートが区別なく使えるようになった

以下の変更で、テンプレートタグでシングルクォート、ダブルクォートが区別なく使えるようになっています。 http://code.djangoproject.com/changeset/10118 以前は、 {% url some_page "a_variable" %} がOKで、 {% url some_page 'a_variable' %} が動かな…

Django1.0.2はMiddlewareの初期化コードがスレッドセーフではない

工エエェ(´Д`)ェエエ工 Thread-safety bug in WSGIHandler (Google GroupのDjango developers) Core handlers are not threadsafe (Trac) django.core.handlers.wsgi.WSGIHandler(mod_pythonでDjangoを動かす以外に使われるHandler)は、スレッドセーフでは…

ログをとる

mod_wsgiで開発を行うようになって困るのは、標準の状態ではsys.stdoutへの書き込みがmod_wsgiによって制限されるので、printデバッグが使えなくなってしまうことです。より正確にいうと、mod_wsgiのWSGIRestrictStdoutディレクティブをOnにすると、printでs…

URLConfにシーケンスを与えることができるようになった

Django1.1からURLConfのinclude関数にシーケンスを与えることができるようになった。 The include() function in Django URLConf modules can now accept sequences of URL patterns (generated by patterns()) in addition to module names. http://docs.dj…

1.1のCacheオブジェクトにはincr, decrメソッドがある

正確にはrev.10031以降。 http://code.djangoproject.com/changeset/10031 % svn log -r 10031 ------------------------------------------------------------------------ r10031 | russellm | 2009-03-11 22:27:03 +0900 (Wed, 11 Mar 2009) | 1 line Fix…

開発サーバにmod_wsgiを利用する

Djangoで開発する時は"manage.py runserver"を使うのが一般的だと思いますが、以下のページで紹介されているスクリプトを利用するとmod_wsgi上で開発を行うことができます。 http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Restarting_Daemon_P…

http_date

今後は、 django.contrib.*が必要ない 特にdjango.contrib.session Djangoのシグナルが必要がない django.templateを使う必要がない django.dbが・・・以下略 に該当するアプリケーションはWerkzuegに置き換えていこうと思う(・・・かな。書いているそばから…

ログイン状態を保持する

Webアプリケーションのログインの際によく「ログイン状態を保持する」(セッションCookieの有効期限をブラウザ終了時までではなく一定期間に指定する)という選択肢を設けることがある。Djangoの標準の認証機構ではそういったことができないなーと思っていて、…

デフォルトのContent-Typeを変更する

DEFAULT_CONTENT_TYPEで変更。Web API等で常にXMLを返すような場合に便利。 # settings.py DEFAULT_CONTENT_TYPE = 'application/xml'

内部エンコーディングをutf8に変更した

プロジェクトがスタートしたときに作った絵文字ライブラリに替えて、Cで書いたコーデックmobilejpcodecsを使うようにし、DjangoのDEFAULT_CHARSETとPythonのdefault encodingをutf8に変更。こんな大きな変更はSQLAlchemy 0.3から0.4への移行以来だ。というわ…

進捗

前回のDjango勉強会のライブ・コーディングしてみせた、「Facebook/アメブロ風のバーチャルギフトショップ」機能をリリースできて一息つけそうである。gifts posted by (C)perezvon

WerkzuegのDebuggerは凄い!

まあ、Pylonsのトレースバックは凄い訳ですが、Pylonsなど、今となってはWerkzeugのセンスの良さの前には霞んでしまう存在かな。werkzeug.DebuggedApplicationを使えば、任意のWSGIアプリケーションにおいて、例外発生時にスタックトレースを調べることがで…

intを含むURL

intと言っても、主に日付に使う整数。Djangoで、 from django.conf.urls.defaults import * pattern = patterns( 'myapp.views', url(r'^entries/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/', 'blog_archive'), ) のようなURLマッピングを書くと、下記のようなURLはすべて同</day></month></year>…

神社参拝(2) 空白の扱い

http://jinja.pocoo.org/2/documentation/templates#whitespace-control Djangoのテンプレートだと、 {% for item in seq %} {{ item }} {% endfor %} のようなテンプレートを書いたときに、出力結果は、例えばseqにrange(3)を与えたとすると、 0 1 2のよう…

mod_wsgiとlighttpd+FastCGIの速度比較

mod_wsgiとlighttpd+FastCGIでのDjangoアプリケーションの速度比較を行う。環境はCentOS 5.2/Python2.5.3、Apacheが2.2.3とmod_wsgi2.3、lighttpdは1.4.20。 テストに用いたDjangoアプリケーション $ django-admin.py startproject benchで新規にプロジェク…

構想メモ

書きかけのメモです。mobilejp.management.commands.mobilejpmailのようなモジュール名でPostfixのコマンド処理用のクラスを作る。すると、INSTALLED_APPSにmobilejpを入れておけば、 $ python manage.py help mogilejpmail Usage: manage.py mobilejpmail […

GETとPOSTで上流のサーバを分ける

After a point the sql server becomes the bottleneck in lots of web application, and to scale, master-slave replication with single master, multiple slave is recommended. This setup with nginx can be used to accomplish traffic distribution …

mod_wsgiでいい気がしてきた

アプリケーションサーバーはlighttpd+FastCGIで運用してきたけど、Apache+mod_wsgi(or mod_python)でいい気がしてきた。後でちゃんと検証する。静的コンテンツの配信はなんやかんやでnginxになった。ロシア製のspacer.gifをご賞味あれ。 $ curl --head http:…

django.contrib.localflavor.jp.jp_prefectures

django.contrib.localflavor.jp.jp_prefectures.JP_PREFECTURESのキー(Tupleの先頭要素)をISO 3166-2:JPの都道府県コードにしなかったのは痛恨のミスだと思う。(偉そうに書いているけど、僕もISOの都道府県コードというのをwebooから教えてもらった。) 参考U…

1.0なう

http://gu3.jp/3/entries/150692/gumi now works on Django 1.0!

1.0

gumi now works on Django 1.0beta2.

Django 1.0betaでlighttpd+FastCGIの場合

下記のように、ドキュメントのある通りに設定しても、{% url %}タグを使うとURLが/mysite.cfgi/path/to/page/にならない?(期待しているのは/path/to/page/) server.document-root = "/home/user/public_html" fastcgi.server = ( "/mysite.fcgi" => ( "main…

FAPWS2でDjangoを動かす

FAPWS2(Fast Asynchronous Python Web Server)はlibeventを使って書かれたWSGIサーバライブラリ。こいつは本当に速いぞ! fapws2 作者のブログ インストール インストールには多分libevent-1.4.3-stableが必須。libevent-1.4.3-stableのバイナリをインストー…

ajp-wsgiでDjangoを動かす

ajp-wsgihttp://www.saddi.com/software/ajp-wsgi/ ajp-wsgiはAJPプロトコルでWSGIアプリケーションを動かすためのゲートウェイサーバ。flupと同じようなもの。ajp-wsgiとflupは作者も同じだし、flupもAJPをサポートしているけど、ajp-wsgiはすべてCで書かれ…

manage.pyのアクションを自作する

symfonyのプロジェクトにはバッチスクリプトの作成を支援する機能があるみたい?なので、前々からこれだけはいいなぁと思っていたら、Djangoにもいつの間にか同様の機能ができていた。 アクションを自作するhttp://michilu.com/django/doc-ja/django-admin/#…

Djblets

Review Boardで使われているヘルパーライブラリ。 Django Development with Djbletshttp://www.chipx86.com/blog/?p=244 Django Development with Djblets: Custom Tag Helpershttp://www.chipx86.com/blog/?p=245 ざっとコードを眺めた限り、Djangoを使って…

Just In Time Scheduler

さっきPyPIにあがったばかりだけれども、ふと目に留まったので。 jits http://pypi.python.org/pypi/jits/jitsはDjangoのモデル・ミドルウェアを利用したジョブスケジューラー。TheSchwartzやActiveMQ、Quartzと違って、イベントループの中でジョブの実行を…

分散レポジトリ型のWikiっぽいもの

CoCoWiki http://code.google.com/p/cocowiki/wiki posted by (C)perezvon 必要なもの Mercurial 0.9.5 Django trunk版 Python 2.5 使い方 Mercurialのレポジトリを作る。 $ hg init /path/to/repository cocowikiの開発版をチェックアウト $ svn checkout h…

FileFieldにはまった

FileFieldなんて久しく使っていなかったし、そもそもWebフォーム経由でファイルをアップロードするコードなんて久しく書いていなかったので、DjangoでFileFieldを使おうとして少々はまった。newformsが導入された当初は、Formの第一引数にrequest.FILESを渡…

汎用ビュー再発見

昨日のDjango勉強会でueblogさんから汎用ビューというのを教えてもらった(え?)ので、コードが劇的に短くなった*1。Djangoのサンプルコードとしてはなかなか良いものができたを自負しているので、あとは原稿を仕上げるだけだ。 *1:urls.pyに移動しただけだか…

悩み

この一文を追加すれば、一番きれいに解決できるのだが。 Index: django/core/handlers/wsgi.py =================================================================== --- django/core/handlers/wsgi.py (revision 7053) +++ django/core/handlers/wsgi.py …

{% extends %}はテンプレートの最初の要素でなくてはならない

rev7084から、{% extends %}の前に別のタグがくるテンプレートが動かなくなっている。cf. extends headaches @ Django developers Google Group http://code.djangoproject.com/ticket/6274 http://code.djangoproject.com/ticket/5124 つまり、これは動かず…

ModelFormを使ってみた

「普通の」Django開発の原稿を書かなくてはいけないので、ようやくModelFormに触ってみた。 ちょっとトリビアルなモデルだけれども、モデルItemに対するフォームItemFormを定義してみる。 import django.newforms as forms from django.db import models cla…

settings.configure

Djangoのソースコードを読んでいて、settings(django.conf.LazySettings)オブジェクトにconfigureというメソッドがあることを知った。・・・改めて確認すると、ちゃんとオフィシャルのドキュメントにもあった。 これを使うと、環境変数DJANGO_SETTINGS_MODUL…

失敗・・・

Djangoの解説の原稿を書いていて、「アンケート・アプリケーション」みたいなのを作ろうと思っていて、どこかで聞いた事のある題材だと思っていたら、Djangoチュートリアルと同じ題材だった・・・ 最終的に携帯で見れるようにするところまでもって行くし、そ…