SlideShare a Scribd company logo
1 of 26
Download to read offline
Pluggable Applications
      DjangoCon 2009

       Nowell Strite
       Shawn Rider
Road Map




•  Background 
•  Current Approaches 
•  Our Use Case / Requirements 
•  A Proposed Solu=on 
•  Some Live Examples 
•  Q & A 
A little background



PBS manages several major internal sites:




                              and more…
A little background



And many of these use Django to some
               degree:
A little background
A little background
PBS needs Django



•  Serving a diverse array of sites 
•  Built on a diverse technical architecture 
•  Many repe==ve components desired by producers 
   and users 
•  Ease of implementa=on is crucial 
•  But highly specific implementa=on details and 
   goals are oIen more important to producers 
Reusable Apps Save the Day



The Reusable App design paKern helps us: 
  –  Easy to share func=onality with other projects 
  –  Quick to get features up and running 
  –  Possible to expand and enhance func=onality 
Reusable Apps Save the Day… Sort of…



The Reusable App design paKern has some 
  limita=ons 
•  Apps are expected to live at one URL  
   (e.g. hKp://example.com/comments/) 
•  Current conven=on of adding ‘extra_context’ 
   params are not sa=sfactory 
•  Conven=onal template replacement is not always 
   flexible enough  
Template Tags to the Rescue



Template Tags allow apps to expose func=onality 
     inside templates for other apps and site 
                   components 
Template Tags to the Rescue … Sort of…



But template tags are also limited: 
  –  Form pos=ng becomes complicated 
  –  Generic inser=on of data into page context can 
     be dangerous 
  –  Addi=onal logic, such as complex permissions 
     checks, are difficult to enforce or bypass via 
     generic template tags 
The Use Case: PBS TeacherLine Peer Connection


Peer Connection features:

1. Access to a robust database of curated resources
2. Community features to allow educators to share and
discuss these resources

Because discussion is so important in this setting, many
objects in Peer Connection support discussions.

Given that the purpose of the site is partially to learn to
use technology, a clean user experience is essential.
The Use Case: PBS TeacherLine Peer Connection


Our Requirements:

•  Sensible URLs that follow our patterns elsewhere on
the site
•  Allow discussions app to interact with other apps and
objects in expected ways
•  Allow posting of data and error handling in the same
location – no redirects to stand-alone pages to fix a
message post.
•  Flexibility to enforce permissions and other variations
of display in an ad-hoc way.
Our Solution: Make the Reusable App Pluggable



By making an app “pluggable” we gain some extra 
  features: 
  –  Apps can be presented at various URLs 
     throughout the site 
  –  Each presenta=on can define context in a clean, 
     DRY manner 
  –  Form pos=ng and error handling can happen in 
     the logical loca=on for the user 
The Use Case: PBS TeacherLine Peer Connection


       Two examples of how discussions appear in Peer
       Connection:




/community/network/pbs-staff/group/tl-technology/discuss/


                                                             /content/module/216/discuss/
The Use Case: PBS TeacherLine Peer Connection


       Two examples of how discussions appear in Peer
       Connection:




/community/network/pbs-staff/group/tl-technology/discuss/


                                                             /content/module/216/discuss/
The Use Case: PBS TeacherLine Peer Connection


       Two examples of how discussions appear in Peer
       Connection:




/community/network/pbs-staff/group/tl-technology/discuss/


                                                             /content/module/216/discuss/
The Use Case: PBS TeacherLine Peer Connection


                Content generated by the pluggable app:




                                                             /content/module/216/discuss/


/community/network/pbs-staff/group/tl-technology/discuss/
The Use Case: PBS TeacherLine Peer Connection


  Content required by the presenting app templates:




                                                             /content/module/216/discuss/


/community/network/pbs-staff/group/tl-technology/discuss/
Make it So




By making our discussions app pluggable, we solved our
problems and fulfilled our requirements.

       But what kind of work does it take to get there?
Make it So




Parts of Pluggable Apps
 •  Pluggable URL definition
 •  Pluggable application views definition
 •  Subclass / instantiation of Pluggable
    application
Pluggable URL Definition




from
pluggables
import
PluggableApp,
url,
include,
patterns

class
ComplaintsApp(PluggableApp):




urlpatterns
=
patterns('complaints.views.traditional',








url(r'^$',
'index',
name='complaints_index'),








url(r'^create/$',
'edit',
name='complaints_create'),








url(r'^(?P<complaint_id>d+)/edit/$',
'edit',

name='complaints_edit'),








url(r'^(?P<complaint_id>d+)/delete/$',
'delete',

name='complaints_delete'),




)
Pluggable Application Views Definition




def
index(request):




complaints
=
Complaint.objects.pluggable(request)




form
=
ComplaintForm()




template
=
request.pluggable.config.get('template’)




base_template
=
request.pluggable.config.get('base_template’)





return
render_to_response(template,
{








'complaints':
complaints,








'form':
form,








'base_template':
base_template,








},
context_instance=RequestContext(request))
Subclass / Instantiation of Pluggable Application


class
SillyWalkComplaintsApp(ComplaintsApp):




def
pluggable_config(self,
request,
walk_slug=None):








return
{'base_template':
'sillywalks/view.html'}





def
pluggable_view_context(self,
request,
walk_slug):








try:












sillywalk
=
SillyWalk.objects.get(slug=walk_slug)








except
SillyWalk.DoesNotExist:












raise
Http404








return
sillywalk





def
pluggable_template_context(self,
request,
walk_slug):








return
{'sillywalk':
request.pluggable.view_context}

complaints_app
=
SillyWalkComplaintsApp('sillywalks')
And Now For Something Completely Different




 Let’s see some live examples…
Thank You For Your Time



Code referenced in this presentation is available at:
          http://bit.ly/django-pluggables

                Nowell Strite
               Twitter: @nowells
             Email: nowell@strite.org

                  Shawn Rider
                 Twitter: @shawnr
          Email: shawn@shawnrider.com

More Related Content

What's hot

jQuery From the Ground Up
jQuery From the Ground UpjQuery From the Ground Up
jQuery From the Ground UpKevin Griffin
 
Take your drupal sites offline
Take your drupal sites offlineTake your drupal sites offline
Take your drupal sites offlineChris Ward
 
User Macros: Making Your Own Improvements to Confluence - Atlassian Summit 2012
User Macros: Making Your Own Improvements to Confluence - Atlassian Summit 2012User Macros: Making Your Own Improvements to Confluence - Atlassian Summit 2012
User Macros: Making Your Own Improvements to Confluence - Atlassian Summit 2012Atlassian
 
Applying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVC
Applying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVCApplying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVC
Applying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVCMohamed Meligy
 
Single Page WebApp Architecture
Single Page WebApp ArchitectureSingle Page WebApp Architecture
Single Page WebApp ArchitectureMorgan Cheng
 
ASP .NET MVC
ASP .NET MVC ASP .NET MVC
ASP .NET MVC eldorina
 
The Complementarity of React and Web Components
The Complementarity of React and Web ComponentsThe Complementarity of React and Web Components
The Complementarity of React and Web ComponentsAndrew Rota
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMconnectwebex
 
Let's Take Drupal Offline!
Let's Take Drupal Offline!Let's Take Drupal Offline!
Let's Take Drupal Offline!Dick Olsson
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentationivpol
 
React & Redux, how to scale?
React & Redux, how to scale?React & Redux, how to scale?
React & Redux, how to scale?KMS Technology
 
Architecting ASP.NET MVC Applications
Architecting ASP.NET MVC ApplicationsArchitecting ASP.NET MVC Applications
Architecting ASP.NET MVC ApplicationsGunnar Peipman
 
Cordova: Making Native Mobile Apps With Your Web Skills
Cordova: Making Native Mobile Apps With Your Web SkillsCordova: Making Native Mobile Apps With Your Web Skills
Cordova: Making Native Mobile Apps With Your Web SkillsClay Ewing
 
Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)ColdFusionConference
 
Building single page applications
Building single page applicationsBuilding single page applications
Building single page applicationsSC5.io
 

What's hot (20)

jQuery From the Ground Up
jQuery From the Ground UpjQuery From the Ground Up
jQuery From the Ground Up
 
Take your drupal sites offline
Take your drupal sites offlineTake your drupal sites offline
Take your drupal sites offline
 
Flux architecture
Flux architectureFlux architecture
Flux architecture
 
User Macros: Making Your Own Improvements to Confluence - Atlassian Summit 2012
User Macros: Making Your Own Improvements to Confluence - Atlassian Summit 2012User Macros: Making Your Own Improvements to Confluence - Atlassian Summit 2012
User Macros: Making Your Own Improvements to Confluence - Atlassian Summit 2012
 
Reactjs
Reactjs Reactjs
Reactjs
 
React introduction
React introductionReact introduction
React introduction
 
Applying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVC
Applying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVCApplying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVC
Applying Domain Driven Design on Asp.net MVC – Part 1: Asp.net MVC
 
Single Page WebApp Architecture
Single Page WebApp ArchitectureSingle Page WebApp Architecture
Single Page WebApp Architecture
 
ASP .NET MVC
ASP .NET MVC ASP .NET MVC
ASP .NET MVC
 
The Complementarity of React and Web Components
The Complementarity of React and Web ComponentsThe Complementarity of React and Web Components
The Complementarity of React and Web Components
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
 
Let's Take Drupal Offline!
Let's Take Drupal Offline!Let's Take Drupal Offline!
Let's Take Drupal Offline!
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
Rails review
Rails reviewRails review
Rails review
 
React & Redux, how to scale?
React & Redux, how to scale?React & Redux, how to scale?
React & Redux, how to scale?
 
Architecting ASP.NET MVC Applications
Architecting ASP.NET MVC ApplicationsArchitecting ASP.NET MVC Applications
Architecting ASP.NET MVC Applications
 
Cordova: Making Native Mobile Apps With Your Web Skills
Cordova: Making Native Mobile Apps With Your Web SkillsCordova: Making Native Mobile Apps With Your Web Skills
Cordova: Making Native Mobile Apps With Your Web Skills
 
Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)Crash Course in AngularJS + Ionic (Deep dive)
Crash Course in AngularJS + Ionic (Deep dive)
 
About Flux
About FluxAbout Flux
About Flux
 
Building single page applications
Building single page applicationsBuilding single page applications
Building single page applications
 

Viewers also liked

CodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comCodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comChristopher Cubos
 
The Agile Process - Taming Your Process To Work For You
The Agile Process - Taming Your Process To Work For YouThe Agile Process - Taming Your Process To Work For You
The Agile Process - Taming Your Process To Work For YouNowell Strite
 
Introduction To CodeIgniter
Introduction To CodeIgniterIntroduction To CodeIgniter
Introduction To CodeIgniterschwebbie
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgnitermirahman
 
Embracing Distributed Version Control
Embracing Distributed Version ControlEmbracing Distributed Version Control
Embracing Distributed Version ControlNowell Strite
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkRESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkBo-Yi Wu
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to PythonNowell Strite
 

Viewers also liked (8)

CodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comCodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.com
 
PHP & MVC
PHP & MVCPHP & MVC
PHP & MVC
 
The Agile Process - Taming Your Process To Work For You
The Agile Process - Taming Your Process To Work For YouThe Agile Process - Taming Your Process To Work For You
The Agile Process - Taming Your Process To Work For You
 
Introduction To CodeIgniter
Introduction To CodeIgniterIntroduction To CodeIgniter
Introduction To CodeIgniter
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgniter
 
Embracing Distributed Version Control
Embracing Distributed Version ControlEmbracing Distributed Version Control
Embracing Distributed Version Control
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkRESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP Framework
 
Introduction to Python
Introduction to PythonIntroduction to Python
Introduction to Python
 

Similar to Djangocon 09 Presentation - Pluggable Applications

H2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicH2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicSri Ambati
 
DSL (Domain Specific Language) for Maps Mashups
DSL (Domain Specific Language) for Maps MashupsDSL (Domain Specific Language) for Maps Mashups
DSL (Domain Specific Language) for Maps Mashupsaliraza786
 
PWA for PHP Developers
PWA for PHP DevelopersPWA for PHP Developers
PWA for PHP DevelopersBen Marks
 
Intro To Django
Intro To DjangoIntro To Django
Intro To DjangoUdi Bauman
 
resume_2016_low_rez
resume_2016_low_rezresume_2016_low_rez
resume_2016_low_rezJames Gray
 
Progressive Web Apps - Overview & Getting Started
Progressive Web Apps - Overview & Getting StartedProgressive Web Apps - Overview & Getting Started
Progressive Web Apps - Overview & Getting StartedGaurav Behere
 
Ramesh Babu Resume Latest
Ramesh Babu Resume LatestRamesh Babu Resume Latest
Ramesh Babu Resume LatestRamesh Babu
 
Google Cloud Developer Challenge - GDG Belgaum
Google Cloud Developer Challenge - GDG BelgaumGoogle Cloud Developer Challenge - GDG Belgaum
Google Cloud Developer Challenge - GDG Belgaumsandeephegde
 
Resume Partha Roy
Resume Partha RoyResume Partha Roy
Resume Partha RoyPartha Roy
 
The Hitchhiker's Guide to Building a Progressive Web App
The Hitchhiker's Guide to Building a Progressive Web AppThe Hitchhiker's Guide to Building a Progressive Web App
The Hitchhiker's Guide to Building a Progressive Web AppChristopher Nguyen
 
Applied progressive decoupling weather.com, angular, and drupal
Applied progressive decoupling  weather.com, angular, and drupalApplied progressive decoupling  weather.com, angular, and drupal
Applied progressive decoupling weather.com, angular, and drupalAcquia
 
Applications of the REST Principle
Applications of the REST PrincipleApplications of the REST Principle
Applications of the REST Principleelliando dias
 

Similar to Djangocon 09 Presentation - Pluggable Applications (20)

Progressive Web Apps - deep dive
Progressive Web Apps - deep diveProgressive Web Apps - deep dive
Progressive Web Apps - deep dive
 
H2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom KraljevicH2O World - Building a Smarter Application - Tom Kraljevic
H2O World - Building a Smarter Application - Tom Kraljevic
 
DSL (Domain Specific Language) for Maps Mashups
DSL (Domain Specific Language) for Maps MashupsDSL (Domain Specific Language) for Maps Mashups
DSL (Domain Specific Language) for Maps Mashups
 
PWA for PHP Developers
PWA for PHP DevelopersPWA for PHP Developers
PWA for PHP Developers
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
venki 2.7
venki 2.7venki 2.7
venki 2.7
 
Sam segal resume
Sam segal resumeSam segal resume
Sam segal resume
 
Intro To Django
Intro To DjangoIntro To Django
Intro To Django
 
resume_2016_low_rez
resume_2016_low_rezresume_2016_low_rez
resume_2016_low_rez
 
Progressive Web Apps - Overview & Getting Started
Progressive Web Apps - Overview & Getting StartedProgressive Web Apps - Overview & Getting Started
Progressive Web Apps - Overview & Getting Started
 
Ramesh Babu Resume Latest
Ramesh Babu Resume LatestRamesh Babu Resume Latest
Ramesh Babu Resume Latest
 
M.M.H.Masud
M.M.H.MasudM.M.H.Masud
M.M.H.Masud
 
SamSegalResume
SamSegalResumeSamSegalResume
SamSegalResume
 
Reusable Apps
Reusable AppsReusable Apps
Reusable Apps
 
Google Cloud Developer Challenge - GDG Belgaum
Google Cloud Developer Challenge - GDG BelgaumGoogle Cloud Developer Challenge - GDG Belgaum
Google Cloud Developer Challenge - GDG Belgaum
 
Resume Partha Roy
Resume Partha RoyResume Partha Roy
Resume Partha Roy
 
The Hitchhiker's Guide to Building a Progressive Web App
The Hitchhiker's Guide to Building a Progressive Web AppThe Hitchhiker's Guide to Building a Progressive Web App
The Hitchhiker's Guide to Building a Progressive Web App
 
Applied progressive decoupling weather.com, angular, and drupal
Applied progressive decoupling  weather.com, angular, and drupalApplied progressive decoupling  weather.com, angular, and drupal
Applied progressive decoupling weather.com, angular, and drupal
 
Resume
ResumeResume
Resume
 
Applications of the REST Principle
Applications of the REST PrincipleApplications of the REST Principle
Applications of the REST Principle
 

Recently uploaded

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
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
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
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 

Recently uploaded (20)

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
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
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
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 

Djangocon 09 Presentation - Pluggable Applications

  • 1. Pluggable Applications DjangoCon 2009 Nowell Strite Shawn Rider
  • 2. Road Map •  Background  •  Current Approaches  •  Our Use Case / Requirements  •  A Proposed Solu=on  •  Some Live Examples  •  Q & A 
  • 3. A little background PBS manages several major internal sites: and more…
  • 4. A little background And many of these use Django to some degree:
  • 7. PBS needs Django •  Serving a diverse array of sites  •  Built on a diverse technical architecture  •  Many repe==ve components desired by producers  and users  •  Ease of implementa=on is crucial  •  But highly specific implementa=on details and  goals are oIen more important to producers 
  • 8. Reusable Apps Save the Day The Reusable App design paKern helps us:  –  Easy to share func=onality with other projects  –  Quick to get features up and running  –  Possible to expand and enhance func=onality 
  • 9. Reusable Apps Save the Day… Sort of… The Reusable App design paKern has some  limita=ons  •  Apps are expected to live at one URL   (e.g. hKp://example.com/comments/)  •  Current conven=on of adding ‘extra_context’  params are not sa=sfactory  •  Conven=onal template replacement is not always  flexible enough  
  • 10. Template Tags to the Rescue Template Tags allow apps to expose func=onality  inside templates for other apps and site  components 
  • 11. Template Tags to the Rescue … Sort of… But template tags are also limited:  –  Form pos=ng becomes complicated  –  Generic inser=on of data into page context can  be dangerous  –  Addi=onal logic, such as complex permissions  checks, are difficult to enforce or bypass via  generic template tags 
  • 12. The Use Case: PBS TeacherLine Peer Connection Peer Connection features: 1. Access to a robust database of curated resources 2. Community features to allow educators to share and discuss these resources Because discussion is so important in this setting, many objects in Peer Connection support discussions. Given that the purpose of the site is partially to learn to use technology, a clean user experience is essential.
  • 13. The Use Case: PBS TeacherLine Peer Connection Our Requirements: •  Sensible URLs that follow our patterns elsewhere on the site •  Allow discussions app to interact with other apps and objects in expected ways •  Allow posting of data and error handling in the same location – no redirects to stand-alone pages to fix a message post. •  Flexibility to enforce permissions and other variations of display in an ad-hoc way.
  • 14. Our Solution: Make the Reusable App Pluggable By making an app “pluggable” we gain some extra  features:  –  Apps can be presented at various URLs  throughout the site  –  Each presenta=on can define context in a clean,  DRY manner  –  Form pos=ng and error handling can happen in  the logical loca=on for the user 
  • 15. The Use Case: PBS TeacherLine Peer Connection Two examples of how discussions appear in Peer Connection: /community/network/pbs-staff/group/tl-technology/discuss/ /content/module/216/discuss/
  • 16. The Use Case: PBS TeacherLine Peer Connection Two examples of how discussions appear in Peer Connection: /community/network/pbs-staff/group/tl-technology/discuss/ /content/module/216/discuss/
  • 17. The Use Case: PBS TeacherLine Peer Connection Two examples of how discussions appear in Peer Connection: /community/network/pbs-staff/group/tl-technology/discuss/ /content/module/216/discuss/
  • 18. The Use Case: PBS TeacherLine Peer Connection Content generated by the pluggable app: /content/module/216/discuss/ /community/network/pbs-staff/group/tl-technology/discuss/
  • 19. The Use Case: PBS TeacherLine Peer Connection Content required by the presenting app templates: /content/module/216/discuss/ /community/network/pbs-staff/group/tl-technology/discuss/
  • 20. Make it So By making our discussions app pluggable, we solved our problems and fulfilled our requirements. But what kind of work does it take to get there?
  • 21. Make it So Parts of Pluggable Apps •  Pluggable URL definition •  Pluggable application views definition •  Subclass / instantiation of Pluggable application
  • 23. Pluggable Application Views Definition def
index(request): 



complaints
=
Complaint.objects.pluggable(request) 



form
=
ComplaintForm() 



template
=
request.pluggable.config.get('template’) 



base_template
=
request.pluggable.config.get('base_template’) 



return
render_to_response(template,
{ 







'complaints':
complaints, 







'form':
form, 







'base_template':
base_template, 







},
context_instance=RequestContext(request))
  • 24. Subclass / Instantiation of Pluggable Application class
SillyWalkComplaintsApp(ComplaintsApp): 



def
pluggable_config(self,
request,
walk_slug=None): 







return
{'base_template':
'sillywalks/view.html'} 



def
pluggable_view_context(self,
request,
walk_slug): 







try: 











sillywalk
=
SillyWalk.objects.get(slug=walk_slug) 







except
SillyWalk.DoesNotExist: 











raise
Http404 







return
sillywalk 



def
pluggable_template_context(self,
request,
walk_slug): 







return
{'sillywalk':
request.pluggable.view_context} complaints_app
=
SillyWalkComplaintsApp('sillywalks')
  • 25. And Now For Something Completely Different Let’s see some live examples…
  • 26. Thank You For Your Time Code referenced in this presentation is available at: http://bit.ly/django-pluggables Nowell Strite Twitter: @nowells Email: nowell@strite.org Shawn Rider Twitter: @shawnr Email: shawn@shawnrider.com

Editor's Notes

  1. Welcome and introductions Today we want to present to you a design pattern that has been useful to us at PBS. This pattern allows applications to be presented by other objects or applications and at multiple contextualized URLs.
  2. PBS manages a lot of websites Some of these are created internally by PBS project teams Of the sites created internally many contain some significant Django component (switch to next slide as you’re saying this)
  3. This is not to say that all of these sites are solely powered by Django, but all of these sites rely on Django-based components. And some of them are completely powered by Django.
  4. PBS also hosts sites for independent producers, such as ken burns or weta or itvs Of these sites, some also use Django. (proceed as saying this)
  5. Again, not all of these sites use Django exclusively, but they use Django to varying degrees, mostly to supply specialty content and functionality.
  6. Since 2006, PBS has been using Django Django helps us solve problems in a variety of ways For all the reasons listed here, Django is a useful framework for us PBS was initially built largely on Perl scripts outputting static HTML But there was also some mix-in of Java and earlier Python frameworks such as Zope/Plone As we move forward, we must be able to support existing functionality while we build new functionality Django is flexible enough to allow us to do this Django has also allowed us to begin building components that can be leveraged by stations and producers building their own Django sites
  7. (N) Historically, reusable apps have been very helpful for spreading around similar functionality across different websites and projects.
  8. Reusable apps have a few limitations: They are designed to live at a single URL location To supply extra context info one must overload the URLconf, which gets messy quickly To have a reusable app appear to be styled like a different part of the site can require many different templates.
  9. Template Tags are often used to combine functionality from different apps into single pages.
  10. Template Tags are also very useful, but have some drawbacks: Form posts and handling errors in form posts are especially problematic. The user experience of submitting a post and being taken to a standalone error resolution or preview page is unacceptable. Context data can be added and manipulated with Template tags, but only if the tag has been written that way (many reusable apps template tags do not have the ability to accept arbitrary context data – and why should they?) Additional logic can be difficult to enforce or bypass
  11. (S) It’s helpful to look at a real-world example. In this case, we will examine a use case we were confronted with during the development of our social networking tool for educators’ professional development, PBS TeacherLine Peer Connection. Peer Connection is a social site that helps educators fulfill professional development requirements. It provides two major features: Access to curated content and community features. The site is designed to support real-world instructional coaching and mentoring programs in place at many schools, and it is intended to both help teachers become more comfortable with modern networked technologies as well as helping them develop their teaching practice.
  12. So as we set out to add a discussions feature to almost every object in the site (Networks, Groups, Learning Modules, Resources), we needed to adhere to a set of requirements. These were essential requirements, not all of which can be fulfilled with the traditional approaches.
  13. By making an app “pluggable” we gain extra features:
  14. These are two examples of how discussions appear in Peer Connection. One discussion area is attached to a Group, which is a subset of a Network. The other discussion area is attached to a Professional Development Module, which is a piece of curated content from the PBS team. It is essential that these discussions display under the URL hierarchy set up for displaying Networks, Groups, instructional Modules, etc.
  15. As you can see, the presentation of the pluggable discussion app’s functionality on these pages is surrounded by differentiated navigation that fits with the presenting application. So in this example, you can see that Discussions are a first-class link under the left sidebar navigation of your Group listing.
  16. However, when presented as a part of an instructional Module, the discussion area is accessed through a sub-navigation that is not part of the first-class navigation structure for the instructional Module.
  17. This content is generated by the pluggable app. The pluggable app knows nothing about the presenting application And the presenting app knows nothing about the pluggable application or its required context.
  18. (N)
  19. This is the URL conf Similar to traditional, but embedded in an class that inherits form PluggableApp This definition is only required once – any other app or object in my site project could present this application using this URL configuration
  20. By default any common Django design approach will work fwith the Pluggables pattern. However, pluggable applications also support class-based views, which might provide even more flexibility to your project.
  21. For each app that presents a pluggable application, there are three points at which you may customize behavior. If customization is required, you must create one of these classes for every application that will present a pluggable application. In this example we are looking at the configuration for presenting the Complaints app within the Silly Walks application. The pluggable_config defines a dictionary of configuration parameters that can be customized. The pluggable_view_context supplies any expected objects that the pluggable application needs to work. In this case, the pluggable application requires an object to attach complaints to, and we are giving it a SillyWalk to use for that object, anchoring your complaint to this object. This is a common use case, but certainly not required by every pluggable application. Finally, the pluggable_template_context determines which data should be passed through to the template itself. This may be required for rendering various aspects of the template that are dependent on the presenting application.
  22. Follow PEP8 with our examples