日記

日々のことと、Python/Django/PHP/Laravel/nodejs などソフトウェア開発のことを書き綴ります

Python

pip を閉域環境で利用する

はじめに 今回は諸般の事情で pip というか、Python 環境を外部通信が不可能な環境で用意する必要が出てきたので、やり方を調べた時の備忘録です。 環境構築の流れ 作業順としては次のような流れです。 外部通信可能な環境で、pypi からパッケージを取得する…

buildout自身のバージョン指定

いつも忘れちゃうのでメモ。 $ python bootstrap.py --version 1.5.2 -d init みたいな感じで。

GIFをSWFのDefineBitsLossless2に変換するコードが無かったから書いたった。

PHPのコードばかりで、あれだったのでPythonで書いたった!Gitにしようかと思ったけど、Macbook Airにmac portsなど入れていなかったから、はてな日記にぺたぺた。xml2swfで出力したXMLに埋め込む前提なので、SWF内のタグ定義とかヘッダーは、バッファに書き…

Pythonのプログラムをプロファイリングする

TwitterやFacebookばかりで、めっきりと更新が止まってました。 久々に更新ということで、今回は仕事でバッチ処理を書いたときに処理時間を調べるために使った Pythonの cProfileの使い方を書き残しておきたいと思います。 Pythonのプロファイラー Pythonは…

意外と良書?

かなり前に買って積んどいたgihyoの「Python ポケットリファレンス」が意外と良い。 ちょっと初心に戻って、と思って読んでいるんだけど、必要な事が簡素にまとまっているし、本も重くないし良い。あと、説明がクドくないのが特に良い。あんまりリファレンス…

zipfile を使って ZIP ファイルを生成する

データを圧縮するときに ZIP 圧縮をプログラムから行う事は、遭遇することが割と多いと思います。普通に圧縮だけをしてもつまんないサンプルになってしまうので、仕事でちょっとしたチューニングしたことを織り交ぜつつ、 Python の ZIP 圧縮をしてみたいと…

psycopg2 を使って PostgreSQL に接続する

Djangoを使っていると Model フレームワークからデータアクセスするため、普段は意識しないですが、直接データベースコネクションを使ってデータを取得することも割と簡単です。今回はその方法を。 事前準備 以下の環境で接続を試しています。 PostgreSQL 8.…

Model その3

サボりすぎて自分もあんまり覚えてませんが(笑) Modelの三回目です。 リレーションシップ Django の Model でも当然ながら、外部キーを使ったテーブル間の連携にも対応しています。ではありがちの会社と所属する社員で、サンプルを書いてみます。 from djang…

辞書型のキーと値をクラスのプロパティに設定する

色々と難しい方向に探してしまったのでメモメモ。 setattr(target_instance, 'property_name', property_value)まさか組み込み関数にあると思わなかった。リフレクションでクラスインスタンスを作る場合は classname = "C" clazz = globals()[classname] obj…

Model その2

前回に続いてModelです。今回は、データの問い合わせ方法とテーブルとフィールド名のカスタマイズをやってみます。 データを問い合わせる 前回登録したデータを、Modelクラスを通して取得してみます。Djangoのシェルを起動して、次のようにします。 from app…

Model その1

かなり間があいてしまいました。ようやくですが、Modelのことをざっくり書いていきます。 Modelってなに? Djangoが用意しているModelは、データ永続層にアクセスするコンポーネントです。要は、O/Rマッパーでクラスとテーブルが1対1でマッピングされ、1イン…

HTTPのRangeアクセスを実装して、分割ダウンロードに対応する

auケータイの動画ファイルダウンロード(3gpp2とamc)するときにハマったのでメモ書きしておきます。 ガラパゴス携帯の動画再生 日本の3大キャリアの携帯では、動画をHTML上に埋め込む時にそれぞれ違った実装方法を取らないと行けない。ここではサーバとのやり…

テストサーバのHTTPプロトコルバージョンを変更する

Django付属のテスト用Webサーバは、レスポンスが HTTP/1.0で固定されてしまっていてコードを書き換えないとHTTP/1.1のレスポンスが返せなかったので、その時に調べたメモ書きです。 core/servers/basehttp.py このファイルの中にバージョンがベタ書きされて…

配列の中身をランダムに並び替え

必要になったシチュエーションとしては、Webサイト上のカテゴリをランダムに表形式で並べたい!でした。調べてみると Python では凄く簡単に実現できる。 import random list_data = [ 'A', 'B', 'C' ] random.shuffle(list_data)これだけ! list_dataがタプ…

manage.pyサブコマンド(バッチ処理)とTemplateの有効活用

Modelに入るはずでしたが、予定を変更してコマンドラインからもっと有効的にDjangoを使う方法を載せておきます。 バッチ処理というキーワードで、マニュアルとかに書いてないんですもの。。。 Djangoシステムの有効利用 Djangoフレームワークは、Webだけに限…

テンプレートの共通化

テンプレートの使い方も一歩進めてみます。 DRY テンプレートと言えども、DRYに従って実装を進めたいものです。 DjangoのTemplateでは、カスタムタグに加えて、includeやテンプレートの継承をサポートしています。 include includeは、カスタムタグとして実…

Middleware その2

前回から間が空いてしまいましたが、Middlewareに関連したことを一歩進んで勉強してみます。 Middlewareの弱点 Middlewareは、Djangoフレームワーク上の拡張ポイントです。JavaServlet APIのFileterに似てます。ここまでは前回説明しましたが一つ問題が。「…

Middleware

今日は Middleware です。 役割 ミドルウェアと言っても、Apache とか Tomcat とか、Oracleとかとは位置づけが異なっていて、Djangoのミドルウェアというと、拡張ポイントのことを指しています。どの位置の拡張ポイントかというと、views.pyに処理が到達する…

reverseを使って関数のURLを取得する

views.pyでURLの逆引き リダイレクトの使い方などを紹介しましたが、直接URLを指定しても良いのですが、urls.pyの設定が変わった時に views.py も書き換えなければいけないのは正直しんどいと思います。 Djangoにはそういった悩みを解決するため、関数名から…

urls.py

urls.pyは、URLのルーティングを定義します。いままでのサンプルコードでは、一つの関数でサンプルを作っていたので、あまり意識していませんでしたが、結構便利に使えます。 URLの定義方法 from django.conf.urls.defaults import * urlpatterns = patterns…

動作速度

やっぱり遅い気がする。 コアな部分は、Cで書いたほうが良いんだろうか。

HttpRequestのあれこれ

今日は、HttpRequestです。 POST/GETの判別 HTMLフォームから送信されたパラメータが、どのメソッドで送信されたかを調べるには、以下のようなコードになります。 def method_check(request): if request.method == 'POST': # POSTでパラメータを送ってきた…

views.py で利用できるショートカット関数

render_to_response 散々使ってますが、一応紹介すると、テンプレートをレンダリングしてクライアントに結果を返すショートカット関数です。 render_to_response( 'template.html', {'key':'value',}, context_instance=RequestContext(request), mimetype='…

HttpResponseのサブクラスたち

今日は手抜きで、HttpResponseのサブクラスを簡単に解説します。 HttpResponse いままでのサンプルコードで使っているのはこれでした。 ようは HTTP Status 200 OKを返すためのクラスです。このクラスに限らず、HttpResponseのサブクラスはテキストだけでは…

render_to_response の中身

いままで何気なく views.py の中で使ってしまった render_to_response ですが、何をしているのかわからないまま使うのは良くないと思ったので、今回はこの関数を使わずに同じようなことをしてみたいと思います。まずは views.py の現状のコードを見てみます…

Context Processorで views.py の仕事を肩代わり

前回はタグを作りました。タグ関数でインスタンスを作った Node クラスのrenderでは、contextが渡されていました。この context は、view や template、そして tag の中と一連の処理の中で共通の値を保持するクラスです。Java(Servlet API)の中だと ServletC…

自前のタグを作る

前回はフィルタを作ったので、今回はタグを作ってみたいと思います。 フィルタとタグの作り方は、かなり似ている。では、フィルタとタグの使い方から見た時に何が違うかと言うと、インプットの有無だと思う。フィルタは、テンプレート上の動的な値がありき。…

フィルタを自作する

Djangoのフィルタを自作するときには、Djangoのお作法に従ってファイルを配置します。 まずアプリケーションディレクトリの下に、"templatetags"というディレクトリを作成します。このディレクトリ名は決め打ちです。また、パッケージとして扱うのでディレク…

Templateでのシンタックス

ViewからTemplateに値を渡して表示する方法がわかったら、次はその渡された値からHTMLを切り替えたり、列挙された値の取り出しをしてみます。まずは views.py を編集します。今回は色々な値を設定します。 # vim:fileencoding=utf-8 from django.shortcuts i…

フィルタを使って、値を変換する

ifを使って、Noneの値を出し分けたりしましたが、Noneのときにはデフォルト値(ゼロとか未選択を出したい!)を表示したい時には何となく冗長です。 そんなときには、フィルタを使うとスマートな表記ができます。前回の views.pyはそのまま利用して、htmlテ…