Django

bpmappers 0.9

bpmappersのバージョン0.9を公開しました。 pypi.python.org リポジトリはbeproud organization以下にありますが、権限を頂いて引き続きメンテナンスしています。 以前のバージョンでは、django.utilsにあったSortedDictとMultiValueDictをコピーして使って…

django-ftpserver 0.5.0

django-ftpserverのバージョンを0.5.0に上げました。 pypi.python.org pyftpdlibのFileSystemにDjangoのStorageAPIをつなげる機能を追加してみました。 StorageAPIとつなげると、面白そうだなーというのは前から考えてたんですが、StorageAPI側の機能が足り…

Travis CIのmatrixでtoxを実行する

Djangoフレームワークに依存するPythonのモジュールを作っていると、複数のPythonバージョンと複数のDjangoバージョンでテストコードを実行する必要があります。 手元で実行する場合はtoxを使うのですが、CIツールでもテストを実行したいです。 Welcome to t…

Django 1.11がリリースされましたね

Djangoフレームワークの1.11がリリースされましたね。 Django 1.11 released | Weblog | Django 1.11はLTS(Long Term Support)バージョンです。メンテナンス期限はリリースから3年後までなので、2020年4月までになります。 1つ前のバージョン1.10のメンテナ…

オープンソースカンファレンス2016 HokkaidoというイベントでDjangoの紹介をしました

6/18に北海道のオープンソースカンファレンスでDjangoの紹介をしてきました。 www.ospn.jp 説明が急ぎ足になったり、デモが中途半端に終わってしまって申し訳ない感じですが、聞きに来てくださった方はありがとうございました。 いくつか面白いセミナーもあ…

DjangoのDeprecationWarningを確認する

Djangoフレームワークでは、APIが変更、廃止される場合には、次のバージョンですぐに変わってしまうのではなく、警告を上げた上で2つ先のバージョンで削除されることになっています。 Deprecation policy Pythonの組み込み例外であるDeprecationWarningを継…

cx_Oracleをマルチスレッドで使う

PythonでOracle Databaseに接続するには、cx_Oracleを使う。 マルチスレッド環境下でcx_Oracleを使う場合にハマったのでメモを残す。 Oracleのクライアントライブラリは、マルチスレッドで使う際には、OCI_THREADEDというモードで使わないといけないらしい。…

Djangoで複数のデータベースを使う際に、モデルごとに使われるデータベース名を取得する

Djangoで複数のデータベースを使う際に、データベースルーター(Database router)を設定すると、モデル毎にデータベースを切り替えたりできます。 Multiple databases | Django documentation | Django データベースルーターが設定されている場合に、アプリケ…

復数のレコードをまとめて更新する際にdjango-bulk-updateが便利

既存の復数のレコードをまとめて更新する際にdjango-bulk-updateというパッケージが便利だったので紹介します。 GitHub - aykut/django-bulk-update: Bulk update using one query over Django ORM 通常のDjangoのORMを使ったレコードの更新 Djangoで既存の…

Djangoのプロジェクトに管理コマンドを追加する

Djangoのmanage.pyは独自に管理コマンドを作成して追加できます。 ここでは、「myapp」という名前のDjangoアプリケーションに対し、「summation」という名前のコマンドを実装する例を紹介します。 myappはプロジェクトに作成済みで、INSTALLED_APPSに追加済…

Djangoのエントリポイントとアプリケーションの仕組み

PyCon mini Sapporo 2015で、「Djangoのエントリポイントとアプリケーションの仕組み」というタイトルで話しました。 資料はSlideshareに置いてます。 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…

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 …