1. Deform

    Patrick Gerken

    • http://www.do3.cc
    • http://www.github.com/do3cc
    • http://www.twitter.com/do3cc
  2. Deform

    Was passiert heute

    1. Was ist Deform
    2. Woraus besteht Deform
    3. Wie verwendet man es
    4. Wie verwendet man es in X
    5. Fragen?
  3. Teil 1: Was ist Deform

    Was ist Deform

    • Deform ist eine Form library
    • Es generiert HTML Forms und validiert Formular Eingaben
    • Geschrieben von Chris McDonough
    • Erfinder von Pyramid, Deform ist aber kein Teil davon
  4. Teil 1: Was ist Deform

    Was ist Deform nicht

    • Deform baut keine komplette HTML Seite
    • Deform persistiert keine Daten
  5. Teil 2: Woraus besteht Deform

    • Peppercorn
    • Colander
    • Deform
  6. Teil 2: Woraus besteht Deform

    Peppercorn

    plope.com/peppercorn
    • Komplexe Strukturen aus Formularen extrahieren
    • Ein Blogpost mit ein paar Ideen zu hierarchichen Formularen
    • Mit vollständiger Implementierung
  7. Teil 2: Woraus besteht Deform

    Peppercorn

    • Listen und Dicts benötigen Marker Inputs
      • <input name="__start__" value="my_list:sequence" />
      • <input name="__end__" value="my_list:sequence" />
  8. Teil 2: Woraus besteht Deform

    Colander

    • Schema Bibliothek um Strukturen zu definieren.
    import colander
    
    class Person(colander.MappingSchema):
        name = colander.SchemaNode(colander.String())
        age = colander.SchemaNode(colander.Integer(),
                                  validator=colander.Range(0, 200))
              
  9. Teil 2: Woraus besteht Deform

    Colander

    • Schema Bibliothek um verschachtelte Strukturen zu definieren.
    class People(colander.SequenceSchema):
        person = Person()
    class Schema(colander.MappingSchema):
        people = People()
    
    schema = Schema()
              
  10. Teil 2: Woraus besteht Deform

    Colander

    Schemas können auch dynamisch zur Laufzeit generiert werden.
  11. Teil 2: Woraus besteht Deform

    Deform

    • Kann HTML Formulare basierend auf Colander Schemas erzeugen
    • Kann Eingaben auf Basis des Schemas und mit Hilfe von Peppercorn validieren und mappen
    • Beherscht natürlich auch die Fehlerbehandlung
  12. Teil 2: Woraus besteht Deform

    Deform

    from deform import Form
    myform = Form(schema, buttons=('submit',))
    form = myform.render(appstruct)
    ============================================================
    controls = request.POST.items()
    
    try:
        appstruct = myform.validate(controls)
    except ValidationFailure, e:
        return {'form':e.render()}
              
  13. Teil 2: Woraus besteht Deform

    Deform

  14. Teil 3: Wie verwendet man Deform

    Wer weiss es?

    Kleiner reminder:

    • Schema mit Colander erstellen
    • Form Objekt mit deform erstellen
    • Leeres Form html mit form_ob.render() erstellen
    • Form html mit form_ob.render(appstruct) erstellen
    • Validierung mit my_form.validate(request_items)
    • Falls die Validierung fehlschlägt, die Exception hat eine render Methode dafür
  15. Teil 3: Wie verwendet man Deform

    Javascript und CSS

    • Deform forms sagen, welche css und js Resourcen sie benötigen
    • Deform verwendet javascript, das muss mittels deform.load() initalisiert werden.
  16. Teil 3: Wie verwendet man Deform

    Deformwidgets

    • Deform kommt mit den üblichen Verdächtigen und ein paar mehr Widgets mit.
    • Es gibt eine dedizierte Demo Seite mit allen Widgets und Quellcode
    • deformdemo.repoze.org
  17. Teil 3: Wie verwendet man Deform

    Kompliziertere Anpassungen

    • Man kann Widgets auch eigene Templates geben
    • Man kann einzelne Felder auch separat rendern:
      my_form.children[0].render() my_form.children['name'].render()
      Nur nicht Peppercorn Konventionen für Struktur vergessen!
  18. Teil 4: Wie verwendet man Deform

    Pyramid

    Keine Anpassungen notwendig
  19. Teil 4: Wie verwendet man Deform

    Flask

    • Derzeit nur eingeschränkt möglich, Parameter werden nicht sortiert gespeichert, und multiple Werte erstmal maskiert
  20. Teil 4: Wie verwendet man Deform

    Django

    • Derzeit nur eingeschränkt möglich, multiple Werte erstmal maskiert, Sortierung bin ich mir jetzt nicht sicher
  21. Teil 4: Wie verwendet man Deform

    Plone/Zope

    • Ab heute Abend voll möglich mit dem Egg collective.deform
  22. Teil 5: Fragen

    Fragen