djangoic approach to implement common web development paradigms

9,442
-1

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 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
9,442
On Slideshare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
42
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

djangoic approach to implement common web development paradigms

  1. 1. Introduction Paradigms The Admin Interface The Django Advantage Djangoic approach to implement common web development paradigms Lakshman Prasad April 20, 2011
  2. 2. Concepts and abstractions used to represent elements of a program
  3. 3. CS is neither about computers nor is science - Abelson, SICP, MIT
  4. 4. Web Development Paradigms: Modeling common web patterns
  5. 5. Introduction Paradigms The Admin Interface The Django Advantage Why
  6. 6. Introduction Paradigms The Admin Interface The Django Advantage • For building database driven web applications
  7. 7. Introduction Paradigms The Admin Interface The Django Advantage • For building database driven web applications • Emphasis on Reuse, DRY and simplicity
  8. 8. Batteries Included
  9. 9. docs.djangoproject.com
  10. 10. Lets examine the batteries
  11. 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. 12. Introduction Paradigms The Admin Interface The Django Advantage A nerd, for a while
  13. 13. consulting since, until recently
  14. 14. Always been developing
  15. 15. Work at InMobi now
  16. 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. 17. Software span a spectrum
  18. 18. Those that interact with hardware
  19. 19. The nuts and bolts
  20. 20. Those that solve a human problem ...
  21. 21. ... that are Complex Systems
  22. 22. Frameworks come in between ...
  23. 23. ... to achieve balance ...
  24. 24. ... and reduce cost of maintainance and development
  25. 25. Common Frameworks
  26. 26. Forms
  27. 27. Save form data to a table
  28. 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. 29. Introduction Paradigms The Admin Interface The Django Advantage Save Foreign Keys
  30. 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. 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. 32. Introduction Paradigms The Admin Interface The Django Advantage Form pre populated
  33. 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. 34. Form Preview
  35. 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. 36. Form Wizard
  37. 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. 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. 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. 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. 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. 42. django-socialauth
  43. 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. 44. ”Normalized data is for sissies” - Cal Henderson
  45. 45. Introduction Paradigms The Admin Interface The Django Advantage Different blocks need different caching durations
  46. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 59. DataGrid enables user customisable column and sorting
  60. 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. 61. Introduction Paradigms The Admin Interface The Django Advantage Admin by models alone
  62. 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. 63. List Page
  64. 64. Add an Entry
  65. 65. Auto Validation
  66. 66. Introduction Paradigms The Admin Interface The Django Advantage Databrowse enables browsable web complete with hyperlinks
  67. 67. Introduction Paradigms The Admin Interface The Django Advantage Popular Users • Media • LA Times • NY Times • Washington Post • Guardian • Hindustan TImes
  68. 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. 69. Django users
  70. 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. 71. 700 contibutors
  72. 72. More open source projects than you think ...
  73. 73. ... one for every size and style
  74. 74. Don’t go where the puck is; go where the puck is going to be
  75. 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. 76. hello@lakshmanprasad.com

×