2013-04-01から1ヶ月間の記事一覧

djangoでMultiValueDictKeyError

あるview関数のテストをしていてMultiValueDictKeyErrorというものに遭遇したのでメモこれで再現します。 # views.py from django.views.generic import View from braces.views import CsrfExemptMixin class NotificationView(CsrfExemptMixin, View): htt…

djangoでテスト時にsettings.pyの内容を変更する

テストのためにsettings.pyの値を変えたい場合ってありますね。 テスト起動時に--settingsオプションでテスト用の別ファイルを指定する方法もありますが、他にも方法が用意されています。 Testing Django applications | Django documentation | Django view…

djangoでインライン編集が可能になるdjango-inplaceeditを使ってみる

オブジェクトの情報を表示するページでそのまま、インラインでデータの更新が可能になるdjango-inplaceeditなるものを試してみました。django-inplaceedit 0.94 : Python Package Index インストール pip install django-inplaceedit いろいろ設定します set…

Luhnアルゴリズムでクレジットカードの番号をチェック

クレジットカードの番号はLuhnアルゴリズムというチェックサム方式が使われていることを知りました。 Luhnアルゴリズムは、様々な識別番号の認証に使われている単純なチェックサム方式。MOD-10アルゴリズムとも。クレジットカード番号、IMEI番号、National P…

django1.5でパスワードリセット

ほとんどdjangoが仕組みを用意してくれてるんだけど、サンプルアプリを作って動かしてみたのでメモ ドキュメントを読まずにやってるので、適当にやってエラー発生→直すの流れになっています まずurls.pyにpassword_resetを定義 from django.contrib.auth.vie…

ClassBasedViewで使えるMixinを集めたdjango-bracesを試す

この間、ClassBasedViewにデコレータを適用する方法を幾つか試してて、例としてlogin_requiredデコレータを使ってたんですが、その流れで、login_requiredをMixinで行うライブラリを見つけたので試してみました。 django-braces Welcome to django-braces’s …

FormWizardの各stepに名前をつける

昨日ちょっと書きましたが、FormWizardは単純にformのリストを渡すと、各stepを識別する名前がu'0'、とかu'1'とかになります。 class OrderWizard(SessionWizardView): form_list = [AuthenticationForm, AddressForm, PaymentForm] def done(self, form_lis…

FormWizardで確認画面を表示する

djangoのFormWizardは各ページにそれぞれフォームをレンダリングして、入力値をセッションやcookieに保存しておいて、最後に全てvalidな状態のデータを揃えて、登録処理なりなんなりを行うというものですが、単純に今までの入力値の表示確認をしたい場合とか…

ClassBasedViewにデコレータを適用する

こんなClassBasedViewがあるとしてviews.py class LoginRequiredSampleView(TemplateView): template_name = 'apps/login_required.html' なんらかのデコレータを使いたい場合、いくつか方法が考えられるのでひとつずつ試してみた。 1つめ。views.pyでlogin_…

djangoのModelFormはどこでchoicesに「-------」を入れているのか追いかけてみた

djangoのModelFormはどこでchoicesに未選択を表す「-------」を入れているのか、ちょっと気になったのでソース追っかけてました。 メモを残しておきます。適当に作ったサンプルmodels.py from django.db import models FAVORITE_COLORS_CHOICES = (('blue', …

RedirectViewでリダイレクト先の指定にnamed urlを使う

views.pyを直していたらテストが全部こんなエラーになってちょっと焦った ImproperlyConfigured: The included urlconf apps.urls doesn't have any patterns in itRedirectViewのurlを取得するのにreverseを使ったのが原因 from django.views.generic impor…

Djangoに偽の管理サイトを用意するdjango-admin-honeypot

django-admin-honeypotを試してみました。 django-admin-honeypot/admin_honeypot at develop · dmpayton/django-admin-honeypot · GitHub ハニーポットとは ハニーポット (英語: Honeypot) は、コンピュータセキュリティ用語としては、不正アクセスを受ける…

Djangoでクリックジャッキング対策

Django 1.5.1でstartprojectすると、クリックジャッキング対策のためのMiddlewareが用意されていることがわかります。 'django.middleware.clickjacking.XFrameOptionsMiddleware'ですね。コメントアウトされてますが。 たぶん1.4以降だと用意されてます。 M…

オブジェクトが走査可能かどうか調べる

if hasattr(obj, '__iter__'): for e in obj: pass In Python, how do I determine if an object is iterable? - Stack Overflow

サーバーサイドのログをブラウザに表示 - DjangoでChrome Loggerを試してみた

サーバーサイドのログをChromeのコンソールに表示するライブラリを見つけたのでDjangoで試してみました。まずchromeのプラグインをinstallします。 chromeの右上のボタンがでますので、使うときはactiveにします。 次にpythonのライブラリをインストール pip…

古いバージョンのgemをインストールする

railsの2.3.8が必要になったのでインストールした。最近rubyを全然さわってないので忘れてしまっていたけど、-vでバージョン指定するんでした。 gem install rails -v 2.3.8 rdocとかriとかインストールされて遅い。--no-rdoc --no-riをつければ入らないんだ…

DjanoのRadioSelectで表示される「--------」を表示させず、かつチェック無しで描画する

djangoのModelFormでChoiceFieldの表示にRadioSelectを使い、フィールドにdefaultを指定していないと、「未選択」のためのradioボタンが表示されます。 コードは以下の通りmodels.py from django.db import models FAVORITE_COLORS_CHOICES = (('blue', 'Blu…

Djangoのフォームでrequired=Trueなフィールドに必須マークをつける

Formの表示をするときに、入力が必須な項目に、「*」をつけたり「必須」って表示したりすることはよくあります。djangoの場合、必須かどうかの定義はformクラス(ModelFormの場合はmodelクラスの場合も)に記述してあるので、テンプレート側で「この項目は必須…

DjangoでOneToOneFieldの存在チェック

djangoのOneToOneFieldは対応するレコードがない状態で参照しようとするとDoesNotExistエラーになります。 class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) def __unicode__(self): return u…

DjangoのFormPreviewを使って表示した確認ページでchoicesの表示

djangoのmodelでchoicesを持つフィールドはget_FOO_displayでhuman readableな値を返してくれます。Model instance reference | Django documentation | Django こんな感じで使えます。 from django.db import models from django_localflavor_jp.jp_prefect…

DjangoのForm Wizardを使ってみる (CookieWizardView)

昨日SessionWizardViewを使ったForm Wizardをさわってみたんで、そのままCookieWizardViewに置き換えて挙動をみてみる。 SessionWizardViewとCookieWizardViewの違いはこれだけ class SessionWizardView(WizardView): """ A WizardView with pre-configured …

DjangoのForm wizardを使ってみる

djangoでは複数ページにまたがるフォームを処理するためにForm wizardという仕組みが用意されてます。練習のため、できるだけシンプルな使い方をして、動作を確認してみました。 まずFormが必要です。 適当に2つ用意します。forms.py class AddressForm(form…

PycharmのOverride Methodsが便利

メソッドをオーバーライドするとき、親クラス側の処理を実行させるのにsuperを書きますが def some_method(): super(SampeClass, self).some_method() こういうのはいちいち書くの面倒くさい。 pycharmならきっといい機能があるはずだと思って確認してみると…

cleanメソッドでエラーをパラメータにひもづける

djangoのForm、cleanメソッドでValidationErrorをraiseすると、エラーメッセージは__all__キーに保存されるので、テンプレートで表示するときは {{ form.non_field_errors }} で表示します。cleanは複数フィールドの組み合わせ条件をテストするんで、フィー…

formのinput要素でenterキーを無視する

js

普通formのinput要素でEnter押すとsubmitしますが、なんらかの理由でsubmitさせたくない場合 $(function () { $("form input").keypress(function (e) { return !(e.which == 13) }); }); こんなんでいいのかな参考 : javascript - Prevent form submission …

jqueryのlive

適当な自分用のwebアプリ書いてて、まあ普通にjqueryでイベント貼り付けたりなんだりしてたんですが $(function(){ $('a.some_class').click(function(e){ alert('hoge'); }); }); こういうのだとxhrで動的に読み込んだ要素に対しては実行されないので、そう…

PycharmのDjango Consoleで入力履歴を辿る

pycharmでdjangoプロジェクト開いてると「Django Console」って機能が使えまして まあ、manage.py shellなんですが ⌘eで履歴を辿れるということを知りました。おもむろにキー入力するとインクリメンタルサーチします。 便利

djangoで整数3桁のカンマ区切り

以下の手順でokだと思ってたんだけどなぜかカンマ区切りにならず エラーにもならず1. INSTALLED_APPSに'django.contrib.humanize',を追加 INSTALLED_APPS = ( .... 'django.contrib.humanize', ) 2. テンプレートに以下を追加 {% load humanize %}3. 使う {{…

jQueryのoneでフォームの2重送信を防止する

js

フォームのサブミットボタンをダブルクリックすると、リクエストが何度も飛んでしまうことがあるので、なんとかしてくれって要件がたまにあります。 普通のinput type="submit"だったらdisableにしたりするんじゃないかと思います $("input[type=submit]").c…

入力エラー時にアップロードファイルをキャッシュに保持するdjango-file-resubmit

フォーム入力エラーのとき、フォームを再描画してエラーメッセージを表示することになりますが、ファイルのアップロードがある場合、その入力値はクリアされますので、もう一度選ぶことになります。django-file-resubmitはファイルをキャッシュにキープして…