Django

Djangoでモデルクラスを差し替え可能にする

Django1.5からdjango.contrib.authのユーザーモデル(User)を差し替えることが可能になっているが、この機能を実現しているのがMetaサブクラスのswappableオプション。 このオプションを使うと、settingsの設定でモデルクラスを差し替える機能をアプリケーシ…

Djangoのログ出力をFluentdで集める

Djangoのログ出力をFluentdで集める方法について。 ログレベルがERRORやWARNINGのものはSentryを使うのが便利だと思うけど、それ以外のINFOやDEBUGはSentryに入れるには数が多すぎるのでどうするか考えてて、最初はローカルのファイルに書き出していた。 け…

Django1.6のsettings.pyと管理サイト

Django1.6から、startprojectで作成されるデフォルトのsettings.pyの内容がずいぶん変わってスッキリしました。 以下インラインでコメント。 """ Django settings for myproject project. For more information on this file, see https://docs.djangoprojec…

bpmappersのテスト実行をDjango1.6に対応させました

bpmappersのv0.7はDjango1.6で動作することを確認済み。 この機会にtoxのtestenvをちょっと書きなおしてみました。 次のバージョン以降は、Python2.5のサポートは切ろうと思います(tox+virtualenv+pipのバージョンを合わせるのが面倒) 代わりに、Python2.6、…

Django1.6とDjango1.4.10がリリースされた

昨日の夜にDjango1.6とDjango1.4.10がリリースされました。 Django 1.6 released | Weblog | Django DBのコネクション保持の機能が入ってるのはちょっと嬉しい。Python3も正式対応になりました。 また、Python2.6対応の最終バージョンになるそう。 Transifex…

Sentryをインストールして実行してみる

複数台あるアプリケーションサーバーのエラーログを集めて見たり、メール通知するのだとSentryは結構使いやすそう。 http://sentry.readthedocs.org/en/latest/ とりあえず、動かしてみる。 インストール virtualenvでeasy_installのオプション指定にてイン…

Django REST frameworkとbpmappersを組み合わせて使う

DjangoでREST APIを簡単につくるためのライブラリは、django-tastypie以外にDjango REST framework(以下rest_framework)というのもある。 Django REST framework これとbpmappersを組み合わせて使う方法を調べたのでまとめる。 rest_frameworkモジュールのソ…

django-tastypieとbpmappersを組み合わせて使う

Djangoでtastypieを使ってREST APIを作る際に、bpmappersをどうやって組み合わせればよいか調べてた。 tastypieのCookbookのページにカスタムの値を追加する例がある。 Adding Custom Values tastypieのソースコードを読んだところ、dehydrateメソッドで値の…

Djangoのsettingsの分割と構造化について

Djangoの設定ファイルであるsettingsの分割、構造化について。 開発、ステージング、本番、テストなど環境ごとにsettingsの内容は変える必要があるので、settings.pyを分割したり、共通部分をまとめたりする。 settingsの分割についてはdjangoprojectのWiki…

DjangoのORMでINSERTのSQL文字列を取得する

タイトルの通り。 DjangoのORMでSELECTのSQLを取得するのは、QuerySetクラスのquery属性を参照すればいいのだけど、INSERTの場合は簡単に取得できる方法がなさそうに見えた。 内部APIをゴニョゴニョすることで、何とか取得できる。 以下、コード例。 myapp/m…

PyCon APAC 2013のチュートリアルでDjango入門の講師をやります

タイトルの通り、PyCon APAC 2013というイベントの前日(金曜日)に、チュートリアルデイというのがあり、そこで講師をすることになりました。 私の担当は、チュートリアルB(Django入門)です。 詳細、参加申込はconnpassのページでどうぞ。 PyCon APAC 2013 チ…

django-jenkinsを使ってDjangoのプロジェクトをJenkinsでテスト実行する

DjangoのプロジェクトをJenkinsでビルドする場合、django-jenkinsを使うと便利。 PyPIからdjango-jenkinsをインストールできる。 $ pip install django-jenkins jenkins用のsettingsファイルを用意する Djangoのプロジェクトにjenkins用のsettingsファイルを…

guestbookアプリをDjango1.5に対応させた

bitbucketに置いてたguestbookアプリをDjango1.5で動くように修正した。 対応前 tokibito / sample_nullpobug / source / django / myproject / (rev:37c9c8d) Django1.0〜1.3ぐらいで動作するコード。汎用ビューがまだ関数だし、staticfilesも使っていない…

Django1.0がPyPIからインストールできなくなっている

数カ月前からなんですが、Django1.0系はPyPIからpipやeasy_installでインストールができなくなっています。 Django1.0系の最新版は1.0.4で、PyPIにレコードはありますが、アーカイブが登録されていないのが原因のようです。 $ pip install Django==1.0.4 Dow…

Djangoのrestructuredtextフィルターでblockdiagを使う

Djangoのcontribには、テンプレートでrestructuredtextなどのマークアップをHTMLに変換してくれるフィルタのセット、django.contrib.markupがあります。 https://docs.djangoproject.com/en/dev/ref/contrib/markup/ restructuredtextフィルターを使う場合は…

DjangoとMySQLで緯度経度を扱う

やりたかったことは、指定した緯度経度(GPSから取得した現在位置)に近い場所の検索と距離の算出でした。 DjangoだとPostGIS+GeoDjangoを使えばできますが、今回はデータベースがMySQLであるため、filterでdistanceが使えませんでした。 GeoDjango Database A…

Southのマイグレーションのマージ

Mercurialなどのバージョン管理システムでブランチを使っていて、DjangoとSouthを使っている場合、Southのマイグレーションがブランチ間で衝突して、マージしないといけないことがよくある。 その際の解消手順についてメモ。 試したのはDjango1.4.1, South0.…

Django1.4のバルクインサートを試す

Django1.4で、やっと標準でバルクインサートがサポートされた。 QuerySetにbulk_createというメソッドが増えている。 単純なモデルを作って、動きを見てみる。 試したのはMySQL5.5、Django.1.4.1 myapp/models.py class Item(models.Model): name = models.C…

DjangoのORMでサブクエリやrawを使う

試したのはDjango1.4.1。 こういう親子関係のモデルがあったとする。 myapp/models.py from django.db import models class Parent(models.Model): name = models.CharField(max_length=30) def __unicode__(self): return '{}, {}'.format(self.name, getat…

django.contrib.staticfilesを使う

しばらく仕事でDjangoをあんまり使ってなかったので、思い出しつつ新しい機能を勉強しつつ使ってます。 django.contrib.staticfilesはDjango1.3から使える機能。django-staticfilesというパッケージで公開されていたものがDjango本体に取り込まれた形。 http…

django-newauthの使用例

ずいぶん前になるけど、同僚のイアンが社内のDjango用認証フレームワークを公開してた。 django-newauth Documentation — django-newauth 1.0 documentation django-newauthを使う例をbitbucketに置きました。 tokibito / sample_nullpobug / source / djang…

WindowsMeでDjangoを動かしてみる

某勉強会への参加のためにノートPCを用意する必要があったんですが、ちょっと古いノートPCで遊んでみようと思って押し入れから引っ張りだして来ました。 昔実家で使われていたCOMPAQのPresario1400です。購入したのは11年ほど前です。 このPCは当時でもスペ…

bpmappersを使ってDjangoテンプレート上の記述を少しだけ簡単にする

DjangoでA データをいくつか作って、テンプレートで表示させる際にManyToManyフィールドがあると、途中の参照でManagerが入ってしまう。 その際にModelMapperを使って記述を少し簡単にしよう、という話。 まあ実際に使える場面は多くない。 myapp/models.py …

Djangoの翻訳状況

Djangoの翻訳状況について。 Django1.3以降の汎用ビューやモデル周りの変更に伴って、未翻訳のテキストが増えていたので少し翻訳作業をしました。 https://www.transifex.com/projects/p/django/language/ja/ localflavor, humanize以外は100%になっています…

ORMを使わずに問い合わせてオブジェクトでごにょごにょ

社内向け。検索用記事。Djangoのバージョンは1.4。 ORMを使わずにSQLを投げて、結果をオブジェクトとして使いたい場合。 bpcommonsは社内の人なら拾ってこれるはず。bpmappersはpipでインストール。 myapp/models.py データベース用のものとふるまいをするだ…

Djangoのアプリケーションでmodelsモジュールを複数ファイルに分割する

Djangoのアプリケーションで、models.pyのコード量が多くなってきたので、複数のファイルに分割する話。 ハマりどころがあるので書いておく。試したのはPython2.7、Django1.4。 testapp/ __init__.py models.py models.py from django.db import models clas…

テスト用のRequestFactoryを使ってみる

Djangoでユニットテストを書く際にテストクライアントを使うことができますが、これはurls.pyを用意しないと使えません。 しかし、ビュー関数のみをテストする場合、Requestクラスのオブジェクトが必要になります。 django.test.client.RequestFactoryを使え…

ソフトウェアの多言語対応を支援するTransifex

今更な感じではあるけど紹介。 ソフトウェアを多言語対応させるためにはgettextなどの仕組みを使うのだけど、それらで使われる拡張子がPOの翻訳データのファイルをオンライン上で編集できるサービスです。 https://www.transifex.net/start/ Transifexがオー…

エラーメールのタイトルにホスト名を含める

いろんな環境で動かしていたり、アプリケーションサーバが複数ある場合、エラーメールがどこから送られたのかパッと見で判別しづらい。 socketモジュールでホスト名を取得できるので、メールのタイトルに入れとくといい感じ。 settings.py import socket EMA…

bpmappers0.5のドット区切りの指定とListDelegateField

bpmappersのサンプルコード。 DjangoのManyToManyFieldに対するアプローチ。 バージョン0.5でフィールドのkeyパラメータにドット区切りの文字列を指定できるようになったので、ListDelegateFieldの記述なんかもちょっと簡単にできる。 models.py こんなモデ…