2月 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です。
2月 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をつけないといけなかったのですが、ここでは不要です。
2月 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