0
Pyramid
Python hack-a-thon 2010.11
aodag
自己紹介
小田切篤
@aodag
株式会社ビープラウドに勤めてます。
ちょっと前まで名古屋にいました
http://aodag.posterous.com/
http://blog.aodag.jp/
http://facebook.com/a...
Pyramid
Webアプリケーションフレームワーク
元は、repoze.bfg
2010/11/5
repozeプロジェクトからpylonsプロジェクトに移動
このときにPyramidに名称変更
Pyramidの最新バージョン 1.0a3
r...
インストール
$ virtualenv 
--no-site-packages 
--distribute 
newproject
$ cd newproject
$ bin/pip install pyramid
お約束のHello, World
from paste.httpserver import serve
from pyramid.configuration import Configurator
from pyramid.response i...
ちょっと追加
def details_view(context, request):
return Reponse('THis is detail')
.....
config = Configure(root_factory=get_root...
簡単な流れ
/
hello_world(root_object, request)
/hoge/foo/bar
hello_world(root_object['hoge']['foo']['bar'], request)
/hoge/foo/...
モデル定義
from persistent import Persistent
class Document(Persistent):
def __init__(self, title, contents):
self.title = titl...
データ追加
@view_config(name="add_document"):
def add_document(context, request):
params = request.params
doc = Document(title=...
モデル表示
@view_config(for_=Document,
renderer="template/document.pt")
def document_view(context, request):
return dict(title=...
テンプレート
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<h1>${title}</h1>
<p>${contents}</p>
</body>
</ht...
テスト(1)
def setup():
global config, context
config = Configure()
config.begin()
context = Folder()
def teardown():
config.e...
テスト(2)
@nose.with_setup(setup, teardown)
def test_hello():
import newproject.views.add_document
req = DummyRequest()
req.p...
テストを走らせる
noseを使う
$ bin/pip install nose
$ bin/noserunner newproject
情報源
http://docs.pylonshq.com/
http://pypi.python.org/pypi/pyramid/
http://docs.repoze.org/bfg/
コミュニティ
日本のコミュニティ
Pylons-ja
ちょっと開店休業状態
Google Group
http://groups.google.com/group/pylons-ja
Facebook Group
http://www.face...
ご清聴
ありがとうございました
Upcoming SlideShare
Loading in...5
×

Pyramid

2,718

Published on

Published in: Technology, Design
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,718
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
16
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Pyramid"

  1. 1. Pyramid Python hack-a-thon 2010.11 aodag
  2. 2. 自己紹介 小田切篤 @aodag 株式会社ビープラウドに勤めてます。 ちょっと前まで名古屋にいました http://aodag.posterous.com/ http://blog.aodag.jp/ http://facebook.com/aodag
  3. 3. Pyramid Webアプリケーションフレームワーク 元は、repoze.bfg 2010/11/5 repozeプロジェクトからpylonsプロジェクトに移動 このときにPyramidに名称変更 Pyramidの最新バージョン 1.0a3 repoze.bfgの最終バージョン1.3
  4. 4. インストール $ virtualenv --no-site-packages --distribute newproject $ cd newproject $ bin/pip install pyramid
  5. 5. お約束のHello, World from paste.httpserver import serve from pyramid.configuration import Configurator from pyramid.response import Response def hello_world(context, request): return Response('Hello world!') if __name__ == '__main__': config = Configurator() config.begin() config.add_view(hello_world) config.end() app = config.make_wsgi_app() serve(app, host='0.0.0.0')
  6. 6. ちょっと追加 def details_view(context, request): return Reponse('THis is detail') ..... config = Configure(root_factory=get_root) config.add_view(details_view, name='details') .....
  7. 7. 簡単な流れ / hello_world(root_object, request) /hoge/foo/bar hello_world(root_object['hoge']['foo']['bar'], request) /hoge/foo/bar/details details_view(root_object['hoge']['foo']['bar'],request)
  8. 8. モデル定義 from persistent import Persistent class Document(Persistent): def __init__(self, title, contents): self.title = title self.contents = contents
  9. 9. データ追加 @view_config(name="add_document"): def add_document(context, request): params = request.params doc = Document(title=params['title'], contents=params['contents']) context[name] = doc return HTTPFound(location=model_url(doc, request))
  10. 10. モデル表示 @view_config(for_=Document, renderer="template/document.pt") def document_view(context, request): return dict(title=context.title, contents=context.contents)
  11. 11. テンプレート <html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body> <h1>${title}</h1> <p>${contents}</p> </body> </html>
  12. 12. テスト(1) def setup(): global config, context config = Configure() config.begin() context = Folder() def teardown(): config.end()
  13. 13. テスト(2) @nose.with_setup(setup, teardown) def test_hello(): import newproject.views.add_document req = DummyRequest() req.params = {"name":"first-document", "title":u"テスト", "contents":u"内容"} info = add_document(context, req.params) assert info.location == 'http://example.com/first-document/' assert context['first-document'] is not None doc = context['first-document'] assert doc.title == u'テスト'
  14. 14. テストを走らせる noseを使う $ bin/pip install nose $ bin/noserunner newproject
  15. 15. 情報源 http://docs.pylonshq.com/ http://pypi.python.org/pypi/pyramid/ http://docs.repoze.org/bfg/
  16. 16. コミュニティ 日本のコミュニティ Pylons-ja ちょっと開店休業状態 Google Group http://groups.google.com/group/pylons-ja Facebook Group http://www.facebook.com/home.php? sk=group_157480254294440
  17. 17. ご清聴 ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×