SlideShare a Scribd company logo
1 of 10
Download to read offline
Web-Development 2010:
Server-side or Client-side?
Lightning Talk @ PyCologne 2010
        Köln, 17.April 2010
    #python #javascript #pybar
   Thomas Koch (@tomy_koch)
(a short) Web Development History
• 199x: Common Gateway Interface
   import cgi
   form = cgi.FieldStorage()
   print “content-type: text/html”
   print “<H1>Hello %s</H1>“ % form["name"].value
• 200x: Web Tools & Frameworks (in Python)
   – Libraries (e.g. Templates & Form handling!)
       • Cheetah, Kid, Genshi, Bottle, …                Server-Side Coding
         s. http://wiki.python.de/Template-Engines
   – Frameworks: Django, TurboGears, Zope, etc.
       • s. http://wiki.python.org/moin/WebFrameworks                ???
• 2005+ Ajax Technology (XmlHttpRequest+JavaScript)
   – Lots of JavaScript Tools,Libs,Frameworks coming up …
       • Prototype, Scriptacolous, MooTools etc.
       • YUI, jQuery, Dojo, ExtJS …
                                                        Client-Side Coding
• 2010 ???
Server-side or Client-side?
• Wrong question! Must do both (somehow)…
  How to efficiently develop Server- and Client-side?

  Assumption: We‘re coding in Python on the server ,-)
   (using at least some framework …)
  Option1: Become JavaScript-Expert (no way!)
  Option2: Use JavaScript-Framework (even better)
  Option3: seek for holy grail…
Some Attempts …
• GWT: Google Web Toolkit
  – Army of Java Developers don‘t wanna code JS
  – Provide Java-based framwork and generate JS
• Python: PyJamas http://pyjs.org/
  – Pyjamas is a port of Google Web Toolkit to Python
     You can write web applications in python
  – pyjamas involves the translation
    of the application and libraries
     (including UI widgets and DOM
     classes) to Javascript.
  – version: Pyjamas 0.6 / 08-2009
Dajax: Django+Ajax
• a powerfull tool to easily and super-fastly develop asynchronous
  presentation logic in web applications using python …
  … and almost no lines of JS source code.
• supports up to four of the most popular JS frameworks:
       Prototype, jQuery, Dojo and mootols

Dajax maps client-side JS call
to server-side python method!


• Version: 0.8.4 – 03-22010
• autor: @jorgebastida
• Web: http://dajaxproject.com/
Dajax: Example
Python Code
     from dajax.core import Dajax

     def multiply(request, a, b):
       dajax = Dajax()
       result = int(a) * int(b)
       dajax.assign('#result','value',str(result))
       return dajax.json()

JavaScript Code
<script src="/dajaxice/dajaxice.core.js" type="text/javascript" />

function calculate() {
  Dajaxice.examples.multiply('Dajax.process',{'a':$('a').value,'b':$('b').value})
Dojango = Dojo + Django
• What?
  – Dojango is a reusable django application that helps
    you to use the client-sideframework dojo within your
    django project
  – … makes the development of rich internet applications
    in combination with dojo more comfortable


• Version: 0.4.6 / 11-2009
• Autor: @tklipstein
• Web: http://code.google.com/p/dojango/
About Dojo
• Dojo = Ajax Development Framework
    – open-source JavaScript toolkit for frontend development
    – allows to shorten the timespan between idea and implementation
    – cut-down development costs, achieve great results
• Features
    –   Supports development of highly interactive web applications
    –   Various basic widgets like Trees, Menus, ListViews, Popups etc.
    –   Business-ready components like Grids and Charts
    –   Lots of add-ons for different purposes like Image Lightbox, animations etc.
• Community
    – Large user community
    – Used / Supported by Key Players (SUN, IBM etc.)

• Version: 1.4
• Website: http://dojotoolkit.org/
Dojango Features
• Form-Integration : django.forms  dojango.forms
   – maps django.forms.fields to dojo enhanced widgets
     (i.e. dojango.forms.fields extends django formfields)
• flexible dojo release configuration
   – aol, google cdn, dojo release 1.0/1.1/1.2/1.3 …
• Django ModelStore
   – using dojo.data.* with dojango.data.modelstore
• Dojango Datagrid
   – Integrate dojo data grid in django
• AppEngine support:
   – get dojango up on Google AppEngine.
Your Experience?
• Best Practices?
  – Server-Side Framework:
     self-written, django, gears … ?
  – Client-Side Framework:
     Simple prototype.js or Dojo, ExtJS,… ?
• Combination of
  frontend & backend
    what is the perfect couple?
  (especially for web-devel in python)

More Related Content

Viewers also liked

ReadWriteWeb's Top 5 Web Trends in 2009
ReadWriteWeb's Top 5 Web Trends in 2009ReadWriteWeb's Top 5 Web Trends in 2009
ReadWriteWeb's Top 5 Web Trends in 2009Richard MacManus
 
Web, Design, and UX Trends for 2008
Web, Design, and UX Trends for 2008Web, Design, and UX Trends for 2008
Web, Design, and UX Trends for 2008Jeremy Johnson
 
Web Design and Development I - 2008
Web Design and Development I - 2008Web Design and Development I - 2008
Web Design and Development I - 2008butest
 
The State of Front End Web Development 2011
The State of Front End Web Development 2011The State of Front End Web Development 2011
The State of Front End Web Development 2011Pascal Rettig
 
Web Technology Trends for 2008 and Beyond, March 08
Web Technology Trends for 2008 and Beyond, March 08Web Technology Trends for 2008 and Beyond, March 08
Web Technology Trends for 2008 and Beyond, March 08Richard MacManus
 
Influencers On IT & Tech 2009 Trends Predictions, By Trendsspotting
Influencers On IT & Tech 2009 Trends Predictions, By TrendsspottingInfluencers On IT & Tech 2009 Trends Predictions, By Trendsspotting
Influencers On IT & Tech 2009 Trends Predictions, By TrendsspottingTaly Weiss
 

Viewers also liked (7)

ReadWriteWeb's Top 5 Web Trends in 2009
ReadWriteWeb's Top 5 Web Trends in 2009ReadWriteWeb's Top 5 Web Trends in 2009
ReadWriteWeb's Top 5 Web Trends in 2009
 
Web, Design, and UX Trends for 2008
Web, Design, and UX Trends for 2008Web, Design, and UX Trends for 2008
Web, Design, and UX Trends for 2008
 
HTML5 and Web Trends in 2013
HTML5 and Web Trends in 2013HTML5 and Web Trends in 2013
HTML5 and Web Trends in 2013
 
Web Design and Development I - 2008
Web Design and Development I - 2008Web Design and Development I - 2008
Web Design and Development I - 2008
 
The State of Front End Web Development 2011
The State of Front End Web Development 2011The State of Front End Web Development 2011
The State of Front End Web Development 2011
 
Web Technology Trends for 2008 and Beyond, March 08
Web Technology Trends for 2008 and Beyond, March 08Web Technology Trends for 2008 and Beyond, March 08
Web Technology Trends for 2008 and Beyond, March 08
 
Influencers On IT & Tech 2009 Trends Predictions, By Trendsspotting
Influencers On IT & Tech 2009 Trends Predictions, By TrendsspottingInfluencers On IT & Tech 2009 Trends Predictions, By Trendsspotting
Influencers On IT & Tech 2009 Trends Predictions, By Trendsspotting
 

More from Thomas Koch

Einfache Heimautomatisierung auf dem Raspberry Pi mit Python
Einfache Heimautomatisierung auf dem Raspberry Pi mit PythonEinfache Heimautomatisierung auf dem Raspberry Pi mit Python
Einfache Heimautomatisierung auf dem Raspberry Pi mit PythonThomas Koch
 
CI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python CodeCI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python CodeThomas Koch
 
CI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und PythonCI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und PythonThomas Koch
 
Facettensuche mit Lucene und Solr
Facettensuche mit Lucene und SolrFacettensuche mit Lucene und Solr
Facettensuche mit Lucene und SolrThomas Koch
 
BSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtBSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtThomas Koch
 
Raspberry Pi und Python
Raspberry Pi und PythonRaspberry Pi und Python
Raspberry Pi und PythonThomas Koch
 
Einführung in Raspberry Pi und GPIO
Einführung in Raspberry Pi und GPIOEinführung in Raspberry Pi und GPIO
Einführung in Raspberry Pi und GPIOThomas Koch
 
Python-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipsePython-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipseThomas Koch
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzThomas Koch
 
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemEnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemThomas Koch
 
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...Thomas Koch
 
Volltextsuche mit Lucene und Solr
Volltextsuche mit Lucene und SolrVolltextsuche mit Lucene und Solr
Volltextsuche mit Lucene und SolrThomas Koch
 
PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011Thomas Koch
 
Getting Started with Dojo Toolkit
Getting Started with Dojo ToolkitGetting Started with Dojo Toolkit
Getting Started with Dojo ToolkitThomas Koch
 
Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008) Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008) Thomas Koch
 
Suche und PyLucene
Suche und PyLuceneSuche und PyLucene
Suche und PyLuceneThomas Koch
 

More from Thomas Koch (16)

Einfache Heimautomatisierung auf dem Raspberry Pi mit Python
Einfache Heimautomatisierung auf dem Raspberry Pi mit PythonEinfache Heimautomatisierung auf dem Raspberry Pi mit Python
Einfache Heimautomatisierung auf dem Raspberry Pi mit Python
 
CI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python CodeCI Signal Light in less than 100 Line of Python Code
CI Signal Light in less than 100 Line of Python Code
 
CI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und PythonCI-Ampel für Jenkins mit RaspberryPi und Python
CI-Ampel für Jenkins mit RaspberryPi und Python
 
Facettensuche mit Lucene und Solr
Facettensuche mit Lucene und SolrFacettensuche mit Lucene und Solr
Facettensuche mit Lucene und Solr
 
BSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemachtBSCW - Teamarbeit leicht gemacht
BSCW - Teamarbeit leicht gemacht
 
Raspberry Pi und Python
Raspberry Pi und PythonRaspberry Pi und Python
Raspberry Pi und Python
 
Einführung in Raspberry Pi und GPIO
Einführung in Raspberry Pi und GPIOEinführung in Raspberry Pi und GPIO
Einführung in Raspberry Pi und GPIO
 
Python-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und EclipsePython-IDEs - PyDev und Eclipse
Python-IDEs - PyDev und Eclipse
 
Pandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen EinsatzPandas und matplotlib im praktischen Einsatz
Pandas und matplotlib im praktischen Einsatz
 
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes ForschungsinformationssystemEnArgus – ein ontologiebasiertes Forschungsinformationssystem
EnArgus – ein ontologiebasiertes Forschungsinformationssystem
 
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
Wissenserschließung und –Modellierung: Ontologie vs. Volltextsuche am Beispie...
 
Volltextsuche mit Lucene und Solr
Volltextsuche mit Lucene und SolrVolltextsuche mit Lucene und Solr
Volltextsuche mit Lucene und Solr
 
PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011PyLucene@PyCon DE 2011
PyLucene@PyCon DE 2011
 
Getting Started with Dojo Toolkit
Getting Started with Dojo ToolkitGetting Started with Dojo Toolkit
Getting Started with Dojo Toolkit
 
Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008) Teamarbeit 2.0 (PTF 2008)
Teamarbeit 2.0 (PTF 2008)
 
Suche und PyLucene
Suche und PyLuceneSuche und PyLucene
Suche und PyLucene
 

Recently uploaded

Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 

Recently uploaded (20)

Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 

WebDev Lightning Talk (PyCologne 2010)

  • 1. Web-Development 2010: Server-side or Client-side? Lightning Talk @ PyCologne 2010 Köln, 17.April 2010 #python #javascript #pybar Thomas Koch (@tomy_koch)
  • 2. (a short) Web Development History • 199x: Common Gateway Interface import cgi form = cgi.FieldStorage() print “content-type: text/html” print “<H1>Hello %s</H1>“ % form["name"].value • 200x: Web Tools & Frameworks (in Python) – Libraries (e.g. Templates & Form handling!) • Cheetah, Kid, Genshi, Bottle, … Server-Side Coding s. http://wiki.python.de/Template-Engines – Frameworks: Django, TurboGears, Zope, etc. • s. http://wiki.python.org/moin/WebFrameworks ??? • 2005+ Ajax Technology (XmlHttpRequest+JavaScript) – Lots of JavaScript Tools,Libs,Frameworks coming up … • Prototype, Scriptacolous, MooTools etc. • YUI, jQuery, Dojo, ExtJS … Client-Side Coding • 2010 ???
  • 3. Server-side or Client-side? • Wrong question! Must do both (somehow)… How to efficiently develop Server- and Client-side? Assumption: We‘re coding in Python on the server ,-) (using at least some framework …) Option1: Become JavaScript-Expert (no way!) Option2: Use JavaScript-Framework (even better) Option3: seek for holy grail…
  • 4. Some Attempts … • GWT: Google Web Toolkit – Army of Java Developers don‘t wanna code JS – Provide Java-based framwork and generate JS • Python: PyJamas http://pyjs.org/ – Pyjamas is a port of Google Web Toolkit to Python You can write web applications in python – pyjamas involves the translation of the application and libraries (including UI widgets and DOM classes) to Javascript. – version: Pyjamas 0.6 / 08-2009
  • 5. Dajax: Django+Ajax • a powerfull tool to easily and super-fastly develop asynchronous presentation logic in web applications using python … … and almost no lines of JS source code. • supports up to four of the most popular JS frameworks: Prototype, jQuery, Dojo and mootols Dajax maps client-side JS call to server-side python method! • Version: 0.8.4 – 03-22010 • autor: @jorgebastida • Web: http://dajaxproject.com/
  • 6. Dajax: Example Python Code from dajax.core import Dajax def multiply(request, a, b): dajax = Dajax() result = int(a) * int(b) dajax.assign('#result','value',str(result)) return dajax.json() JavaScript Code <script src="/dajaxice/dajaxice.core.js" type="text/javascript" /> function calculate() { Dajaxice.examples.multiply('Dajax.process',{'a':$('a').value,'b':$('b').value})
  • 7. Dojango = Dojo + Django • What? – Dojango is a reusable django application that helps you to use the client-sideframework dojo within your django project – … makes the development of rich internet applications in combination with dojo more comfortable • Version: 0.4.6 / 11-2009 • Autor: @tklipstein • Web: http://code.google.com/p/dojango/
  • 8. About Dojo • Dojo = Ajax Development Framework – open-source JavaScript toolkit for frontend development – allows to shorten the timespan between idea and implementation – cut-down development costs, achieve great results • Features – Supports development of highly interactive web applications – Various basic widgets like Trees, Menus, ListViews, Popups etc. – Business-ready components like Grids and Charts – Lots of add-ons for different purposes like Image Lightbox, animations etc. • Community – Large user community – Used / Supported by Key Players (SUN, IBM etc.) • Version: 1.4 • Website: http://dojotoolkit.org/
  • 9. Dojango Features • Form-Integration : django.forms  dojango.forms – maps django.forms.fields to dojo enhanced widgets (i.e. dojango.forms.fields extends django formfields) • flexible dojo release configuration – aol, google cdn, dojo release 1.0/1.1/1.2/1.3 … • Django ModelStore – using dojo.data.* with dojango.data.modelstore • Dojango Datagrid – Integrate dojo data grid in django • AppEngine support: – get dojango up on Google AppEngine.
  • 10. Your Experience? • Best Practices? – Server-Side Framework: self-written, django, gears … ? – Client-Side Framework: Simple prototype.js or Dojo, ExtJS,… ? • Combination of frontend & backend  what is the perfect couple? (especially for web-devel in python)