ほんじゃら堂

めんどくさい仕事をラクにする作業自動化レシピ集

django

Admin管理画面でForeignKeyをプルダウン以外で選択できるようにする

DjangoのAdmin管理画面でForeignKeyを使用したモデルを編集する場合、 プルダウンを生成して参照先のオブジェクトを簡単に選択できるようにしてくれる。 しかし、プルダウン生成時に全てのオブジェクトを取得してきてしまうので、 参照先のデータが増えてき…

ある日付が指定日数より後かどうかを判定するカスタムフィルタ

ページ上で3日以内に更新された記事に「New!」と表示したりする場合に使えるフィルタを作ってみた。 datetime型と、yyyy-mm-dd形式の文字列の両方に対応。 がんばったらもっと色々なフォーマットに対応できるだろうけど、がんばれなかった。 使う時はエラー…

テンプレート用のカスタムタグやカスタムフィルタをサブディレクトリに分ける

djangoのカスタムタグやカスタムフィルタを利用する場合はloadタグでファイル名(モジュール名)を 指定してロードする。 これまたアプリ名は必要なく、モジュール名だけで呼び出せるのだけど、 そのままだと名前がかぶる可能性があるのでアプリを指定して呼び…

fixturesをサブディレクトリに分ける

djangoでデータベースのデータをインポートする時は fixtureデータを用意してloaddataコマンドでインポートする。 loaddataコマンドはアプリの指定無しでfixture名を指定するだけでインポートしてくれるのだけど、 そのままだと名前がかぶる可能性があるので…

crop機能付きでサムネイル化できる画像管理モデルを作る

crop機能を初めて使ったけど、縦か横どちらかに長い画像をサムネイル化する時は、cropした方が見栄えがいいですね。 相変わらず整理されてないソースだけど、メモメモ。 ライブラリは、Python Imaging Library と、 http://www.pythonware.com/products/pil/…

フォームデータのメール送信をバッチで処理する

Webフォームから送信されたデータを保存後にメールでユーザーやら担当者やらに送信する処理が必要な事が多い。 メール送信処理は結構重いので、リクエスト中に送信するのではなく、後でバッチ処理で送信する処理を作ってみた。 送信するメールを保存するモデ…

Djangoでカスタムログインチェック

djangoでユーザーがログイン済かどうかをチェックする場合は通常 @login_required デコレータを使用するけど、 IDとパスワード以外の要素でログインチェックしたり、未ログインのユーザーを独自のログイン画面に遷移させる 場合は、カスタマイズしたデコレー…

モデルクラスのobjectsにメソッドを追加する

from django.db import models class UserAlertManager(models.Manager): def additional_method(self): "追加するメソッド" ... class UserAlert(models.Model): user = models.ForeignKey(User) ... objects = UserAlertManager() これで、下記のように追…

DjangoとPILで画像のフォーマットを取得

画像を外部URLから取得する際に画像フォーマットが分からない場合、下記の方法で取得できた。 Python Imaging LibraryとDjangoを使った方法。 import urllib from PIL import Image from django.core.files.base import ContentFile image_url = "画像ファイ…

nginx+fastcgi+djangoの環境を構築

新しい開発環境を構築するにあたり、またApacheとmod_pythonで構築するのもアレだな、ということで流行のnginxを試してみた。 だいたいの情報は、 nginxホーム http://nginx.net/ NginxJa http://wiki.nginx.org/NginxJa nginx 一人 nginx 勉強会 第一回 ngi…

入力確認画面でchoicefieldやmodelchoicefieldの値をラベル表示する

フォーム入力後の確認画面で入力内容を表示する場合、 form.フィールド名.data で入力値を取得できるようなんだけど、choicefieldやmodelchoicefieldを表示した場合は dataにpk値が入っているようで、これを入力画面と同じラベル名で表示したい。 簡単に実現…

文字列のリストを扱うカスタムフォームフィールドを作成する

Djangoのformsに含まれるChoiceFieldやMultipleChoiceFieldだと、 choicesが必須なので、あらかじめ用意されたデータしか入力できない。 既存のデータではなく、タグやasinなどの文字列をWeb画面上で複数入力なり選択なりし、 それを文字列のリストとして処…

リバースプロキシを使って1つのIPアドレスで複数ドメイン(djangoアプリ)とSSLを使えるようにする

IPアドレスを増やさずにドメインベースで複数のドメインを運用しつつSSLを使えないかと 調べたところ、Apacheだけでは無理だけどリバースプロキシを使えば何とかなりそうだったので、やってみた。 元々 Apache + mod_python + SSL でDjangoアプリを運用して…

FileField、ImageFieldでファイルアップロード先フォルダをユーザー毎に変更する

django1.0から、FileFieldとImageFieldのupload_to属性に関数を指定できるようになり、 ファイルのアップロード先を動的に設定できるようになったようだ。 http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.FileField 関数の第一…

管理ページを使わずにFlatPageを更新する

admin管理サイトを使いたくなかったので、FlatPageを更新するスクリプトを作成した。 settings.pyでFlatPageを使用する設定をしておく。 http://docs.djangoproject.com/en/dev/ref/contrib/flatpages/#ref-contrib-flatpages テンプレートは下記のような感…

添付ファイル付きメールをdjangoに登録する

メールで送信した画像とテキストデータをdjangoに登録するために、 メールサーバからデータベースに保存したメールデータを Pythonのemailライブラリとdjango APIを使ってテキストデータと 画像ファイルとして保存するスクリプトを作成した。 色々省いたので…

django-registrationでユーザー登録と同時にプロファイルを登録する。

django-registration http://code.google.com/p/django-registration/ django-registrationはユーザー登録や認証関連の処理を一通り行ってくれる便利なdjangoアプリケーションである。 設置方法等については、下記のページに分かりやすい説明が記載されてい…

django開発版で発生した問題を解決する

久々にdjangoを最新版にアップデートしたら下記の問題が発生した。 ページを開く時にadmin関連のエラーが出るようになった。 models.pyに定義したverdjnlibのPhotoFieldが動作しなくなった。 ページを開く時にadmin関連のエラーが出るようになった url.pyでa…

django+jQuery Form Pluginでファイルアップロードしてみた

前回発見したjQuery Form Pluginを使って実際にファイルをアップロードするサンプルを作った。 http://d.hatena.ne.jp/piro_suke/20080615/1213498024 ファイルをアップロードする場合のみ、iframeが使用される関係でサーバ側から 返却するデータをtextarea…

新しくなったPaginatorをページリンク機能をつけて使う

djangoのページング機能の使い方が変わったようなので、 それに合わせてページリンクを表示する機能を作った。 また使いそうなので保管。 以前のバージョンで使用していた、BetterPaginatorを参考にした。 http://d.hatena.ne.jp/piro_suke/20070827/1188202…

Webアプリ以外でdjangoを使用する

Using Django in command-line scripts http://surftrackr.net/blog/view/35/using-django-command-line-scripts/ コマンドラインで実行するようなPythonスクリプトでdjangoのライブラリを利用する方法。 この方法を使えば、アップロードしたXMLファイルを解…

TextFieldをUniqueにしたい場合

djangoのモデルでTextFieldクラス型にしたフィールドにunique=True設定を行うと、 「lengthが指定されていない」というエラーが発生した。 試しにlengthやらmax_lengthやらのオプションをつけてみたが、今度は 「そのような属性はありません」というエラーが…

モデルのフィールドを組み合わせで一意にする

djangoは複合キーが使えないらしいので、代わりの機能を探したら 開発版で追加されたunique_togetherというMetaオプションを使えば 良いらしいことが分かった。 例えばあるモデルでユーザーとブックマークの組み合わせを一意にする場合は こんな感じかな? m…

djangoではてな認証APIを使う

認証APIを使ってユーザー認証を行えるようにしたい。 はてな認証API http://auth.hatena.ne.jp/ livedoor Auth http://auth.livedoor.com/ はてなとライブドアに認証APIがあるようで、両方同じような使い方ができるらしい。 はてなユーザーなのではてな認証…

djangoAMFを使ってユーザー登録機能のベースを作る

今後も使いそうなので作っておく。 環境はflex2とs2flex2とdjango開発版。 簡単な入力チェック機能付き。 flex側はTitleWindowなので別途それを表示するための機能を追加する必要あり。 flex側表示用mxml(UserEntryWindow.mxml)

djangoAMF経由でクラス型変数を持つクラスのオブジェクトを受け取る場合のActionscript側クラス定義

備忘メモ。django側のモデルクラスが他のクラス型の変数を内部に持っている時の受け取り方。 知っていれば簡単なことのようで、django側のモデルクラスで定義された変数名ではなく、 DBのテーブルが持つ外部キー名が入る。変数名_idというint型。 django側モ…

djangoでアプリのデータベースデータをリセットする

備忘メモ。Windowsでの開発時に使える。 python manage.py reset [app名] python manage.py loaddata [fixture名]

djangoのテンプレートで使うカスタムフィルタを追加する

マニュアルを読めば書いてあるけど、覚書き。 http://michilu.com/django/doc-ja/templates_python/ 以前作成した(というかコピーした)、数値を3桁区切りにする関数を djangoテンプレート上でフィルタとして利用できるようにする。 testproject/utils.py .…

djangoでページング

djangoのマニュアルでは探しきれなかったけど、ページングライブラリがあるようだ。 django.core.paginator.ObjectPaginator でも少し機能が少ないようだったので探してみると、Django snippetsにいくつか登録されていた。 使いやすそうなBetterPaginatorと…

Djangoのnewformsでformオブジェクトからモデルオブジェクトにユーザ入力データをコピーする

周知の事実なのかもしれないが、 ユーザ入力が格納されたフォームオブジェクトをsaveする前に システム側でデータを追加したい場合、フォームオブジェクトの値を 直接変更することができなかったので、フォームオブジェクトに格納された 入力データをモデル…