こんにちは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)
去年の僕のエントリ
|