Kotti: Eine moderne und schlanke Plone-Alternative auf Basis von Pyramid und SQLAlchemy1. Ich
Zope und Plone-
Entwickler
9 Jahre
”Power-Entwickler”
Kotti #PloneKonf 1
8. Plones Stärken
Plone bricht Versprechen
WTF?
Plone??!
Kotti #PloneKonf 8
9. Plones Stärken
Plone bricht Versprechen
einfach
lesbar
expressiv
Love hurts
Kotti #PloneKonf 9
10. Plones Stärken
Community!!
Anzüge
Krawatten
PANTS
Kotti #PloneKonf 10
11. Plones Stärken
Community!!
international
freundschaftlich
professionell
Kotti #PloneKonf 11
12. Plones Stärken
Flexibilität
Erweiterbarkeit
Plone sagt ja wo andere
geht nicht sagen
Kotti #PloneKonf 12
13. Plones Stärken
Anpassen through the
web
sehr interessant für Bastler
und Communities
uninteressant für mich
Kotti #PloneKonf 13
14. Plones Stärken
Plone Core hat viele
Features out of the box
Kotti #PloneKonf 14
15. Plones Stärken
viele freie Add-Ons
nur ein kleiner Teil gut
programmiert und
gewartet
Kotti #PloneKonf 15
16. Plones Stärken
Plones Killer-Features
Object File System (OFS)
Rechte, Rollen, Gruppen
Workflows
Kotti #PloneKonf 16
21. Plones Schwächen
verschiedene
konkurrierende
Technologien
[more than] only one way
to do it
Kotti #PloneKonf 21
22. Plones Schwächen
Code kompliziert
zu eifriges Adaptieren
neuer Technologien
Zope 3 und Component
Architecture
Kotti #PloneKonf 22
27. Pyramid
Stärken gegenüber Zope
Pythonic
fits your brain
Kleiner Kern
Ausgezeichnete Doku
Kotti #PloneKonf 27
29. Pyramid
SEXY
Kotti #PloneKonf 29
30. Pyramid
Basis für allerlei
Anwendungen
nicht nur CMS
gut für komplexe
Anwendungen
Kotti #PloneKonf 30
31. Pyramid
Zope-Wurzeln
vgl. Plone Killer-Features
OFS (eigtl Traversal)
Rechte, Rollen, Gruppen
Workflows
Kotti #PloneKonf 31
32. Pyramid
Pyramid hat viele weitere
Komponenten die ein
CMS braucht
Kotti #PloneKonf 32
33. Pyramid
solider Erweiterungs-
Mechanismus
pyramid.includes =
pyramid_debugtoolbar
pyramid_tm
Kotti #PloneKonf 33
34. Pyramid
Internationalisierung:
pyramid.i18n
Kotti #PloneKonf 34
35. Pyramid
Templates und
Customization:
Chameleon (ZPT)
pyramid.asset
Kotti #PloneKonf 35
36. Pyramid
Rechte, ACLs, Gruppen:
pyramid.security
Kotti #PloneKonf 36
37. Pyramid
keine Anwendung
kein CRUD
keine Datenbank
unopinionated
Kotti #PloneKonf 37
38. Pyramid
Ich will mein CMS mit
Pyramid machen!
WHAT DO?
Kotti #PloneKonf 38
39. Pyramid
für unser CMS fehlt noch
Verdrahtung
Konfiguration
Kotti #PloneKonf 39
40. Pyramid
für unser CMS fehlt noch
Persistenz
OFS
User Interface
Formulare
Kotti #PloneKonf 40
41. Pyramid
für unser CMS fehlt noch
Benutzer /
Benutzerverwaltung
Control Panel
Schnittstelle für Add-Ons
Kotti #PloneKonf 41
42. Kotti
genau diese Dinge liefert
Kotti #PloneKonf 42
43. Kotti ♥ Pyramid
schließt die Lücke zw.
Pyramid und CMS
ist Framework und out of
the box CMS, wie Plone
Kotti #PloneKonf 43
44. Kotti ♥ Pyramid
nutzt bestehende
Pyramid-Mechanismen
voll aus
und Komponenten aus
Pyramid- und Python-
Community
Kotti #PloneKonf 44
45. Kotti ♥ Pyramid
wenig neue Konzepte
Pyramid-Entwickler
sollen möglichst
Bekanntes vorfinden
erbt Pyramids Stärken
Kotti #PloneKonf 45
46. Kotti ♥ SQLAlchemy
Kottis Datenbank
verwendet SQL
Datenbank
nicht ZODB
SQLAlchemy
Kotti #PloneKonf 46
47. Kotti ♥ SQLAlchemy
Kottis Datenbank
keine großen
Abstraktionen
SQLAlchemy API
abgesehen von Nodes
Kotti #PloneKonf 47
48. Kotti ♥ Twitter Bootstrap
Default Oberfläche
benützt Bootstrap
CSS, JavaScript
Responsive Design
dokumentiert, getestet
Kotti #PloneKonf 48
50. Kotti ♥ Colander und Deform
Default Formulare
basieren auf Deform
Schemas
Validierung
Widgets
Kotti #PloneKonf 50
51. Kotti ♥ Beaker
Kotti verwendet Beaker
für das Sessioning
Daten die vorübergehend
gespeichert werden
konfigurierbar
Kotti #PloneKonf 51
54. Kotti ♥ YOU
Kotti konfiguriert alle
diese Komponenten
damit du es nicht
machen mußt
Batteries included
Kotti #PloneKonf 54
56. Kottis Design
möglichst einfach
kein Big Design
konzentriert sich auf:
(kleinen) Core
Erweiterbarkeit
Kotti #PloneKonf 56
57. Kottis Nodes API
root = get_root()
dict-like
root['hey'] = Document(...)
root['hey'].title = u'Ho'
del root['hey']
root.values() # usw.
Kotti #PloneKonf 57
58. Kottis Nodes API
Reihenfolge (ordered)
child = root.children.pop(1)
root.children.insert(0,child)
alle Content-Typen
(Dokumente, Files, …)
sind Nodes Kotti #PloneKonf 58
59. Kottis Benutzerdatenbank API
P = get_principals()
P['daniel'] = {
'name': 'daniel',
'title': 'Daniele',
'password': 'woops',
}
Kotti #PloneKonf 59
60. Kottis Schnittstellen für Add-Ons
kotti.includes
kotti.populators
kotti.available_types
kotti.asset_overrides
Kotti #PloneKonf 60
61. Kottis Templates
Master-Templates
Unterschied zwischen
Öffentliche Oberfläche
Redakteurs-Oberfläche
Kotti #PloneKonf 61
62. Kottis Templates
leicht austauschbar
z.B. nur öffentliche
Oberfläche
oder nur Dokument-
Template
Kotti #PloneKonf 62
63. Kottis Templates
Kotti Slots (Viewlets)
def render_hello(context, request):
return u'Hello, World!'
from kotti.views.slots import *
register(
RenderLeftSlot, None, render_hello)
Kotti #PloneKonf 63
65. Kottis Vergangenheit
existiert seit > 1 Jahr
ich verwende es
ein großes Projekt
ein kleines Projekt
andere Projekte, Websites
Kotti #PloneKonf 65
66. Kottis Vergangenheit
Add-Ons
kotti_calendar
kotti_twitter
kotti_contactform
kotti_analytics
Kotti #PloneKonf 66
67. Kottis Gegenwart
Sprint!
WYSIWYG Hochladen von
Dateien und Bildern
kotti_blog
kotti_whatever
Kotti #PloneKonf 67
68. Ciao
github.com/Pylons/Kotti
kottidemo.danielnouri.org
#kotti auf Freenode
@dnouri
daniel.nouri@gmail.com
Kotti #PloneKonf 68