Django

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 こんなモデ…

django.utils.dateformat.formatで日時の文字列表現をする

Pythonのdatetimeオブジェクトにはstrftimeというフォーマットを指定して文字列表現を返すメソッドがあるけど、それでカバーできないパターンのときなどに使う。 django.utils.dateformat.formatはDjangoの日時フォーマットを行うフィルタの元の関数。 ドキ…

GoogleAppEngineのアプリケーション内で使うDjangoのバージョンを1.2に指定する

表題の通り。メモ。 AppEngineのSDKは、これを書いてる現在はDjangoの0.96がカレントバージョンで、SDK内部にはDjango 1.2も含まれている。 1.2に切り替える場合はアプリケーションのディレクトリに appengine_config.py を作成して1行書く。 webapp_django_…

webappでdjangoのフォームを使うときにエラーメッセージを日本語にする

AppEngineのwebappでdjangoのフォームを使うと、settings.LANGUAGE_CODEがen-usなのでエラーメッセージが英語になって残念ですよね。 その解決方法など。 main.py 単純なテンプレートでフォームを表示してis_validするだけのコード。 import os from google.…

ブログ内のDjango記事リンクまとめ

昨日のリンクまとめが使いやすかったので、Djangoについてもまとめてみた。数が多いのでちょっと大変だった。 各項目の上のほうが新しい記事で下に行くほど古いです。 古い記事は、Djangoのバージョンも古いので役に立たない可能性有り。内容が酷い物もある…

PostGISのST_SimplifyをGeoDjangoから使う

PostGISのST_Simplifyを使うとPOLYGONやLINESTRINGの形状を単純化できる。 GeoDjangoからはGEOSGeometryのsimplifyメソッドを使えばよい。 Django1.3で試した。 >>> line_string.simplify? Type: instancemethod Base Class: <type 'instancemethod'> String Form: <bound method LineString.simplify of <LineString object at 0xa4ed5f0>> Namespace: Int</bound></type>…

Django1.3のClass-based generic viewsを使う

Django1.3で、汎用ビュー(generic views)が関数からクラスベースのものに変更されました。 http://docs.djangoproject.com/en/1.3/ref/class-based-views/ 使い方などをメモ。 1.2からのマイグレーションについても、ドキュメントに書かれている。 http://do…

3次元の座標を扱う

メモ。GeoDjangoのGeometryFieldはデフォルトでは2次元だけど、3次元にする場合。 dimオプションを3にする。 class MyAddr(models.Model): pnt = models.PointField(dim=3) 参考 http://www.syndim.org/docs/django/ref/contrib/gis/model-api.html#dim

PythonとDjangoを使うときに押さえとくと良いもの

社内向け。 tokibitoの知識が偏ってるので、もっといろいろ知りたいなら社内チャットで他の人にも聞くこと。 Python easy_install setuptoolsかdistributeというパッケージで使えるコマンド。 @aodag 曰くsetuptools使わずに、distribute使えという話。 イン…

Django1.3がリリースされましたね

Django1.3がリリースされましたね Django 1.3 released | Weblog | Django Django 1.3 release notes | Django documentation | Django

django-skypehub 0.2.0 リリース

OnTimeHandlerの追加と指定ユーザへメッセージを送るAPIが追加されてます。 django-skypehub 0.2.0 : Python Package Index

PowerDNSとdjango-powerdnsを試す

DNSサーバをいろいろ試しているところ。 PowerDNSはバックエンドにRDBMSなどを使えるDNSサーバ。 今回はMySQL5.1で試す。OSはubuntu9.10。 PowerDNS 2.9.22, Django 1.2.5. MySQLをインストール。 $ sudo aptitude install mysql-server PowerDNSをインスト…

bpmappers 0.3をリリースしました

bpmappers 0.3をリリースしました。 bpmappers 0.3 : Python Package Index 今回はDelegateFieldに関するマイナーな変更のみ。 追ってドキュメントは更新していきます。 こんな感じのモデルがあったとします。 from django.db import models class Person(mo…

Django1.3のリリースが近いとか

仕事が忙しくてあんまり追えてなかったんですが、Django1.3が今月末ぐらいにはリリースされるかもしれないみたいです。 Django 1.3 release schedule - Update 3 | Weblog | Django 今配布されてる1.3系のアーカイブはbetaなので、次はRCですね。 1.3では、c…

Djangoでguestbookアプリ

とりあえずDjangoを動かしてみたい人向け? Python-hack-a-thon4で使われなかった(参加者いなかったので)アプリの紹介を今さら。 Djangoをインストール済みの環境であればすぐに動かせます。 Django1.2.4で動作確認。 入手 bitbucketに置いています。 tokibi…

djangoのセッションキーについて調べてた

メモ。django.contrib.sessionsのセッションキーが毎回変わる?とかそんな話が出てて、どういう動きするんだったか調べてた。 Djangoのバージョンは1.2.4。 適当に書いたview関数。 views.py from django.http import HttpResponse from random import choic…

SortedDict

djagno.utils.datastructures.SortedDict >>> from django.utils.datastructures import SortedDict >>> d = SortedDict() >>> d['hoge'] = 'fuga' >>> d {'hoge': 'fuga'} >>> d['foo'] = 'bar' >>> d {'hoge': 'fuga', 'foo': 'bar'} >>> d.keyOrder ['hog…

django-pistonとbpmappersでWebAPIを作る

hfunaiの記事に便乗。 http://blog.monospace.jp/2010/10/31/django_piston_intro/ django-pistonを使うとDjangoで簡単にWebAPIを作れます。 jespern / django-piston / wiki / Home — Bitbucket fields/excludeにフィールド名を指定すると、必要なフィール…

DjangoでPHPを使ってみた

id:moriyoshi が php-in-python を作ったらしいので使ってみました。 moriyoshi / php-in-python — Bitbucket django経由でphpinfoを表示させようと思ったけど、CLI版のせいかテキスト表示であんまり面白く無いので、CakePHPを動かしてみました。 settings.p…

modwsgiでDjangoアプリケーションをサイトルート以外に設置する

Apache/modwsgi環境でサイトルート直下以外にDjangoを設置する方法。 Djangoのプロジェクトをサイトルート以外にデプロイする-解決編 - 偏った言語信者の垂れ流し 以前同じようなタイトルで書いたのだけど、そのときはDjango0.97preだったので、Django1.2の…

BPStudy#37

BPStudy#37でDjangoのフォームの話とdjango.utilsの話をしました。 BPStudy#37 : ATND スライド スライドはs6.jsベースで作っています。 http://tokibito.orz.hm/presentation/9/

djangodash2010

3人でdjangodashやってました。 http://djangodash.com/teams/beproud/ beproud / eventstream — Bitbucket

管理画面で使われているページング表示を通常のページで使う

Djangoの管理画面の一覧表示でページング(ページネーション)表示がありますが、あれを通常のページで使う方法です。 django.contrib.admin.views.main.ChangeListオブジェクトを管理画面で使っているのですが、これのモックを作って使ってみました。 Django…

フォームセットで初期データの数を変えるついでにAdminDateWidgetを使う

Djangoのフォームセットの使い方はよく忘れるので。 フォームセット (formsets) — Django v1.0 documentation ドキュメントにフォームセットの項目はあるのでこのとおりでよい。 これだけだと面白くないので、AdminDateWidgetでも使ってみる。 Djangoのバー…

Python Hack-a-thon 2010.07用の資料

Python Hack-a-thon 2010.07 : ATND Djangoのハンズオンやります。 tokibito / python-hackathon4-django — Bitbucket 追記 そして誰もこなかった。Django不人気!

Djangoとディレクトリトラバーサル

社内で話題になったのでまとめる。Djangoとディレクトリトラバーサルについて。検証したバージョンは1.2.1。 ユーザの入力値などを利用してファイルパスなどを生成したりする場合やファイルをアップロードさせる場合には特に注意する。 Djangoのテンプレート…

bpmappersを公開しました

モデルから辞書への変換を支援するPythonモジュールを公開しました。 bpmappers 0.8.2 : Python Package Index tokibito / python-bpmappers — Bitbucket ビープラウドで使っているものです。 JSONのAPIを作るときなどに、ツリー構造の辞書オブジェクトから…

zipファイルを作成して返す

Djangoでzipファイルを作成してレスポンスで返す方法。 PythonのZipFileクラスはファイルライクなオブジェクトに書き込みできるので、HttpResponseのインスタンスをそのまま渡せます。 views.py from zipfile import ZipFile from django.http import HttpRe…

django-autofixtureが便利

フィクスチャのメンテナンスが大変で、何かないかなって探してて見つけた。 django-autofixture 0.12.1 : Python Package Index Djangoのモデルのメタ情報からフィクスチャデータを適当に作ってくれたりする。 Railsだとfactory_girlみたいなもの。 こんな感…

Django1.2

Django1.2がリリースされましたね。 http://docs.djangoproject.com/en/1.2/releases/1.2/ 自分が気になる変更点は以下の通り。 マルチDB対応 CSRF対策の変更 メール送信バックエンド テンプレートのキャッシュ ModelAdminのreadonly設定 まだ全然試してない…

djangohosting(not cloud)

去年の4/1に書いたエントリでは、Django Cloudがどうのとか書いてたけど、実際はただのDjangoのホスティングサーバなんだよね。 自分のホームページ( http://tokibito.orz.hm/ )は1年ぐらい前からこの自前のアプリケーションサーバを使って動かしてる。 $ dj…

DjangoでXMLを出力してDelphiから利用する

サーバサイド(Python/Django)とクライアントサイド(Delphi)のアプリケーションの連携をやってみる。 今回はゲストブックアプリのデータを、クライアントアプリから閲覧、投稿できるようにしてみる。 サーバサイドの用意 Djangoのアプリケーションは以前作成…

CSVファイルダウンロードをちょっとだけ汎用に

結構前に作ったCSVファイルを管理画面からダウンロードするアプリを汎用にした。 CSVファイルをダウンロードする例は、djangosnippetsにも結構載ってるのでそちらも参考に。 tokibito / django-csvutils — Bitbucket 例えばModelAdminでactionを使えるように…

WSGIとDjangoのメモ

wsgiref.handlers.CGIHandlerっぽいものを自分で書いてDjangoのIt worked!を表示してみるメモ。 tests.py # coding:utf-8 from django.conf.urls.defaults import * urlpatterns = patterns('') def start_response(status, response_headers, exc_info=None…

urlconf周りのメモ

カスタム用。urlconfをクラスにしたいときとか。普通は使わない方が良い。 # -*- coding: utf-8 -*- from django.core import urlresolvers from django.utils.functional import memoize from django.utils.importlib import import_module from django.con…

フォームのフィールドの並び順を変える

Djangoで定義済みのフォームのフィールドの順番を変える方法。 通常は定義したときの順番だけど、後から無理矢理変えたいとかなら、base_fieldsがSortedDictなので、keyOrderを変えれば良い。 >>> from django import forms >>> class MyForm(forms.Form): .…

URLの名前の衝突を解決する

Djangoではurls.pyなどで、名前付きのURL(url関数を使ってnameを指定)することで、URLを名前から逆引きすることができますが、この名前が衝突するとどうなるでしょう。 答え:一番最後に定義されたものが使われます。 以下、その例。 プロジェクトの構造 mypr…

Djangoを使い始めた人向けの読み物

同僚の @AE35 が翻訳していたので。 Django 開発初心者に送る 10 の Tips (超訳?) - SPEAKER BREAKA これは良い内容。読むべき。

Djangoのモデルに定義されたフィールドを列挙する

Djangoのモデルに定義されたいろいろな情報を列挙するには、 _meta を使うことでできます。 >>> from django.contrib.auth.models import User >>> for f in User._meta.fields: ... print f ... <django.db.models.fields.AutoField object at 0x01400290> <django.db.models.fields.CharField object at 0x013FBA50> </django.db.models.fields.charfield></django.db.models.fields.autofield>

django.core.urlresolvers.resolveの使い方

直接使うことなんてほとんどない、resolve関数の使い方。 URLからビュー関数を得る。 >>> from django.core.urlresolvers import resolve >>> from django.http import HttpRequest >>> func, args, kwargs = resolve('/') >>> response = func(HttpRequest(…

TestCaseを拡張しよう

Djangoでのテストを書くときに、URLにアクセスしてステータスコード見るだけってテストをコピペで量産するのはかっこ悪いので、どうにかする例。 test.pyにTestCaseをちょっと拡張したクラスを書いておく test.py from django.test import TestCase class Ba…

Python Hack-a-thon #2

Python Hack-a-thon #2でDjangoのハンズオン担当してました。 初心者向け、ということなのでいつも通りguestbookアプリのインストールと解説をしました。 人数が6,7人で比較的余裕があったので、Apache2+modwsgiの設定とnginx+fastcgiでの設定についても実…

クラスベースのビュー

社内チャットで出た質問。GETパラメータによって呼び出すビューを変えたい場合はどう書くとよいか。 クラスベースのビューを書くと割ときれいに書けるんじゃないかな、という話。 まずは素直に書いてみる。 def index(request): action = request.GET.get('a…