Suche senden
Hochladen
What makes pyramid unique
•
8 gefällt mir
•
3,599 views
Atsushi Odagiri
Folgen
Melden
Teilen
Melden
Teilen
1 von 51
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Pylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイド
Nozomu Kaneko
はじめての CircleCI
はじめての CircleCI
Yosuke Mizutani
AsyncTask アンチパターン
AsyncTask アンチパターン
Hiroshi Kurokawa
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
Yuto Takei
RedmineとGitとスクラム
RedmineとGitとスクラム
Takashi Okamoto
Bot Framework v4 開発 Tips 2018-11
Bot Framework v4 開発 Tips 2018-11
Atsushi Yokohama (BEACHSIDE)
Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門
leverages_event
Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19
Hitoshi Kurokawa
Empfohlen
Pylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイド
Nozomu Kaneko
はじめての CircleCI
はじめての CircleCI
Yosuke Mizutani
AsyncTask アンチパターン
AsyncTask アンチパターン
Hiroshi Kurokawa
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
Yuto Takei
RedmineとGitとスクラム
RedmineとGitとスクラム
Takashi Okamoto
Bot Framework v4 開発 Tips 2018-11
Bot Framework v4 開発 Tips 2018-11
Atsushi Yokohama (BEACHSIDE)
Behatで行う、E2Eテスト入門
Behatで行う、E2Eテスト入門
leverages_event
Bundler kanazawa.rb meetup #2 2012/09/19
Bundler kanazawa.rb meetup #2 2012/09/19
Hitoshi Kurokawa
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
JavaScript.Next Returns
JavaScript.Next Returns
dynamis
Hello Java
Hello Java
Chihiro Ito
第5回勉強会
第5回勉強会
Mugen Fujii
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
Jenkins と groovy
Jenkins と groovy
Kohsuke Kawaguchi
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
Yuji Kubota
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡
Koichiro Sumi
Gradleどうでしょう
Gradleどうでしょう
Takuma Watabiki
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
Recruit Technologies
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
DQNEO
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Mugen Fujii
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
Takuma Watabiki
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
Masanori Ishigami
Java scriptの進化
Java scriptの進化
maruyama097
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
Takuma Watabiki
Play勉強会 第3回
Play勉強会 第3回
Daisuke Kasuya
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
kojiokb
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
77web
Weitere ähnliche Inhalte
Was ist angesagt?
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
JavaScript.Next Returns
JavaScript.Next Returns
dynamis
Hello Java
Hello Java
Chihiro Ito
第5回勉強会
第5回勉強会
Mugen Fujii
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
Jenkins と groovy
Jenkins と groovy
Kohsuke Kawaguchi
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
Yuji Kubota
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡
Koichiro Sumi
Gradleどうでしょう
Gradleどうでしょう
Takuma Watabiki
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
Recruit Technologies
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
DQNEO
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Mugen Fujii
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
Takuma Watabiki
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
Masanori Ishigami
Java scriptの進化
Java scriptの進化
maruyama097
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
Takuma Watabiki
Play勉強会 第3回
Play勉強会 第3回
Daisuke Kasuya
Was ist angesagt?
(20)
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
JavaScript.Next Returns
JavaScript.Next Returns
Hello Java
Hello Java
第5回勉強会
第5回勉強会
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Jenkins と groovy
Jenkins と groovy
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡
Gradleどうでしょう
Gradleどうでしょう
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
Java scriptの進化
Java scriptの進化
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
Play勉強会 第3回
Play勉強会 第3回
Ähnlich wie What makes pyramid unique
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
kojiokb
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
77web
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
Atsuhiro Kubo
120315 cloud founry_java_ironfoundry
120315 cloud founry_java_ironfoundry
Takayoshi Tanaka
Mvc conf session_5_isami
Mvc conf session_5_isami
Hiroshi Okunushi
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
Tomohiro Ichimura
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ
Yukei Wachi
Ruby way-openstack.keynote
Ruby way-openstack.keynote
Uchio Kondo
Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみた
Junya Hayashi
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
史識 川原
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
Introduction of Rhodes
Introduction of Rhodes
Hitoshi Kuroyanagi
Spring Boot概要
Spring Boot概要
af not found
Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
lalha
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
Naoto TAKAHASHI
Ähnlich wie What makes pyramid unique
(20)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
120315 cloud founry_java_ironfoundry
120315 cloud founry_java_ironfoundry
Mvc conf session_5_isami
Mvc conf session_5_isami
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ
Ruby way-openstack.keynote
Ruby way-openstack.keynote
Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみた
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Introduction of Rhodes
Introduction of Rhodes
Spring Boot概要
Spring Boot概要
Groovy base gradle_20130309
Groovy base gradle_20130309
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
Mehr von Atsushi Odagiri
みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
Atsushi Odagiri
async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022
Atsushi Odagiri
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
Atsushi Odagiri
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptools
Atsushi Odagiri
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptools
Atsushi Odagiri
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
Atsushi Odagiri
Pythonとパッケージングと私
Pythonとパッケージングと私
Atsushi Odagiri
Python3 移行への軌跡
Python3 移行への軌跡
Atsushi Odagiri
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016
Atsushi Odagiri
Sqlalchemy sqlの錬金術
Sqlalchemy sqlの錬金術
Atsushi Odagiri
Clack meetup #1 lt
Clack meetup #1 lt
Atsushi Odagiri
Pyramid入門
Pyramid入門
Atsushi Odagiri
パッケージングの今
パッケージングの今
Atsushi Odagiri
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
Bplt11 form alchemy
Bplt11 form alchemy
Atsushi Odagiri
Python3でwebアプリ
Python3でwebアプリ
Atsushi Odagiri
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europython
Atsushi Odagiri
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介
Atsushi Odagiri
World plonedaylt
World plonedaylt
Atsushi Odagiri
Mehr von Atsushi Odagiri
(20)
みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptools
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptools
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
Pythonとパッケージングと私
Pythonとパッケージングと私
Python3 移行への軌跡
Python3 移行への軌跡
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016
Sqlalchemy sqlの錬金術
Sqlalchemy sqlの錬金術
Clack meetup #1 lt
Clack meetup #1 lt
Pyramid入門
Pyramid入門
パッケージングの今
パッケージングの今
パッケージングの今と未来
パッケージングの今と未来
パッケージングの今と未来
パッケージングの今と未来
Bplt11 form alchemy
Bplt11 form alchemy
Python3でwebアプリ
Python3でwebアプリ
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europython
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介
World plonedaylt
World plonedaylt
What makes pyramid unique
1.
What Makes Pyramid
Unique! Django & Pylons Con 2012 aodag
2.
お前誰よ Atsushi Odagiri 株式会社ビープラウド http://twitter.com/aodag http://facebook.com/aodag
3.
Pyramid 仕事で使ってます 機能追加のパッチを投げました Pythonは1.5から。 Pyramidは、repoze.bfg1.2のころから。
4.
今日のお話 Pyramidって何? どんな特徴が? 実際どんな開発の仕方?
5.
Pyramidとは? Pylonsプロジェクトの Webアプリケーションフレームワーク Simple, Fast, Tested,
Documented No ORM, No Template Engine.
6.
Pyramidができるまで WSGI
Zope Pylons Repoze Pyramid
7.
Zopeから受け継いだもの Zope Component Architecture URLトラバーサル コンテキストベースのセキュリティ機構
8.
Pylonsから受け継いだもの WebOb, BeakerなどのWSGIコンポーネント URLパターンでのディスパッチ PasteScript (ただしPython3対応のために独自コマンドとして取 り込まれた)
9.
Pyramidの設計方針 仕組みをたくさん提供する ポリシーを押し付けない コンポーネント指向を直接見せない ことさらマイクロフレームワークを意識しない
10.
特徴的なしくみ デコレータベースの設定 さまざまなフック 例外ビュー
11.
デコレータベースの設定 ユニットテスト中に 副作用のあるデコレータ
が実行されると、 うっとおしいですよね?
12.
デコレータベースの設定 デコレータでビューなどを登録できる ただし、いきなり登録するのではなく Configurator.scan()をトリガーとして、初めて登録 される。
13.
さまざまなフック フレームワークの途中に処理を
割り込ませたいこと、 たくさんありますよね?
14.
さまざまなフック NewRequest Tween BeforeRender など
15.
例外ビュー 処理を打ち切って、
さっさと レスポンスを返したいこ と、 たくさんありますよね?
16.
例外ビュー 例外クラスごとにそれぞれビューを設定可能
17.
view predicate
同じ処理だけど、 Ajaxリクエストと ブラウザリクエストで テンプレートとか 変更したいよね?
18.
view predicate name
xhr context accept route_name header request_type path_info request_method custom_predicate request_param match_param
19.
view predicate @view_config(.... xhr=True,
renderer="json") @view_config(... xhr=False, renderer="index. html") def get_something(request): .... return dict(items=items)
20.
その他いろいろ シングルトンは存在しない 継承を多様しない
21.
開発を助けるコマンド群 pcreate pserve pshell prequest proutes pviews ptweens
22.
pcreate プロジェクトテンプレート(Scaffold)を展開する 開発開始時の土台を作成するツール ユーザー定義のプロジェクトテンプレートも作成で きる
23.
pserve Webアプリケーションを実行する --reloadオプションで、ファイル更新を検地してリ ロードしてくれる daemon化やモニタリングしてリスタートさせること も可能
24.
pshell Webアプリケーション実行時の環境を擬似的に作 成して、Pythonシェルを起動する
25.
prequest Webアプリケーションをオフラインで実行して結果 を確認できる
26.
proutes, pviews, ptweens アプリケーション構成を確認できる。 例えば: ●
URLパターンが実際にどのViewにマッチするの か ● 具体的なURLに対応するViewはどれか ● Tweenの実行順序はどのようになっているのか
27.
よく使うライブラリ、ツール ZODB3
distribute SQLAlchemy zc.buildout zope.sqlalchemy nose deform/colander alembic WebHelpers cliff
28.
有力なアドオン pyramid_tm pyramid_deform pyramid_debugtoolbar pyramid_exclog pyramid_zodbconn
29.
Pyramidベースのフレームワーク SubstanceD Kotti Cornice GroundHog MetaTG
30.
Pyramidでの開発 2つのベースアーキテクチャ ZODB + トラバーサル SQLAlchemy
+ URLディスパッチ
31.
ZODB + トラバーサル URLパターンとかいらない! URL
-> オブジェクトツリー URLでオブジェクト取得 例: URL : /great/bucho/show トラバーサル : root['great']['bucho']. showがない? showという名前のViewを呼ぶ
32.
Pyramidでの開発 環境構築 mkvirtualenv pycon2012 easy_install
pyramid pcreate -s zodb pycon2012 cd pycon2012 python setup.py develop
33.
Pyramidでの開発 追加のライブラリなど pyramid_deform deform_bootstrap colander pillow repoze.filesafe repoze.folder
34.
setup.pyに依存ライブラリを追加する install_requires = [ ... "pyramid_deform", "deform_bootstrap", "colander", "pillow", "repoze.filesafe", "repoze.folder",
35.
iniファイルにアドオンを追加する pyramid.includes =
.... pyramid_deform deform_bootstrap
36.
Pyramidでの開発 モデルを書く class Document(Persistent):
def __init__(self, name, contents): super(Document, self).__init__() self.__name__ = name self.contents = contents
37.
Pyramidでの開発 ビューを書く @view_config(context=Document, renderer='templates/document.pt') def
document_view(request): return dict()
38.
テンプレートを書く <html> <body> <h1>${context.__name__}</h1> <div> ${structure:context.contents} </div> </body> </html>
39.
pshellでモデルデータを登録 $ pshell development.ini >>>
from pyconjp2012.models import Document >>> doc = Document('test-document', 'this-is- document') >>> root[doc.__name__] = doc >>> doc.__parent__ = root >>> import transaction >>> transaction.commit()
40.
prequestで試してみよう $ prequest development.ini
/test-document <html> <body> <h1>test-document</h1> <div> this-is-document </div> </body> </html>
41.
pserveでWebアプリケーションを実行 pserve development.ini --reload
42.
ユーザー入力フォーム スキーマ定義 class AddDocumentSchema(c.Schema):
name = c.SchemaNode(c.String()) contents = c.SchemaNode(c.String(), widget=w.RichTextWidget())
43.
ユーザー入力(実装) class AddDocumentView(FormView):
schema = AddDocumentSchema() buttons = ('save',) def save_success(self, params): doc = Document(**params) self.request.context[doc.__name__] = doc doc.__parent__ = self.request.context return HTTPFound(self.request. resource_url(doc))
44.
pyramid_deform (表示) ${structure:form}
45.
Chameleonのテンプレートマクロ(定義) <html metal:define-macro="html"> <head> <!-- いろんなヘッダ
--> </head> <body metal:define-slot="main"> </body> </html>
46.
Chameleonのテンプレートマクロ(利用) <html metal:use-macro="base.macros.html"> <body metal:fill-slot="main"> ${form} </body> </html>
47.
まとめ 使う場合 言われるほど面倒ではない 難しいこともない 使い切る場合 手をいれれられる箇所が多いので、相対的に難し く感じるかも?
48.
(´ > ω < )こわくないよー
49.
Pyramidの今後 Pyramidベースのフレームワークが発展していく Python3対応?ああ、去年やってましたね。 テンプレートの標準サポートをなくす方針
50.
Pyramidの今後 管理アプリが欲しい! 今世界中のPylonsどもが実装している。
51.
参考URL The Pylons Project
Documentation http://docs. pylonsproject.org/en/latest/index.html Pyramid Documentation http://docs. pylonsproject.org/en/latest/docs/pyramid.html Defending Pyramid's Design http://docs. pylonsproject. org/projects/pyramid/en/master/designdefense. html
Jetzt herunterladen