トップ «前の日記(2005-11-26) 最新 次の日記(2005-11-28)» 編集

AOISAKURA 日記

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|04|05|06|07|08|09|12|
2013|02|03|05|06|08|09|10|11|
2015|11|
2016|12|
2017|03|08|
2018|01|03|06|
2019|05|07|09|10|
2020|01|02|03|
2021|03|07|
2022|06|
2023|11|

pixiv / twitter

bluesky / misskey / pawoo

※発信する情報は、個人の見解・意見であり、所属する会社の見解・意見ではありません。


2005-11-27 昼まで寝た [長年日記]

_ [python] turbogears(cherrypy) - DBに格納した画像を表示する

以下の方法で画像を単独で表示させることはできたけど、文章内に画像を表示させるのは一時的にキャッシュファイルにした方がいいのかなぁ。SQL Object FAQにもあったようにDBに突っ込む前にbase64でエンコード。でもぶっちゃけこれであってる確信全然無い、挙動把握できてないし。しかもtubogears(cherrypy)経由で画像の保存ができてないし。(tg-admin shellからやった)→解決

# ===== mode.py =====
class Image(SQLObject):
    data = StringCol()
    height = IntCol()
    width = IntCol()
    def _set_data(self, value):
        self._SO_set_data(value.encode('base64'))
    def _get_data(self):
        return self._SO_get_data().decode('base64')
#
#
# ===== controller.py =====
class Root(Controllers.Root):
    @turbogears.expose()
    def getFile(self):
        image = Image.select(orderBy=Image.q.id)[0]
        cherrypy.response.headerMap['Content-Type'] = 'image/jpeg'
        return image.data

で、cherryPyで作業ディレクトリのファイルを直接見せようとしてもうまくいかない、ガッデム。っていうかドキュメントどころかTipsすらまともに見付からない、生産性悪い気がしてきたしruby on railsに乗り換えようかなぁ。ぇ、ソース読まないならOSSに手を出すなって?ごもっとも...orz。

pythonでも@やら*やら使われてきたんじゃ自分がpythonを使っている理由「特殊記号が無い」が成り立たないし、くそー、とりあえずもう少し調べよう。

_ [python] よくよく考えれば直接見えるわけないじゃん

というわけでまぁ解決、っていうかそもそもの前提が間違えていた。「http://localhost:8080/test.jpg」みたいなURLで画像に大してアクセスできないか試していたけど、これじゃ"test.jpg"ってページを見に行ってるんだから見れなくて当り前じゃないか...、何考えていたんだろう自分(泣。

というわけで、引数を渡して任意の画像を指定するメソッドを作ってそのメソッドから画像データを投げさせるようにした。文章中に画像を張り付けたいときは、imgタグのsrcでそのメソッドを指定させれば画像は表示できた。

なんだか最初から最後まで考えれば当然の事なのにやってる最中はムキになって全然ちゃんと見ようとしていなかったorz。なんていうか全く無駄な事に馬力使ってしまった。まぁこれで問題も解決したし、今度からはもっと落ち着こう。

あ、作業ディレクトリはパスを直接書き出させた結果、プロジェクトのルート、つまり***-start.pyがあるディレクトリだった。

_ [python] turbogears(cherrypy) - uploader CGIからDBへ画像を格納する

アップローダからのデータの受け取りは一つ目のリンクのコードをコピー、でImageオブジェクトを生成する際に以下のように生成した。

@turbogears.expose()
def postFile(self):
    ...
    file = dataDict['myFile']
    hub.begin()
    # heightとwidthの値は適当、参照されていないけどとりあえずつっこんでるだけ
    image = Image(data=file.value, height=100, width=100)
    hub.commit()
    hub.end()
    ...

何を渡すべきかはFieldStorageのドキュメントを読んで確認した。pythonでは他にもcgiへのアクセス方法はあるけど、CherryPyのドキュメントではFieldStorageを使うことを勧めていたのでこれに則ってコーディングする。

やっとpythonがわかってきた感じ(遅、そもそも動的に型が決まるっていうのはまだ慣れないなぁ。基本がJavaなせいかも。

_ [python] yieldキーワード

やっと意味がわかったぞyield、イテレータに使われるジェネレータを作る為に(言葉の定義正しいのかしら...)使うのね。

以下の結果、「0 2 4 6 8」と出力される。役割がわかればすっきり、確かにこの方が自然ね、わかれば。

def myRange():
    index = 0
    while (index < 5):
        yield index*2
        index+=1
if __name__ == "__main__":
    for x in myRange():
        print x,