PythonでDjangoを使ったバッチ処理

2010-02-25
このエントリーをはてなブックマークに追加

たいていのアプリにバッチは付き物なのですが、DjangoにはRailsでいうところのscript/runnerがありません。

まぁPythonでバッチ書いてそれを叩けばいいのですが、settingsの値とか、モデルデータとか、やっぱり共有したいわけですよ。

# -*- coding: utf-8 -*-
import sys
import os

sys.path.append(“C:/works/Python”)
os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘hogepj.settings’

from hogepj.app.models import *

_hoge = Hoge.objects.all()
for item in _hoge:
    print item.name

sys.path.appendに書くのはプロジェクトがあるフォルダです。プロジェクトフォルダは含みません。Pythonというフォルダのなかにhogepjというプロジェクトフォルダがある、という前提です。

Railsだと「Railsアプリのバッチを実行する」な感じだったのに対して、Djangoだと「バッチをDjangoアプリの一部として実行する」って感じでしょうか。

環境はPython2.5、Django1.1.1です。

Tags: ,

PythonでURLエンコードする方法

2010-02-15
このエントリーをはてなブックマークに追加

GETでクエリを引きずり回す時などに使いますね。後は日本語名称のファイルをクライアントに出力するときでしょうか。2バイト文字の世界の人々には必須の知識ですよね。

import urllib

print urllib.quote_plus(u’ほげほげ’.encode(‘utf8’))
print urllib.unquote_plus(‘%82%D9%82%B0%82%D9%82%B0’)

上がエンコード、下がデコード。

ソースコード中に2バイト文字書くときは

u’ほげほげ’

といった感じでuをつけないといけなかったのですが、ここでは不要です。

Tags:

Djangoのformでカスタムバリデーションをする方法

2010-02-06
このエントリーをはてなブックマークに追加

例えば会員登録とかでパスワードを確認のために2回入力してもらうときとか、両方の値があっているかチェックする必要があります。

Djangoの標準バリデーションだとそこまではやってくれないんですね。

でも、バリデーションのカスタマイズはとっても簡単です。簡単なハズなのに、とってもてこずりました。w

# -*- coding: utf-8 -*-

from django import forms

class RegistForm(forms.Form):
    name = forms.CharField(max_length=100)
    mailadd = forms.EmailField(max_length=100)
    passwd = forms.CharField(min_length=6, max_length=12, widget=forms.PasswordInput(render_value=False))
    passwd_confirm = forms.CharField(min_length=6, max_length=12, widget=forms.PasswordInput(render_value=False))

    def clean_passwd_confirm(self):
        _pswd = self.cleaned_data[‘passwd’]
        _pswd_confirm = self.cleaned_data[‘passwd_confirm’]
        if _pswd!=_pswd_confirm:
            raise forms.ValidationError(u’確認用パスワードが異なります。’)
        else:
            return _pswd_confirm

clean_フィールド名のメソッドが、対象フィールドのバリデーション用メソッドです。self.cleand_dataで値にアクセス、検証してNGならraiseする。OKなら値をそのまま返す。

これだけ!w

Tags: ,