Your SlideShare is downloading. ×
djangoic approach to implement common web development paradigms
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

djangoic approach to implement common web development paradigms

7,713

Published on

Web development frameworks conceptualize various abstractions to make common web development paradigms easy to implement. These abstractions have to be "transparent" in that they enable developer to …

Web development frameworks conceptualize various abstractions to make common web development paradigms easy to implement. These abstractions have to be "transparent" in that they enable developer to override where necessary. Django, a modern python framework provides a full stack framework and has pioneered best practices in defining these abstractions for various web application paradigms such as Authentication, Permissions, Sessions, Caching, Security from CSRF, File Storage, Form Validation, etc. The abstractions provided by django are transparent and extensible and are as such referred to in the community to be "Djangoic"

The session covers these abstractions, their defaults and using some of their transparencies to achieve a few non-default common ends such as using cloud storage services like Amazon web services, Implementing LDAP authentication, Implementing caching using Memcached, database and NoSQL data stores. The biggest take away to the developer is the ability to identify and create other Djangoic solutions that are transparent abstractions by examining the ones implemented within django and developed by the community in open source applications.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,713
On Slideshare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
41
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Introduction Paradigms The Admin Interface The Django Advantage Djangoic approach to implement common web development paradigms Lakshman Prasad April 20, 2011
  • 2. Concepts and abstractions used to represent elements of a program
  • 3. CS is neither about computers nor is science - Abelson, SICP, MIT
  • 4. Web Development Paradigms: Modeling common web patterns
  • 5. Introduction Paradigms The Admin Interface The Django Advantage Why
  • 6. Introduction Paradigms The Admin Interface The Django Advantage • For building database driven web applications
  • 7. Introduction Paradigms The Admin Interface The Django Advantage • For building database driven web applications • Emphasis on Reuse, DRY and simplicity
  • 8. Batteries Included
  • 9. docs.djangoproject.com
  • 10. Lets examine the batteries
  • 11. Introduction Paradigms The Admin Interface The Django Advantage About Me • Active Djangonaut and active in Python world • Part of a few popular open source django applications github.com/becomingGuru. • Co-Authored an ebook ”django-design-patterns” • Architect and develop django applications at InMobi • Earlier, Consulting and Development via Agiliq Solutions • Developed several custom proprietory django applications • twitter.com/becomingGuru http://becomingguru.com
  • 12. Introduction Paradigms The Admin Interface The Django Advantage A nerd, for a while
  • 13. consulting since, until recently
  • 14. Always been developing
  • 15. Work at InMobi now
  • 16. Introduction Paradigms The Admin Interface The Django Advantage Introduction Definition About Me Abstractions Paradigms Forms Authentication/Caching/Sessions Inernational/Human/Local ..ization Generic Views Sorting/Pagination/DataBrowse/GRID/Messages/Other The Admin Interface Admin Databrowse The Django Advantage Users Community Endnotes
  • 17. Software span a spectrum
  • 18. Those that interact with hardware
  • 19. The nuts and bolts
  • 20. Those that solve a human problem ...
  • 21. ... that are Complex Systems
  • 22. Frameworks come in between ...
  • 23. ... to achieve balance ...
  • 24. ... and reduce cost of maintainance and development
  • 25. Common Frameworks
  • 26. Forms
  • 27. Save form data to a table
  • 28. Introduction Paradigms The Admin Interface The Django Advantage Use a Model Form >>> from d j a n g o . f o r m s import ModelForm # C r e a t e t h e form c l a s s . >>> c l a s s A r t i c l e F o r m ( ModelForm ) : ... c l a s s Meta : ... model = A r t i c l e # C r e a t i n g a form t o add an a r t i c l e . >>> form = A r t i c l e F o r m ( ) # C r e a t i n g a form t o c h an ge an e x i s t i n g a r t i c l e . >>> a r t i c l e = A r t i c l e . o b j e c t s . g e t ( pk=1) >>> form = A r t i c l e F o r m ( i n s t a n c e= a r t i c l e )
  • 29. Introduction Paradigms The Admin Interface The Django Advantage Save Foreign Keys
  • 30. Introduction Paradigms The Admin Interface The Django Advantage Use Model Formset from d j a n g o . f o r m s . m o d e l s i m p o r t m o d e l f o r m s e t f a c t o r y AuthorFormSet = m o d e l f o r m s e t f a c t o r y ( Author ) f o r m s e t = A ut h o r F o r m Se t ( ) > > print formset > <i n p u t t y p e=” h i d d e n ” name=” form− TOTAL FORMS” v a l u e=” 1 ” i d=” i d f o r m − TOTAL FORMS” /> <i n p u t t y p e=” h i d d e n ” name=” form−INITIAL FORMS” v a l u e=” 0 ” i d=” i d f o r m −INITIAL FORMS” /> <i n p u t t y p e=” h i d d e n ” name=” form− MAX NUM FORMS” i d=” i d f o r m −MAX NUM FORMS” /> <t r > <th> <l a b e l f o r=” i d f o r m −0 −name”>Name:</ l a b e l > </th> <td> <i n p u t i d=” i d f o r m −0 −name” t y p e=” t e x t ” name=” form−0 −name” m a x l e n g t h=” 100 ” /> </td> </t r >
  • 31. Introduction Paradigms The Admin Interface The Django Advantage Model Formset options f o r m s e t = AuthorFormSet ( q s=Au th o r . o b j e c t s . a l l ( ) , e x t r a =5) formset . i s v a l i d () formset . e r r o r s { ’ name ’ : ’ T h i s f i e l d is required ’} formset . changed forms formset . save ()
  • 32. Introduction Paradigms The Admin Interface The Django Advantage Form pre populated
  • 33. Introduction Paradigms The Admin Interface The Django Advantage Forms dont have to save to a Model from d j a n g o import f o r m s c l a s s ContactForm ( f o r m s . Form ) : s u b j e c t = f o r m s . C h a r F i e l d ( m a x l e n g t h =100) message = f o r m s . C h a r F i e l d ( ) sender = forms . E m a i l F i e l d () c c m y s e l f = f o r m s . B o o l e a n F i e l d ( r e q u i r e d=F a l s e ) def s a v e ( s e l f ) : #Do a n y t h i n g ...
  • 34. Form Preview
  • 35. Introduction Paradigms The Admin Interface The Django Advantage Form Preview from d j a n g o . c o n t r i b . f o r m t o o l s . p r e v i e w import FormPreview from myapp . m o d e l s import SomeModel #Add a u r l ( r ’ ˆ p o s t / $ ’ , SomeModelFormPreview ( SomeModelForm ) ) , #D e f i n e form p r e v i e w c l a s s SomeModelFormPreview ( FormPreview ) : def done ( s e l f , r e q u e s t , c l e a n e d d a t a ) : # Do s o m e t h i n g w i t h t h e c l e a n e d d a t a , t h e n # r e d i r e c t t o a ” s u c c e s s ” page . r e t u r n H t t p R e s p o n s e R e d i r e c t ( ’ / form / s u c c e s s ’ )
  • 36. Form Wizard
  • 37. Introduction Paradigms The Admin Interface The Django Advantage Form Wizard c l a s s C o n t a c t W i z a r d ( FormWizard ) : def done ( s e l f , r e q u e s t , f o r m l i s t ) : do something with the form data ( fo r m l is t ) return HttpResponseRedirect ( ’ / r e d i r e c t / ’ )
  • 38. Introduction Paradigms The Admin Interface The Django Advantage CSRF Protection <form a c t i o n=” ” method=” p o s t ”>{% c s r f t o k e n %} from d j a n g o . v i e w s . d e c o r a t o r s . c s r f import c s r f p r o t e c t from d j a n g o . t e m p l a t e import R e q u e s t C o n t e x t @csrf protect def my view ( r e q u e s t ) : c = {} # ... r e t u r n r e n d e r t o r e s p o n s e ( ” a t e m p l a t e . html ” , c , c o n t e x t i n s t a n c e= RequestContext ( request ))
  • 39. Introduction Paradigms The Admin Interface The Django Advantage Authentication: Point to url pattern u r l p a t t e r n s += p a t t e r n s ( ’ d j a n g o . c o n t r i b . a u t h . v i e w s ’ , u r l ( r ’ ˆ l o g i n /$ ’ , ’ l o g i n ’ ) , u r l ( r ’ ˆ l o g o u t /$ ’ , ’ l o g o u t ’ ) , u r l ( r ’ ˆ r e g i s t e r /$ ’ , ’ r e g i s t e r ’ ) , u r l ( r ’ ˆ p a s s r e s e t /$ ’ , ’ p a s s w o r d r e s e t ’ ) , u r l ( r ’ ˆ p a s s r e s e t 2 /$ ’ , ’ p a s s w o r d r e s e t d o n e ’ ) , u r l ( r ’ ˆ p a s s r e s e t c o n f i r m / ( ?P<u i d b 3 6 >[−w]+)/ ’ , ’ password reset confirm ’ ) , u r l ( r ’ ˆ p a s s r e s e t c o m p l e t e /$ ’ , ’ password reset complete ’ ) , )
  • 40. Introduction Paradigms The Admin Interface The Django Advantage Login Required from d j a n g o . c o n t r i b . a u t h . d e c o r a t o r s import login required @ l o g i n r e q u i r e d ( r e d i r e c t f i e l d n a m e= ’ r e d i r e c t t o ’ ) def my view ( r e q u e s t ) : ...
  • 41. Introduction Paradigms The Admin Interface The Django Advantage Authentication backends class SettingsBackend : ””” A u t h e n t i c a t e a g a i n s t t h e s e t t i n g s ADMIN LOGIN and ADMIN PASSWORD . ””” def a u t h e n t i c a t e ( s e l f , username=None , p a s s w o r d=None ) i f l o g i n v a l i d and p w d v a l i d : return user r e t u r n None def g e t u s e r ( s e l f , u s e r i d ) : try : r e t u r n U s e r . o b j e c t s . g e t ( pk=u s e r i d ) except U s e r . D o e s N o t E x i s t : r e t u r n None
  • 42. django-socialauth
  • 43. Introduction Paradigms The Admin Interface The Django Advantage Open ID backend c l a s s OpenIdBackend : d e f a u t h e n t i c a t e ( s e l f , o p e n i d k e y , r e q u e s t , p r o v i d e r , u s e r=None ) : try : a s s o c = U s e r A s s o c i a t i o n . o b j e c t s . g e t ( o p e n i d k e y=o p e n i d k e y ) return assoc . user except U s e r A s s o c i a t i o n . DoesNotExist : #f e t c h i f o p e n i d p r o v i d e r p r o v i d e s any s i m p l e r e g i s t r a t i o n f i e l d s i f r e q u e s t . o p e n i d and r e q u e s t . o p e n i d . s r e g : email = request . openid . sreg . get ( ’ email ’ ) nickname = r e q u e s t . openid . s r e g . get ( ’ nickname ’ ) firstname , lastname = ( request . openid . sreg . get ( ’ fullname ’ , ’ ’ ) return user d e f GooglesAX ( s e l f , o p e n i d r e s p o n s e ) : e m a i l = ( o p e n i d r e s p o n s e . ax . g e t S i n g l e ( ’ h t t p : / / axschema . o r g / c o n t a c t / e m a i l ’ ) ) f i r s t n a m e = ( o p e n i d r e s p o n s e . ax . g e t S i n g l e ( ’ h t t p : / / axschema . o r g / namePerson / f i r s t ’ ) ) l a s t n a m e = ( o p e n i d r e s p o n s e . ax . g e t S i n g l e ( ’ h t t p : / / axschema . o r g / namePerson / l a s t ’ ) ) return l o c a l s () def g e t u s e r ( s e l f , u s e r i d ) : try : u s e r = U s e r . o b j e c t s . g e t ( pk=u s e r i d ) return user except User . DoesNotExist : r e t u r n None
  • 44. ”Normalized data is for sissies” - Cal Henderson
  • 45. Introduction Paradigms The Admin Interface The Django Advantage Different blocks need different caching durations
  • 46. Introduction Paradigms The Admin Interface The Django Advantage Generally Memcache Every page CACHE BACKEND = ’ memcached : / / 1 2 7 . 0 . 0 . 1 : 1 1 2 1 1 / ’ CACHE BACKEND = ’ memcached : / / 1 7 2 . 1 9 . 2 6 . 2 4 0 : 1 1 2 1 1 ; 172.19.26.242:11212;172.19.26.244:11213/ ’
  • 47. Introduction Paradigms The Admin Interface The Django Advantage Implement a caching decorator from d j a n g o . c o r e . c a c h e import c a c h e def c a c h e f o r ( s e c o n d s , f e t c h =0): def c a c h e i t ( f u n c ) : def d e c o f u n c ( s e l f ) : v a l = cache . get ( s e l f . g e t c a c h e k e y ( f e t c h )) i f not v a l : val = func ( s e l f ) cache . s e t ( s e l f . g e t c a c h e k e y ( f e t c h ) , val , seconds ) return v a l return deco func return c a c h e i t
  • 48. Introduction Paradigms The Admin Interface The Django Advantage Apply on the blocks class TwitterBlock ( TwitterSearchBlock ) : t e m p l a t e n a m e = ’ t w i t t e r u s e r b l o c k . html ’ a j a x t e m p l a t e = ’ t w e e t s u s e r . html ’ @ c a c h e f o r ( 6 0 ∗ 6 0 , f e t c h =1) def f e t c h d a t a ( s e l f ) : tw = T w i t t e r ( e m a i l= ’ umoja com ’ ) u s e r t w e e t s = tw . s t a t u s e s . u s e r t i m e l i n e ( s c r e e n n a m e= s e l f . d a t a ) r e t u r n u s e r t w e e t s , None
  • 49. Introduction Paradigms The Admin Interface The Django Advantage Different cache Backends • Database • File System • Local Memory • Redis, a NoSQL store • Dummy- For Development • Sessions can use any of these, or the database.
  • 50. Introduction Paradigms The Admin Interface The Django Advantage Humanization and Localization 19 Apr 2 0 1 0 | n a t u r a l d a y becomes ‘ y e s t e r d a y ‘ . 20 Apr 2 0 1 0 | n a t u r a l d a y becomes ‘ today ‘ . 1 | o r d i n a l becomes ‘ 1 s t ‘ . 2 | o r d i n a l becomes ‘ 2 nd ‘ . 1 0 0 0 0 0 0 | i n t w o r d becomes ‘ 1 . 0 m i l l i o n ‘ . 1 2 0 0 0 0 0 | i n t w o r d becomes ‘ 1 . 2 m i l l i o n ‘ . {{ v a l u e | l o c a l i z e }}
  • 51. Introduction Paradigms The Admin Interface The Django Advantage Internationalization {% b l o c k t r a n s w i t h amount= a r t i c l e . p r i c e %} That w i l l c o s t $ {{ amount } } . {% e n d b l o c k t r a n s %} {% b l o c k t r a n s w i t h myvar=v a l u e | f i l t e r %} T h i s w i l l ha ve {{ myvar }} i n s i d e . {% e n d b l o c k t r a n s %} c l a s s in . forms . I N S t a t e F i e l d c l a s s in . forms . INZipCodeField c l a s s in . forms . I N S t a t e S e l e c t
  • 52. Introduction Paradigms The Admin Interface The Django Advantage Using Generic Views # some app / v i e w s . py from d j a n g o . v i e w s . g e n e r i c import TemplateView c l a s s AboutView ( TemplateView ) : t e m p l a t e n a m e = ” a b o u t . html ” # u r l s . py from d j a n g o . c o n f . u r l s . d e f a u l t s import ∗ from some app . v i e w s import AboutView urlpatterns = patterns ( ’ ’ , ( r ’ ˆ a b o u t / ’ , AboutView . a s v i e w ( ) ) , )
  • 53. Introduction Paradigms The Admin Interface The Django Advantage List and Object Views from d j a n g o . v i e w s . g e n e r i c import L i s t V i e w from b o o k s . m o d e l s import Book c l a s s AcmeBookListView ( L i s t V i e w ) : context object name = ” book list ” q u e r y s e t = Book . o b j e c t s . f i l t e r ( p u b l i s h e r n a m e= ”Acme P u b l i s h i n g ” ) t e m p l a t e n a m e = ” b o o k s / a c m e l i s t . html ”
  • 54. Introduction Paradigms The Admin Interface The Django Advantage Mixins from d j a n g o i m p o r t h t t p from d j a n g o . u t i l s i m p o r t s i m p l e j s o n a s j s o n c l a s s JSONResponseMixin ( o b j e c t ) : def r e n d e r t o r e s p o n s e ( s e l f , context ) : ” R e t u r n s a JSON r e s p o n s e c o n t a i n i n g ’ c o n t e x t ’ a s p a y l o a d ” return s e l f . get json response ( s e l f . convert context to json ( context )) d e f g e t j s o n r e s p o n s e ( s e l f , c o n t e n t , ∗∗ h t t p r e s p o n s e k w a r g s ) : ” C o n s t r u c t an ‘ H t t p R e s p o n s e ‘ o b j e c t . ” return http . HttpResponse ( content , c o n t e n t t y p e= ’ a p p l i c a t i o n / j s o n ’ , ∗∗ h t t p r e s p o n s e k w a r g s ) def c o n v e r t c o n t e x t t o j s o n ( s e l f , context ) : ” C o n v e r t t h e c o n t e x t d i c t i o n a r y i n t o a JSON o b j e c t ” r e t u r n j s o n . dumps ( c o n t e x t )
  • 55. Introduction Paradigms The Admin Interface The Django Advantage Any combinations of Mixins c l a s s H y b r i d D e t a i l V i e w ( JSONResponseMixin , SingleObjectTemplateResponseMixin , BaseDetailView ) : def r e n d e r t o r e s p o n s e ( s e l f , context ) : # Look f o r a ’ f o r m a t=j s o n ’ GET argument i f s e l f . r e q u e s t . GET . g e t ( ’ f o r m a t ’ , ’ h t m l ’ ) == ’ j s o n ’ : r e t u r n JSONResponseMixin . r e n d e r t o r e s p o n s e ( s e l f , c o n t e x t ) else : return SingleObjectTemplateResponseMixin . render to response ( s e l f , context )
  • 56. Introduction Paradigms The Admin Interface The Django Advantage Types of Generic Views • Simple: Redirect, Render to Template • Detail, List View • Archive View: Date, Month, Year views • Basic CRUD, with or w/o Auth
  • 57. Introduction Paradigms The Admin Interface The Django Advantage Builtin support for Pagination >>> from d j a n g o . c o r e . p a g i n a t o r import P a g i n a t o r >>> o b j e c t s = [ ’ j o h n ’ , ’ p a u l ’ , ’ g e o r g e ’ , ’ r i n g o ’ ] >>> p = P a g i n a t o r ( o b j e c t s , 2 ) >>> p . count 4 >>> p . num pages 2 >>> p . page range [1 , 2] >>> page1 = p . page ( 1 ) >>> page1 <Page 1 o f 2> >>> page1 . o b j e c t l i s t [ ’ john ’ , ’ paul ’ ]
  • 58. Introduction Paradigms The Admin Interface The Django Advantage Abstract the pagination in middleware django pagenation {% a u t o p a g i n a t e o b j e c t l i s t 10 %} {% p a g i n a t e %}
  • 59. DataGrid enables user customisable column and sorting
  • 60. Introduction Paradigms The Admin Interface The Django Advantage Other common paradigms • Display Image Thumbnail • Store data on a CDN, like Amazon S3 • Periodic tasks with Celery • Decoupled design using Signals • GeoDjango : Framework for all location based applications
  • 61. Introduction Paradigms The Admin Interface The Django Advantage Admin by models alone
  • 62. Introduction Paradigms The Admin Interface The Django Advantage Admin Syntax from d j a n g o . c o n t r i b import admin from m o d e l s import Post , Comment c l a s s PostAdmin ( admin . ModelAdmin ) : l i s t d i s p l a y = ( ’ t i t l e ’ , ’ datetime ’ ) c l a s s CommentAdmin ( admin . ModelAdmin ) : l i s t d i s p l a y = ( ’ text ’ ,) admin . s i t e . r e g i s t e r ( Post , PostAdmin ) admin . s i t e . r e g i s t e r ( Comment , CommentAdmin )
  • 63. List Page
  • 64. Add an Entry
  • 65. Auto Validation
  • 66. Introduction Paradigms The Admin Interface The Django Advantage Databrowse enables browsable web complete with hyperlinks
  • 67. Introduction Paradigms The Admin Interface The Django Advantage Popular Users • Media • LA Times • NY Times • Washington Post • Guardian • Hindustan TImes
  • 68. Introduction Paradigms The Admin Interface The Django Advantage Popular Users • Media • LA Times • NY Times • Washington Post • Guardian • Hindustan TImes • Web2.0 • Mahalo: 10 million Page views • Many web startups: Convore, Lanyard, Everyblock, GroupQuality,
  • 69. Django users
  • 70. Introduction Paradigms The Admin Interface The Django Advantage NASA uses Django After an extensive trade study, we selected Django ... as the first and primary application environment for the Nebula Cloud.
  • 71. 700 contibutors
  • 72. More open source projects than you think ...
  • 73. ... one for every size and style
  • 74. Don’t go where the puck is; go where the puck is going to be
  • 75. Introduction Paradigms The Admin Interface The Django Advantage Image Attributions h t t p : / /www . f l i c k r . com/ p h o t o s / t e j e d o r o d e l u z /3157690060/ h t t p : / /www . f l i c k r . com/ p h o t o s /23820645 @N05 /4287681570/ h t t p : / /www . f l i c k r . com/ p h o t o s / a i d a n j o n e s /3575000735/ http :// j a c o b i a n . org / h t t p : / / s a n j u a n c o l l e g e . edu / l i b / i m a g e s / p h i l o s o p h y b r a i n . j p g h t t p : / /www . f l i c k r . com/ p h o t o s / uhop /105062059/ h t t p : / / s 3 . amazonaws . com/memebox/ u p l o a d s /136/ e x p o n e n t i a l g r a p h 2 . j p g h t t p : / / g e e k a n d p o k e . t y p e p a d . com/ g e e k a n d p o k e / i m a g e s /2008/06/03/ s e x p l 1 8 . j p g h t t p : / /www . f l i c k r . com/ p h o t o s / go /253819/ h t t p : / / a r o u n d t h e s p h e r e . f i l e s . w o r d p r e s s . com /2009/05/ s w i s s −army−k n i f e . j p g h t t p : / /www . f r e e f o t o . com/ i m a g e s /41/04/41 0 4 9− −Keep−L e f t w e b . j p g − h t t p : / /www . f l i c k r . com/ p h o t o s / o r i n r o b e r t j o h n /114430223/
  • 76. hello@lakshmanprasad.com

×