django

DeprecationWarning: You have no filters defined on the 'mail_admins' logging handler

こんなWarningが出てたので調べた。 DeprecationWarning: You have no filters defined on the 'mail_admins' logging handler: adding implicit debug-false-only filter. See http://docs.djangoproject.com/en/dev/releases/1.4/#request-exceptions-are-…

djangoでfactory_boyを使ってみる

軽くさわってみて雰囲気をみてみたfactory_boy ― Factory Boy 2.1.2 documentation rbarrois/factory_boy インストール $ pip install factory_boyこんなエラーがでたけど、pip install -U setuptoolsしてリトライしたら成功した pkg_resources.VersionConfl…

Djangoのdatabase routerでImproperlyConfigured "cannot import name connection"

Djangoのdatabase routerはread/writeするdbを指定できる機能 Multiple databases | Django documentation | Django ドキュメントを参考にして書いていて、ある特定のモデルの場合は、特別なDBをみるみたいなことをやろうとしたら以下のエラーになった。 dja…

django-mobilityを試す

アクセスした端末のUserAgentによってレスポンスを変えたい場合に使えるライブラリ インストール pip install django-mobility 設定 ドキュメントに書いてあるままsettings.pyに設定を書く ただの値はデフォルト値なので、このまま使う場合は書かなくてもい…

datetimeをLast-ModifiedやIf-Modified-Sinceの書式に変換 2

datetimeをLast-ModifiedやIf-Modified-Sinceの書式に変換 - brainstormdjangoで用意されてた。 >>> from datetime import datetime >>> from django.utils.http import parse_http_date, http_date >>> now = datetime.now() # datetimeをepochタイムにする…

django-admin2を試した

インストール pip install django-admin2 設定 djadmin2と依存ライブラリをINSTALLED_APPSに含めるsettings.py INSTALLED_APPS += ( 'djadmin2', 'rest_framework', # for the browsable API templates 'floppyforms', # For HTML5 form fields 'crispy_form…

DjangoでModelに設定したmax_lengthの値をFormのmax_lengthに指定する

ModelFormを使えば、何もしなくても設定されるはずだけど、明示的にFormFieldを指定しなおしている場合とか、forms.Formを使ってる場合とかは、max_lengthを2箇所に書くことになってしまう。 解決方法を調べてたら、Model側のmax_lengthの値を取得してFormFi…

Djangoでlorem ipsumを生成する

django.contrib.webdesignにlorem ipsumを生成するテンプレートタグが用意されていることを知った。このパッケージには今のところ他に機能はないようだ。settings.py INSTALLED_APPS += ( 'django.contrib.webdesign',) html {% load webdesign %} <h2>lorem 3 p</2>…

DeprecationWarning: django.conf.urls.defaults is deprecated; use django.conf.urls instead

こんなwarningがログにでてたんですが、django.conf.urls.defaultsを使ってる箇所が見当たらない。 DeprecationWarning: django.conf.urls.defaults is deprecated; use django.conf.urls insteadと思ったらdjango-debug-toolbarが使っていた。debug_toolbar…

PASSWORD_HASHERSのベンチマーク

BCryptPasswordHasher、PBKDF2PasswordHasher、PBKDF2SHA1PasswordHasherが遅い。その他は桁違いに速いが、後方互換性のために実装が用意されているだけで、セキュリティ上使うべきでないとコメントされている。 ## user sys total real PBKDF2PasswordHashe…

PBKDF2

Djangoではユーザーのパスワードをハッシュでdbに保存します。django1.3では単純にsalt+sha1でした。 def set_password(self, raw_password): if raw_password is None: self.set_unusable_password() else: import random algo = 'sha1' salt = get_hexdige…

Djangoでテストを速くするためにいろいろやってみた

4分程度かかってたテスト実行を速くするためにいろいろやってみたときのメモ まず対応前 $ python manage.py test app --settings=settings.test Creating test database for alias 'default'... .........................................................…

Djangoのパスワードリセットでtokenの一致確認に使われるconstant_time_compare

こんな関数なんですが、なんで文字列の==でなく、わざわざこんなことしてるんでしょうか? djangoの1.3の頃は普通に比較してたと思うんですが。 django.utils.crypto.py def constant_time_compare(val1, val2): """ Returns True if the two strings are eq…

djangoのパスワードリセット機能でURLに付与されるtokenについて調べたメモ

djangoのパスワードリセット機能は、以下のようなURLを含むメールを送って、アクセスしたユーザーが新しいパスワードを入力するものです。 http://localhost:8000/auth/password_reset_confirm/2-3hw-4c194a11e6bda0c44f5c/ パスの最後のランダムな部分はそ…

DjangoのFormのcleanメソッドの呼び出し順

DjangoのFormでis_validが呼ばれたときの処理を読んでたのでメモ まず、データが渡されたFormのインスタンスでis_validが呼ばれた場合、内部でfull_cleanがよばれる。 該当の箇所 django/forms/forms.py def _get_errors(self): "Returns an ErrorDict for t…

logutilsのTestHandlerでログ出力をテストする

logutilsにTestHandlerというクラスが用意されてるので、「view関数で出力されたログをテストする」方法を試してみました。vinay.sajip / logutils ― Bitbucket 適当にview関数を用意。処理中にwarningログを出力する。 views.py import logging from django…

Southのschemamigrationでエラー

schemamigrationで以下のエラーになりました。 ! Cannot freeze field 'apps.person.shirt_size' ! (this field has class books.models.ShirtSizeField) ! South cannot introspect some fields; this is probably because they are custom ! fields. If th…

DjangoでRadioSelectのラジオボタンをバラバラに表示する

以下のようなFormがあって、ラジオボタンを表示するときは from django.forms import RadioSelect from django import forms class RadioSelectSampleForm(forms.Form): beatles = forms.ChoiceField(choices=(('ringo', 'Ringo'), ('george', 'George'), ('…

django.utils.dates.MONTHS

django.utils.dates.MONTHSってのがあるのを知った MONTHS = { 1:_('January'), 2:_('February'), 3:_('March'), 4:_('April'), 5:_('May'), 6:_('June'), 7:_('July'), 8:_('August'), 9:_('September'), 10:_('October'), 11:_('November'), 12:_('Decembe…

CreateViewでモデルのユーザー属性にログインユーザーを設定する

formにhiddenでユーザーidを設定しておくのを見たことがあるんですが、それだとhiddenの値を改ざんされる場合があります。djangoのドキュメントにちゃんとやり方が書いてあって、form_validで行うのが良いようです。 # views.py from django.views.generic.e…

django-model-utilsをいろいろ試してみる その5 PassThroughManager

PassThroughManagerというものを試してみます。まず普通のcustom managerを持つmodelを作成します。 from django.db import models import pytz from datetime import datetime class PostManager(models.Manager): def by_author(self, user): return self.…

django-model-utilsをいろいろ試してみる その4 ModelTracker

django-model-utilsのModelTrackerを試してみる 基本的にモデルが変更されたときにに変更前の値を保持する機能を提供するものらしいまずModelTrackerのインスタンスをクラスフィールドに持つモデルを用意 class Entry(models.Model): title = models.CharFie…

django-model-utilsをいろいろ試してみる その3 InheritanceManager

django-model-utilsのInheritanceManagerを試してみます。InheritanceってことはModelの継承に関係ある機能ですね。サンプルを書いてみます。 class Place(models.Model): name = models.CharField(max_length=100) location = models.CharField(max_length=…

django-model-utilsをいろいろ試してみる その2 TimeFramedModel

昨日の続きでdjango-model-utilsを試してみる。 今日はTimeFramedModel。開始時刻と終了時刻をフィールドにもつようなモデルの場合に使える。 from model_utils.models import TimeFramedModel class Event(TimeFramedModel): name = models.CharField(max_l…

django-model-utilsをいろいろ試してみる その1 StatusModel

django-model-utilsというライブラリを知りました。その名の通りdjangoのモデルを作成するのにいろいろ便利な機能を持ってるようです。ちょっとずつ試してみようと思います。まずはStatusModel。 モデルがなんらかのステータスを持つのはとてもよくあること…

djangoで辞書やリストに署名する

django.core.signingモジュールの関数を利用して、辞書やリストなどのデータに署名することができる from django.core import signing value = signing.dumps({'name': 'brainstorm'}) print value # => 'eyJuYW1lIjoiYnJhaW5zdG9ybSJ9:1UZ9GI:0qqInzB49WPUP…

DjangoがLocationヘッダを組み立てる辺りの処理を追いかけたときのメモ

djangoのlogoutで、nextパラメータで渡したパスが意図しないURLに変更されてLocationとして返されたので、その辺りの処理を追いかけていたときのメモです。 BaseHandlerのget_responseメソッドの最後の方にMiddlewareを適用する箇所があり、その下でapply_re…

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…