2012/5/13pyramid_layoutと僕とときどきzope.interfacehirokiky13年5月16日木曜日
Pyramidでアプリ作る✤ 集計アプリを作りたい✤ panelやべぇ13年5月16日木曜日
panelって?✤ pyramid_layoutの一機能✤ 部分的なview, templateをテンプレートから指定する感じ13年5月16日木曜日
panel@panel_config(name=sidebar,renderer=sakila:templates/panels/sidebar.mako)def sidebar(context, request):return dict(me...
panelのテンプレート<div class="well sidebar-nav"><ul class="nav nav-list">% for menu, url in menus:<li><a href="${url}">${menu}</...
Template<html>## ...${panel(sidebar)}## ...</html>実際のTemplateからはpanelの名前を指定するだけ13年5月16日木曜日
最終的に<html>## ...<div class="well sidebar-nav"><ul class="nav nav-list"><li><a href="/">売上速報</a></li><li><a href="#">ランキング<...
panelやべぇ✤ 画面要素を自由に切り貼りできる✤ iGoogleのように画面を組み立てれるのでは夢のよう!!13年5月16日木曜日
できつぅあサイドバーpanel折れ線グラフpanel13年5月16日木曜日
実はこの前に一回panel諦めてviewで書いたrequest.contextから値とるようにしたらpanelで書けた13年5月16日木曜日
panel良い✤ 好きなだけ置くことができる✤ テンプレートから引数も取れる13年5月16日木曜日
panelつらい✤ NotFoundが投げれない(Templateの描画エラーになる)✤ 画面で共通の引数を渡すのが面倒くさい13年5月16日木曜日
折れ線グラフに必要な処理✤ リクエストパラメーターから集計期間を取る✤ リクエストパラメーターのバリデーションチェック✤ DBアクセス、折れ線グラフ集計 (ペアのリスト)✤ 折れ線グラフ化 (x, yなど分割して取れるようにする)✤ JSライブ...
折れ線グラフに必要な処理✤ リクエストパラメーターから集計期間を取る✤ リクエストパラメーターのバリデーションチェック✤ DBアクセス、折れ線グラフ集計 (ペアのリスト)✤ 折れ線グラフ化 (x, yなど分割して取れるようにする)✤ JSライブ...
request.context.summaryclass SakilaResource(object):# ...@propertydef linechart(self):c = DBSession.query(sql.func.date(Pa...
panel@panel_config(name=linechart,renderer=sakila:templates/panels/linechart.mako)def line_chart(context, request, renderT...
( ˘⊖˘) 。o(待てよ✤ 折れ線グラフで例えば日次、月次、年次のグラフを切り替えたい✤ Highchartsだけでなく、その他のJSライブラリにも切り替えたい13年5月16日木曜日
▂▅▇█▓▒░(ω)░▒▓█▇▅▂@panel_config(name=linechart,renderer=sakila:templates/panels/linechart.mako)def line_chart(context, requ...
zope.interface✤ まずInterfaceを定めて、そこにあとから実装を付ける✤ Adaptationしたい13年5月16日木曜日
もさくIResourceILinechartIRendererResourceDailyLinechartLinechartHighchartsRenderer13年5月16日木曜日
もさくlistILinechartIHighchartsListLinechartLinechartHighcharts13年5月16日木曜日
例えばこんなpaneldef linechart(context, request, renderTo=container, type=‘daily’):highcharts.need()reg = request.registry.getAd...
あとzope.interfaceは隠したい✤ zope.interfaceは隠すとお行儀がいいらしい✤ 利用者(アプリ開発者)にはapiだけ提供する✤ 開発者(ライブラリ開発者)は内部でzope.interfaceを使う✤ まぁzope.int...
妄想色々@tochart_config(daily.linechart.highcharts,chart_type=linechart,chart_backend=highcharts)@tochart_config(‘daily.linech...
やってるとこです✤ MySQLのサンプルデータベース「sakila」を集計していますのよ✤ https://github.com/hirokiky/aggregating_sakila13年5月16日木曜日
Upcoming SlideShare
Loading in …5
×

pyramid_layoutと僕と、ときどきzope.interface

638 views

Published on

pyramid_layoutのpanelとは、どのようなものか。どう使ったか。
あと、zope.interfaceで模索したことについて。
LT。

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

  • Be the first to like this

No Downloads
Views
Total views
638
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

pyramid_layoutと僕と、ときどきzope.interface

  1. 1. 2012/5/13pyramid_layoutと僕とときどきzope.interfacehirokiky13年5月16日木曜日
  2. 2. Pyramidでアプリ作る✤ 集計アプリを作りたい✤ panelやべぇ13年5月16日木曜日
  3. 3. panelって?✤ pyramid_layoutの一機能✤ 部分的なview, templateをテンプレートから指定する感じ13年5月16日木曜日
  4. 4. panel@panel_config(name=sidebar,renderer=sakila:templates/panels/sidebar.mako)def sidebar(context, request):return dict(menus=[(u速報, request.route_url(home)),(uランキング, #),])13年5月16日木曜日
  5. 5. panelのテンプレート<div class="well sidebar-nav"><ul class="nav nav-list">% for menu, url in menus:<li><a href="${url}">${menu}</a></li>% endfor</ul></div><!--/.well -->sidebar関数の返り値がpanelのテンプレートに渡る13年5月16日木曜日
  6. 6. Template<html>## ...${panel(sidebar)}## ...</html>実際のTemplateからはpanelの名前を指定するだけ13年5月16日木曜日
  7. 7. 最終的に<html>## ...<div class="well sidebar-nav"><ul class="nav nav-list"><li><a href="/">売上速報</a></li><li><a href="#">ランキング</a></li></ul></div><!--/.well -->## ...</html>13年5月16日木曜日
  8. 8. panelやべぇ✤ 画面要素を自由に切り貼りできる✤ iGoogleのように画面を組み立てれるのでは夢のよう!!13年5月16日木曜日
  9. 9. できつぅあサイドバーpanel折れ線グラフpanel13年5月16日木曜日
  10. 10. 実はこの前に一回panel諦めてviewで書いたrequest.contextから値とるようにしたらpanelで書けた13年5月16日木曜日
  11. 11. panel良い✤ 好きなだけ置くことができる✤ テンプレートから引数も取れる13年5月16日木曜日
  12. 12. panelつらい✤ NotFoundが投げれない(Templateの描画エラーになる)✤ 画面で共通の引数を渡すのが面倒くさい13年5月16日木曜日
  13. 13. 折れ線グラフに必要な処理✤ リクエストパラメーターから集計期間を取る✤ リクエストパラメーターのバリデーションチェック✤ DBアクセス、折れ線グラフ集計 (ペアのリスト)✤ 折れ線グラフ化 (x, yなど分割して取れるようにする)✤ JSライブラリ依存の形式に変換✤ テンプレートに適切に値を与えて表示13年5月16日木曜日
  14. 14. 折れ線グラフに必要な処理✤ リクエストパラメーターから集計期間を取る✤ リクエストパラメーターのバリデーションチェック✤ DBアクセス、折れ線グラフ集計 (ペアのリスト)✤ 折れ線グラフ化 (x, yなど分割して取れるようにする)✤ JSライブラリ依存の形式に変換✤ テンプレートに適切に値を与えて表示request.contextアダプタ関数panel13年5月16日木曜日
  15. 15. request.context.summaryclass SakilaResource(object):# ...@propertydef linechart(self):c = DBSession.query(sql.func.date(Payment.payment_date).label(date),sql.func.sum(Payment.amount),).filter(self.conditions).group_by(date).all()return cユーザー入力から条件を取るプロパティ13年5月16日木曜日
  16. 16. panel@panel_config(name=linechart,renderer=sakila:templates/panels/linechart.mako)def line_chart(context, request, renderTo=container):highcharts.need()adapter = LinechartDataAdapter(request.context.linechart)options = daily_linechart_options(adapter.x, adapter.y,renderTo=renderTo)return {options: options,renderTo: renderTo}options, rendecToからHighchartsを表示13年5月16日木曜日
  17. 17. ( ˘⊖˘) 。o(待てよ✤ 折れ線グラフで例えば日次、月次、年次のグラフを切り替えたい✤ Highchartsだけでなく、その他のJSライブラリにも切り替えたい13年5月16日木曜日
  18. 18. ▂▅▇█▓▒░(ω)░▒▓█▇▅▂@panel_config(name=linechart,renderer=sakila:templates/panels/linechart.mako)def line_chart(context, request, renderTo=container):highcharts.need()adapter = LinechartDataAdapter(request.context.linechart)options = daily_linechart_options(adapter.x, adapter.y,renderTo=renderTo)return {options: options,renderTo: renderTo}何らかの指定によって色々変えたい13年5月16日木曜日
  19. 19. zope.interface✤ まずInterfaceを定めて、そこにあとから実装を付ける✤ Adaptationしたい13年5月16日木曜日
  20. 20. もさくIResourceILinechartIRendererResourceDailyLinechartLinechartHighchartsRenderer13年5月16日木曜日
  21. 21. もさくlistILinechartIHighchartsListLinechartLinechartHighcharts13年5月16日木曜日
  22. 22. 例えばこんなpaneldef linechart(context, request, renderTo=container, type=‘daily’):highcharts.need()reg = request.registry.getAdapter(request.context.linechart,IHighchart, type)options = reg.getOptions(renderTo=renderTo)return dict(options=options,renderTo=renderTo)panelがhighchartsに依存してる13年5月16日木曜日
  23. 23. あとzope.interfaceは隠したい✤ zope.interfaceは隠すとお行儀がいいらしい✤ 利用者(アプリ開発者)にはapiだけ提供する✤ 開発者(ライブラリ開発者)は内部でzope.interfaceを使う✤ まぁzope.interfaceわかりにくいし13年5月16日木曜日
  24. 24. 妄想色々@tochart_config(daily.linechart.highcharts,chart_type=linechart,chart_backend=highcharts)@tochart_config(‘daily.linechart.graphel’,chart_type=‘linechart’,chart_backend=‘graphel’)def daily(request, data)x = 1y = 2return [(x, y), (x, y)] chart = tochart(request, data, daily.linechart.highcharts)chart.render()https://gist.github.com/hirokiky/556764013年5月16日木曜日
  25. 25. やってるとこです✤ MySQLのサンプルデータベース「sakila」を集計していますのよ✤ https://github.com/hirokiky/aggregating_sakila13年5月16日木曜日

×