ほんじゃらねっと

ダイエット中プログラマのブログ

2009-01-01から1年間の記事一覧

Djangoでカスタムログインチェック

djangoでユーザーがログイン済かどうかをチェックする場合は通常 @login_required デコレータを使用するけど、 IDとパスワード以外の要素でログインチェックしたり、未ログインのユーザーを独自のログイン画面に遷移させる 場合は、カスタマイズしたデコレー…

lxmlでHTMLページタイトル取得

一応動くサンプル。あんまりテストしてないので、取得できないパターンはあるかも。 覚えておきたいのはxpathの設定方法で、 どうやら //head/title/text() と書くとたまにうまくタイトルが取得できない場合があるようで、 そんな場合でも //title/text() と…

正規表現で引用符を検索する

TumblrのRSS解析を試みていて、そこでQuote登録した文字列を検索して変換しようとしたところ、苦労したのでメモ。 RSSのソースを見たところ、引用した部分は二重引用符で囲まれているようだったので、普通にダブルクオートで検索してみたけどうまくヒットし…

モデルクラスのobjectsにメソッドを追加する

from django.db import models class UserAlertManager(models.Manager): def additional_method(self): "追加するメソッド" ... class UserAlert(models.Model): user = models.ForeignKey(User) ... objects = UserAlertManager() これで、下記のように追…

DjangoとPILで画像のフォーマットを取得

画像を外部URLから取得する際に画像フォーマットが分からない場合、下記の方法で取得できた。 Python Imaging LibraryとDjangoを使った方法。 import urllib from PIL import Image from django.core.files.base import ContentFile image_url = "画像ファイ…

tinyurlやbitlyのURLから元のURLを取得する

各サービスのAPIでも取得できるようだけど、一応こんな方法でもできた、ということで。 import urllib2 def get_real_url(url): r = None try: r = urllib2.urlopen(url) except: pass if r: url = r.geturl() return url long_url = get_real_url("短縮URL"…

python-bitlyとpython-twitterを使ってTwitterにポストする

Honjalaに新規登録されたブックマークをTwitterに自動投稿するスクリプトを書いた。 ブログやブックマークをTwitterに自動投稿する機会は今後もありそうなのでメモ。 準備 Twitterとbitlyにアカウントをあらかじめ作成しておく。 PythonからTwitter APIを利…

jQueryでリスト・テーブル操作 - 行の上下移動

ここ数件のプロジェクトでリストやテーブルの行追加、削除やソート、上下移動などの処理を書く事があったので、メモしておく。 今回は行の上下移動。 リストの各行に「上へ」「下へ」というボタンなりリンクなりアイコンなりを配置しておき、それをクリック…

nginx+fastcgi+djangoの環境を構築

新しい開発環境を構築するにあたり、またApacheとmod_pythonで構築するのもアレだな、ということで流行のnginxを試してみた。 だいたいの情報は、 nginxホーム http://nginx.net/ NginxJa http://wiki.nginx.org/NginxJa nginx 一人 nginx 勉強会 第一回 ngi…

入力確認画面でchoicefieldやmodelchoicefieldの値をラベル表示する

フォーム入力後の確認画面で入力内容を表示する場合、 form.フィールド名.data で入力値を取得できるようなんだけど、choicefieldやmodelchoicefieldを表示した場合は dataにpk値が入っているようで、これを入力画面と同じラベル名で表示したい。 簡単に実現…

三項演算子の使い方

毎回忘れて探し回るので、ここに書いておく value = then_value if predicate else else_value こちらより http://www.shido.info/py/python10.html

文字列のリストを扱うカスタムフォームフィールドを作成する

Djangoのformsに含まれるChoiceFieldやMultipleChoiceFieldだと、 choicesが必須なので、あらかじめ用意されたデータしか入力できない。 既存のデータではなく、タグやasinなどの文字列をWeb画面上で複数入力なり選択なりし、 それを文字列のリストとして処…

リバースプロキシを使って1つのIPアドレスで複数ドメイン(djangoアプリ)とSSLを使えるようにする

IPアドレスを増やさずにドメインベースで複数のドメインを運用しつつSSLを使えないかと 調べたところ、Apacheだけでは無理だけどリバースプロキシを使えば何とかなりそうだったので、やってみた。 元々 Apache + mod_python + SSL でDjangoアプリを運用して…

Google App Engine + app-engine-patchでCPU時間を短縮する

本サーバのログを見ていたらCPU警告だらけになっていたので、チューニングして効果のあったものを記録していく。 参考にしたページ Google App Engineを高速化する3つのtips http://mattn.kaoriya.net/software/lang/python/20080526182049.htm ディスク<帯…

Thickboxで呼び出し元ウィンドウとデータのやりとり

他に方法が思いつかなかったので、親ウィンドウ側に関数を用意して それをThickbox側から呼び出す方法をとった。 iframe版しか考えていないので、ajax版の使い方だとまた別の方法があると思う。 parent.html <head> ... <script type="text/javascript" src="jquery-1.3.1.min.js"></script> <link rel="stylesheet" href="thickbox.css" type="text/css" /> </link></head>

Google App Engine でのプリントデバッグ

import logging logging.debug(form_data)

指定ディレクトリの内容を再帰的に削除

また使いそうなので記録。指定ディレクトリ内の.svnやらCVSやらを一括削除するためのスクリプト。 バグがあるかもしれないので、削除処理をコメントにして削除対象を確認できるようにしておく。 recursive_delete.py # -*- coding: utf-8 -*- import os impo…

lxmlで日本語のWebページのタイトルを取得する

日本語が化けて大変苦労したのでメモ。 結論として、XML(またはHTML)を解析する前にunicode関数に通しておく、 ということで良いのかな? 相変わらず文字コード関連はよく分からない。 from urllib import urlopen from lxml import etree html = urlopen(…

置換処理の置換後の文字列の代わりに関数を指定する

今後も使えそうなのでメモ。 import re from django.core.exceptions import ObjectDoesNotExist from sample.web.models import WebPage PATTERN = r'<a href="%(dummy_url)s" >%(real_url)s</a>' HTML_TEMPLATE = re.compile(r"((http|https)://[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)"…