CherryPy + SQLAlchemy

凄く適当ですが出来ました。

from sqlalchemy import *
import base64
import cherrypy

engine = create_engine('sqlite:///test.db')
engine.echo = False
engine.echo_uow = False

class File(object):
    def __init__(self, name, file):
        self.file_id = None
        self.file_name = name
        self.file = file

class Root:
    def __init__(self):
        
        metadata = BoundMetaData(engine)
        
        self.files_table = Table('files', metadata,
                            Column('file_id', Integer, primary_key=True),
                            Column('file_name', String),
                            Column('file', Binary),
                           )
        metadata.create_all()
        self.session = create_session()
        mapper(File, self.files_table)

    def index(self):
        return """
        <html><body>
            <form action="upload" method="post" enctype="multipart/form-data">
            filename: <input type="file" name="myFile"/><br/>
            <input type="submit"/>
            </form>
        </body></html>
        """
    index.exposed = True

    def upload(self, myFile):
        self.session.save(File(name=myFile.filename, file=base64.b64encode(myFile.value)))
        self.session.flush()
        return """
        <html><body>
            myFile filename: %s<br/>
            myFile mime-type: %s<br/>
            The file has been saved.<br/>
            <img src=%s>
        </body></html>
        """ % (
            myFile.filename,
            myFile.type,
            "getImage"
        )
    upload.exposed = True
    
    def getImage(self):
        return base64.b64decode(self.session.query(File).get(1).file)
    getImage.exposed = True

cherrypy.root = Root()
cherrypy.server.start()

リファクタリングは明日やろうかと思います。
今日はまずは、動いたよーって事で。

かなり無理矢理な感がありますねぇ、
というかプログラム下手なのバレバレ
オブジェクト指向理解してないのバレバレ

まぁ名前空間ってことでいいや(最悪

こうするとアップロードした画像が表示されます。
画像のチェックとかまったくしてません。

例外も考えないとなぁ。
あと本来はautoload=Trueにしなきゃいけないので、
今後修正予定です。

疑問とやりたいこと

・今までアップロードされているデータすべてを表示
・getImageは一つのファイルじゃなくて、指定したファイルを受け取ってどーたらこーたら
base64化は必要なのかナゾ
・dbに画像を格納するってどうなの?

自分への課題(無期限)
・dbに入っている画像をすべて表示する。