こんにちはPython界のメタ奇行子aodagです。今年もアドベントカレンダーの季節がやってきました。
去年は、zope/plone関連ということで、zopeとwsgiのあいのこrepoze.bfgを紹介してましたね。
そして今年!Pyramid紹介する気満々だったのですが、よく考えれば、repoze.bfgがPyramidになったわけで、
これでは去年とネタがかぶってしまう!
ということで、今年のネタはもうメタでやるしかないですねと。
まずは、こちらにちょっとだけ目を通してほしい。
これらを踏まえて、Webフレームワークを作ってみた。
こちらがそれをつかったアプリケーションの例だ。
import webstruct
class application(webstruct.Application): # '/'
    db_url = "sqlite:///"
    templates = ['example_templates']
    @webstruct.view(template='index.html') # '/index'
    def index(req):
        return dict()
    class users(webstruct.Application): # '/users' 
        @webstruct.view(template="users.html") # '/users/index'
        def index(req):
            users = webstruct.query(User).all()
            return dict(users=users)
        @webstruct.view(template="show_user.html", pattern=r'(?P\w+)') # '/users/{username}'
        def show_user(req):
            username = req.urlvars['username']
            user = webstruct.query_one_or_404(User, username=username)
            return dict(user=user)
from sqlalchemy import *
class User(webstruct.Model):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    username = Column(String(255), unique=True)
    description = Column(UnicodeText)
webstruct.metadata.create_all()
webstruct.new_data(User, username='aodag', description=u"""aodag is creator of webstruct.
""")
webstruct.transaction.commit()
webstruct.run(application)
 
クラスや関数定義でURLを構築している。
一応それぞれのとこで、URLをコメントでつけておいた。
実際の動きはこちらのテストコード を見ると、なんとなく感じをつかめると思う
できごころだったんです。すいません。
いちおうここにソースおいてあるから、実装に興味がある人はどうぞ。
https://github.com/aodag/webstruct
さて、3日目にバトンを回さないといけないのですが、最近wsgiサーバーのmeinheldを作ったりなんだりしている尊敬すべき変態 mopemopeさんにお願いします。
関連リンク
- Pythonベース伝統的WebフレームワークZope2上のCMS Ploneの存在
 1日目 寺田さんのエントリ
- [Python]web2pyを使おう! 3日目 mopemopeさんのエントリ
 repoze.bfgで遊びながら、pasteの復習しつつ、buildoutの使い方に慣れる(1)
 去年の僕のエントリ
 
 
|