インターネット上でビジネスをするなら必読だと思う本

2010-01-29
このエントリーをはてなブックマークに追加

特にFREEがお気に入りです。

両方ともクリス・アンダーソンの著作。「ロングテール」というキーワードの生みの親(厳密には違いますが)で、Wiredの編集長ですね。

読んでなにか答えが得られる本ではないと思いますが、インターネット上でビジネスをする、インターネットにかかわる仕事をする人たちにとっては必読の本ではないかと思います。

Pythonで文字列を桁埋め(パディング)

2010-01-21
このエントリーをはてなブックマークに追加

どの言語でもパディングのエントリ書いてる気がする。

>>> print ‘%(#)05d’%{‘#’:3}

「3」という数字を「0」で桁埋めして「5桁(00003)」にします。

Tags:

Djangoのテンプレートでカスタムフィルタを使う

2010-01-19
このエントリーをはてなブックマークに追加

例えばリストをループで複数行書き出す時とかは、奇数行と偶数行で背景の色を分けたかったりします。でも、Django標準だとそんなことできないっぽいんですよね。

ので、カスタムフィルタを使って実装してみました。

  1. アプリケーションディレクトリ(models.pyとかviews.pyが置いてあるトコ)に「templatetags」というフォルダを作成。
  2. そのフォルダの中に「__init__.py」と「hoge.py」を作成。「__init__.py」は白紙。
  3. 「hoge.py」に以下を記述
    from django import template
    register = template.Library()
    @register.filter(name=’getOddEven’)
    def getOddEven(_val):
        if _val % 2==0:
            return ‘even’
        else:
            return ‘odd’
  4. テンプレートファイル側に{% load hoge %}と記述。
  5. テンプレートのループの中で「{{ forloop.counter|getOddEven }}」と記述すると「odd/even」の文字列が返ってくる。

フィルタの使い方としては、「値|フィルタ」といういつもの書き方とおんなじです。

「forloop.counter」というのはテンプレート内でfor文を使ったときに内部で持っている値です。サンプルを見るとわかりやすいかな。

{% for item in list %}
{{ forloop.counter }},
{% endfor %}

これで、1,2,3,,,,と表示されます。1から始まる序数ですね。「django/template/defaulttags.py」を見ていただくと、他にもいろいろな値を持っています。これは便利。

で、あとはその序数をカスタムフィルタに渡してあげればOKということです。

{% load hoge %}
{% for item in list %}
<p class=”{{ forloop.counter| getOddEven}}”>{{ item }}</p>
{% endfor %}

恐るべしDjango、使いこなすまでの道のりは長い。。。

Tags: ,

Pythonで文字列を暗号化

2010-01-14
このエントリーをはてなブックマークに追加

暗号化といいますか、実はMD5のハッシュ値です。

import hashlib
暗号化された文字列=hashlib.md5(‘暗号化する前の文字列’).hexdigest()

これだけです。

ハッシュ関数は一方向要約なので複合はできません(と思っていますが、できるのかなぁ)。

Tags:

Djangoでファイルをダウンロードさせる方法

2010-01-12
このエントリーをはてなブックマークに追加

Webアプリケーションにとって、ファイルのダウンロードはたいていのケースで要求される機能ではないでしょうか。ハセテツもいろいろなプロジェクト、言語をこなしてきましたが、すべての状況で要求されてきたと思います。

で、Python/Djangoの例です。

def download_file(request):
    from django.http import *
    response = HttpResponse(open(‘/path/to/downloadfile’,’rb’).read(), mimetype=’ダウンロードさせるファイルのMIME type’)
    response[‘Content-Disposition’] = ‘filename=クライアントに表示させるファイル名’
    return response

これだけです。

まぁファイルサイズを追記すべきというのは至極ごもっともで、必要に応じて「Content-length」や「Content-type」を追加していただければと思います。

Tags: ,