ブログ一覧

djangoのDBデータをAmazon S3にバックアップするパッケージ

Djangoプロジェクトで生成したデータベースデータをAmazon S3にバックアップするアプリ
「django-s3-backup」
をgithubにて公開いたしました。

「もうバックアップを心配する日々から解放されたい!」
 
そんな気持ちに応えるアプリです。

コマンドラインベースのアプリで、manage.pyにbackup, restoreコマンドを提供します。
データベース内の全データを堅牢性の高いS3にJSON形式でバックアップ。
データをレストアするときはS3からJSONデータを読み込みレストアを行うことが可能です。
DjangoのORMを駆使してテーブル毎のデータをJSON化しますので、Postgresqlでバックアップしたものをレストア時にMySQLに。といったマイグレーションツールとしても使えます。

それでは具体的に使い方、特徴を見ていきましょう。


Python: lxmlを使って、タグを巡回する方法

HTMLの分析を行う際、タグを巡回する必要がありますがそんなとき、lxmlを使うと便利です。

lxmlでは、タグの入れ子関係が壊れたHTMLの修復も自動で行ってくれる機能がありますのでユーザは細かいことを気にする必要はありません。この修復機能のおかげで、入れ子の修復(閉じ括弧がないタグは閉じ括弧を付与)を行ってくれるため、HTMLをツリーとして、つまりDOMツリーとして捉えることができるようになるのです。

DOMツリーだから何やねん!という方は読み飛ばしてもらっていいのですが、ツリーであるおかげで親ノード(親タグ)をたぐったり、兄弟ノード(兄弟タグ)をたぐったりが簡単にできるようになるのですね。lxmlってすばらしい。

木を巡回する手法はいろいろとありますが、今日は深さ優先で巡回する手法をみてみましょう。

Python: lxml.htmlを用いたタグの除去方法

lxmlを使えば、タグの除去も超簡単です!

tostring()もしくはXPathを使ってできるのですね〜。

Python: lxmlの文字コード(tostring())

lxmlは文字コードを厳格に定義しており、入力時は必ず「unicode」化しておく必要があります。

これだけでも注意しておかなければならない点ですが、lxmlには、出力用のtostring()というメソッドを持っており、ここでも文字コードの注意が必要となってきます。

Python: lxmlを使って高速にaタグを取得する方法

PythonでXML/HTMLをパースする場合、

    DOMベースのBeautifulSoup



    SAXベースのlxml

の大きく2つが存在しています。

前者は以前このブログでも紹介していますので、ご覧下さい。DOMベースなので気軽にパース処理することができる反面、少々処理が重いです。

一方後者は、XPATHと呼ばれる問い合わせ言語(まぁ、SQLのようなもんです)をある程度理解する必要はありますが、メモリもそんなに使わず大変高速なため、phactoryではよく使っています。

今日はこのlxmlを使ってタグ抽出する方法を紹介します。


Django: 強制的にINSERTする方法

Djangoでは、save()を使ってレコードを作成したり更新したりすると思います。

オブジェクトが新規作成される場合はINSERT。そうでない場合はUPDATEとDjango側が自動的に切り分けてくれます。

これは、DBレイヤーでは、

  • オブジェクトが持つ主キーがDB中に存在しない=INSERT
  • オブジェクトが持つ主キーがDB中に存在する=UPDATE

ということをしてくれています。

 

でも、毎回必ずINSERTしたい場合はどうでしょう?

PythonでHTTP通信のレスポンスコードを取得する方法

pythonでHTTP通信する場合、urllib, urllib2あたりを使うことが多いと思います。

手軽で簡単ではあるのですが、どちらもレスポンスコードを取得することができません。

 

  • urllibについては、python2.6以上であれば、urlopen().getcode()メソッドでサポートされているが、それ以前のバージョンではサポートされていない。
  • urllib2では、2xx系以外は例外が発生するためレスポンスコード取得できない。

 

「レスポンスコードをどうしても取得したい!」という場合は、httplibを使いましょう。

Python: オブジェクトの型を調べる方法(type, isinstance)

Pythonで型を調べる方法といえばtypeですが、オブジェクトが★何なのか?★を調べる方法はたくさんあります。メソッドなのか?文字列なのか?クラス○●なのか?など。

型を調べる方法をマスターすることで汎用性の高い関数を実装することが可能となりますので、一度は理解しておきましょう。

Virtual Boxで固定IPを設定する方法

VirtualBoxを使って固定IPを設定してみましょう。

VirtualBox独自のDHCPサーバーを持っており、192.168.56.xxxのサブネットワークを形成しています。固定IP設定するには、まずこのDHCPサーバー機能を停止し、独自の固定IPを付与する必要があります。さらに、ホスト側のサブネットワークと通信できるように、例えばWinXPならブリッジネットワークにVirtualBoxのネットワークアダプタを追加して同じサブネットワーク内で通信できるようにする必要があります。

以下、ホストOSがWinXP、ゲストOSがDebian5の場合の設定方法です。

Djangoで使えるWYSIWYGエディタアプリ

WYSIWYGエディタは、近年のWebのシステム化において非常に重要なウェイトを占めるようになってきています。

Djangoでも、いくつかWYSIWYGエディタをエンベットできるアプリが登場してきています。

今日は、これらアプリについて簡単な紹介をしたいと思います。