Django

Djangoの管理コマンドを作る際にdjango-extensionsのcreate_commandコマンドを使う

Djangoのmanage.pyスクリプトのサブコマンド(管理コマンド、management command)を追加するには、Djangoアプリケーション内に「management/commands/コマンド名.py」のようにモジュールを作成しますが、頻繁に使うわけでもないので作法をよく忘れてしまって…

DjangoテンプレートのstaticタグとSTATIC_URLコンテキスト変数の使い分け

Djangoテンプレートで静的ファイルのパス指定時にdjango.contrib.staticfilesのstaticタグとSTATIC_URLのどちらを使うべきか、という質問があったので、少し調べました。この記事はDjango 1.8のドキュメントとコードを参考にしています。 結論としてはstatic…

Django 1.8で追加されたSecurityMiddlewareについて

Django1.8で増えた機能でSecurityMiddlewareというものがあります。 何ができるのか把握しておきたかったので調べていました。 django.middleware.security.SecurityMiddleware コードはこのあたり。 django/security.py at stable/1.8.x · django/django · …

Djangoのメッセージフレームワークのストレージについて

Djangoフレームワークには、利用者ごとに一度だけ表示するメッセージ(フラッシュメッセージ)を扱う機能(django.contrib.messages)が含まれています。 The messages framework | Django documentation | Django メッセージは、複数のリクエストをまたいで表示…

django-celeryを使わずにDjangoとCeleryを組み合わせて使う

DjangoとCeleryを組み合わせて使う際に、django-celeryのモデルのテーブルを作りたくなかったり、各種機能が不要でシンプルに動かしたかった。 Celery - Distributed Task Queue — Celery 3.1.23 documentation Celeryやdjango-celeryはドキュメントが少し足…

Django1.7の管理サイトでアプリケーション名を変更する

Django1.6以前のバージョンでは、管理サイトで表示されるアプリケーション名を変更する方法は通常の使い方では提供されていませんでした。 変えたいのはこの「Myapp」という部分。 Django1.7ではアプリケーションごとの設定が抽象化、再利用可能な仕組みが導…

DjangoでDEBUG=Falseの際にSQLのログを出力する

Djangoでクエリのログを出力したい場合、ロギングの設定でdjango.db.backendsのロガーを設定すればできます。 ただし、これはsettings.DEBUG=Trueのときにしか出力されないようになっています。 これはドキュメントにも書かれています。 ロギング — Django 1…

Djangoでprefetch_relatedを使ってクエリ数を減らす

prefetch_relatedはDjango 1.4で追加された機能です。 親子関係を表すモデル(多対多になってるものなど)をツリー状に表示する場合、ループ内でクエリを実行しってしまうと、クエリ数が多くて極端に遅くなります(特に2段目とか3段目)。 prefetch_relatedを使…

Django 1.5.3以降で変更されたセッションのシリアライズについて

Djangoのセッションデータは、settings.SESSION_ENGINEで指定されたクラスによって保存されます。 Django 1.5.3より前のバージョンでは、セッションデータのオブジェクトをシリアライズ、デシリアライズする処理は、ここで指定されるバックエンドクラスに任…

Djangoのタイムゾーンサポートの動作について

Djangoのタイムゾーンサポートについてメモ。settings.USE_TZをTrueにすると有効になる。 試したのはPython 2.7, Django 1.6.2。 Django1.6だと、プロジェクト新規作成時のsettings.pyでUSE_TZはTrueに設定されている。(ドキュメントではデフォルトでは無効…

django-ftpserverを公開しました

昔作ったunboxftpdを名前変えてリファクタリングし、django-ftpserverとして公開しました。 django-ftpserver 0.3.5 : Python Package Index Djangoアプリケーションとして追加すると、FTPサーバーを起動するコマンドが追加されます。 ユーザー認証はDjango…

Django 1.7で追加されるAppConfigの紹介

この記事はDjango 1.7 alpha2の段階で書いています。 Django 1.7では、アプリケーションのロードや管理の仕組みが変更されます。 ドキュメントも追加されています。 Applications | Django documentation | Django 大雑把な説明 大雑把に説明すると、 アプリ…

Djangoでフォームセットを使って複数のレコードを一括編集する

1つのモデルの複数レコードを編集するのなら、ModelFormのフォームセットを生成するといいのだけど、modelformset_factoryという関数があるのでそちらを使用してみる。 ドキュメントに載っていないのでバージョンアップで動かなくなる可能性あり。 modelform…

DjangoでSOAPウェブサービスを実装する

PythonでSOAPを扱う場合、いくつかサードパーティモジュールがあるのだけど、久しぶりに調べてみたら、Spyneというのがそこそこ活発に開発されてるようだ。 spyne - RPC that doesn't break your back. どうやら、 soaplib の開発を停止して rpclib というモ…

django-edamameというライブラリを公開しました

django-edamameはDjangoで複数のビュー関数、ビュークラスをまとめる機能を提供します。 django-edamame 0.1 : Python Package Index このアイデア自体は数年前から持っていて、実装コードではちょくちょく使ってた。 複数のビューをまとめて似たような機能…

Djangoでサイトの利用者ごとに翻訳の言語設定を切り替える

Djangoで、サイトの利用者ごとに言語設定を切り替えたい。 DjangoはセッションやCOOKIEの値を参照して、どの言語に翻訳するかを決める仕組みをミドルウェアで提供している。 言語設定の検出メカニズム - 翻訳 ― Django 1.4 documentation フォームから送信さ…

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…