repoze.who
pylonsのMLによると、AuthKitは廃止の方向で進むようで。
作者もphase outするって宣言しているし、ここはひとつrepoze.whoでも覚えておこうかなと週末触ってみた。
Authentication and Authorization with repoze.whoをみながらやってみたんだけど、あちこち端折ってあるので、ちょっと簡単には動かせなかった。
というわけでまたあとで。
The Definitive Guide to Pylonsの著者とAuthKitの作者が一緒なので本はAuthKitの利用を前提で書かれていて内容が古い感があるけど、テストのとことか文書化、デプロイメントのあたりはよく書かれているので、手元にあると重宝する。
AuthKitでSQLAlchemyを使う
pylons bookの19章を参照。
from simplesite.model import meta
meta.metadata.bind = meta.engine
をいまいちきちんと理解できてない。
追記 100130
model/meta.pyをみたら
"""SQLAlchemy Metadata and Session object"""
from sqlalchemy import MetaData
from sqlalchemy.orm import scoped_session, sessionmaker
__all__ = ['Session', 'engine', 'metadata']
# SQLAlchemy database engine. Updated by model.init_model()
engine = None
# SQLAlchemy session manager. Updated by model.init_model()
Session = scoped_session(sessionmaker())
# Global metadata. If you have multiple databases with overlapping table
# names, you'll need a metadata for each database
metadata = MetaData()
ってなってるだけだった。
SimpleSite Tutorial Part 3 (Pylons)
もう、自分でなんか作ったときにちゃんと読めばいいやって気分になってしまったので流し読み。
Chapter 19
- AuthKitの使い方
- Permission毎にテンプレートを変える
- Errorドキュメントをいじる
- YUI Rich Text Editorを使う
- Eggのビルド
ここまで読めばあとはなんかつくるだけ。というか作りたい物は決まっていて、文献管理システムをPylonsで書き直すのだ
SimpleSite Tutorial Part 2 (Pylons)
Chapter14のチュートリアルをやった。簡単なblogみたいなものを作っていく(コメントシステム、タグ、認証系まで)三部作なんだけど、一つの章が分量があるので疲れる。
- SQLAlchemyで一対多、多対多の書き方
- formencodeでカスタムバリデーションのつくりかた
- あと最後におまけ程度にcssいじり
The Definitive Guide to Pylons
makoでutf-8を埋め込みたいとき
そうしないとこんなエラーが出る。
CompileException: Could not read template using encoding of 'ascii'. Did you forget a magic encoding comment? in file
最初わからなかったけれど、あーそういうことねというメッセージだった。
pylonsのroutes.py
pylonsのRoutesがドキュメントみてもいまいちわからんとか思ってたんだけど、RoRのドキュメント読んだらさっくりと理解できそうな気がしてきたところで、routing.pyをいろいろいじってみたらなんとなく理解した感じ。
pylonsにはpaster shell
pylonsで対話的にモデルを操作したい場合にはdevelopment.iniのあるディレクトリで
paster shell
とすればよいらしい。modelっていう変数に色々入っているので
session = model.Session
mol = model.Mol
for m in session.query(mol).filter(mol.MW > 199):
print m
などとやるべしナ感じ。
pylonsはモデルだけいじりたいときにはどうすんの?
TurboGearsだとこんな感じでいけるじゃないですか?
pylonsはちょっとよく分からなくて結局
sqlite3 -separator , test.db ".import makeinu.csv test_table"
とやってしまった(なんじゃそりゃ)。
Elixirをさわってみた
SQLAlchemyにかぶせてActiveRecordとして扱えるらしいElixirを試してみた。チュートリアルを一通り。
面白かったのは継承っぽくかけるとこ。こんな感じでかける。
from elixir import *
metadata.bind = "sqlite:///test.db"
#metadata.bind.echo = True
class Artist(Entity):
using_options(inheritance='multi')
name = Field(Unicode(60))
def __repr__(self):
return '<Artist "%s">' % self.name
class Technoartist(Artist):
using_options(inheritance='multi')
def __repr__(self):
return '<TechnoArtist "%s">' % self.name
class Houseartist(Artist):
using_options(inheritance='multi')
def __repr__(self):
return '<HouseArtist "%s">' % self.name
class Dnbartist(Artist):
using_options(inheritance='multi')
def __repr__(self):
return '<Drum\'n\'BassArtist "%s">' % self.name
if __name__ == "__main__":
from model import *
setup_all()
create_all()
technasia = Technoartist(name=u"Technasia")
louievega = Houseartist(name=u"Louie Vega")
joeclaussell = Houseartist(name=u"Joe Claussell")
nutone = Dnbartist(name=u"Nu Tone")
omnitrio = Dnbartist(name=u"OmniTrio")
session.flush()
print "Artist.query.all()"
print Artist.query.all()
print "\nDnbartist.query.all()"
print Dnbartist.query.all()
Artistを探すと、サブクラスにあたるTechnoArtist,HouseArtist,Drum'n'BassArtistが探索される
Artist.query.all()
[<TechnoArtist "Technasia">, <HouseArtist "Louie Vega">,
<HouseArtist "Joe Claus sell">, <Drum'n'BassArtist "Nu Tone">,
<Drum'n'BassArtist "OmniTrio">]
Dnbartist.query.all()
[<Drum'n'BassArtist "Nu Tone">, <Drum'n'BassArtist "OmniTrio">]
チュートリアルによると、この先はSQLAlchemyのドキュメント読むのがいいんじゃねーかなと書いてあったので、読んでみる。
あと、このチュートリアルだけだとusing_optionsとかが分からないのでAPI Referenceも読むべしな感じ。
The Definitive Guide to Pylons


The Definitive Guide to Pylons