Slide 1

Slide 1 text

Below is the workshop 'slides' for the event 'Django Unchained' orgainsed by WnCC, IIT Bombay on 23rd January, 2013. Django is a the most advanced and very popular Web Framework for developing webapps in Python. We shall follow the commands below through the course of the workshop c d m k d i r v i r t u a l e n v s c d v i r t u a l e n v s v i r t u a l e n v h e r o a p p c d h e r o a p p p i p i n s t a l l d j a n g o = = 1 . 4 No Django : Django Unchained What is Django? Setting up the Django Environment Installing Django Django Vs No-Django

Slide 2

Slide 2 text

# ! / u s r / b i n / e n v p y t h o n i m p o r t M y S Q L d b p r i n t " C o n t e n t - T y p e : t e x t / h t m l \ n " p r i n t " < h t m l > < h e a d > < t i t l e > B o o k s < / t i t l e > < / h e a d > " p r i n t " < b o d y > " p r i n t " < h 1 > B o o k s < / h 1 > " p r i n t " < u l > " c o n n e c t i o n = M y S Q L d b . c o n n e c t ( u s e r = ' m e ' , p a s s w d = ' l e t m e i n ' , d b = ' m y _ d b ' ) c u r s o r = c o n n e c t i o n . c u r s o r ( ) c u r s o r . e x e c u t e ( " S E L E C T n a m e F R O M b o o k s O R D E R B Y p u b _ d a t e D E S C L I M I T 1 0 " ) f o r r o w i n c u r s o r . f e t c h a l l ( ) : p r i n t " < l i > % s < / l i > " % r o w [ 0 ] p r i n t " < / u l > " p r i n t " < / b o d y > < / h t m l > " c o n n e c t i o n . c l o s e ( ) Django : # m o d e l s . p y ( t h e d a t a b a s e t a b l e s ) f r o m d j a n g o . d b i m p o r t m o d e l s c l a s s B o o k ( m o d e l s . M o d e l ) : n a m e = m o d e l s . C h a r F i e l d ( m a x _ l e n g t h = 5 0 ) p u b _ d a t e = m o d e l s . D a t e F i e l d ( ) # v i e w s . p y ( t h e b u s i n e s s l o g i c )

Slide 3

Slide 3 text

f r o m d j a n g o . s h o r t c u t s i m p o r t r e n d e r _ t o _ r e s p o n s e f r o m m o d e l s i m p o r t B o o k d e f l a t e s t _ b o o k s ( r e q u e s t ) : b o o k _ l i s t = B o o k . o b j e c t s . o r d e r _ b y ( ' - p u b _ d a t e ' ) [ : 1 0 ] r e t u r n r e n d e r _ t o _ r e s p o n s e ( ' l a t e s t _ b o o k s . h t m l ' , { ' b o o k _ l i s t ' : b o o k _ l i s t } ) # u r l s . p y ( t h e U R L c o n f i g u r a t i o n ) f r o m d j a n g o . c o n f . u r l s . d e f a u l t s i m p o r t * i m p o r t v i e w s u r l p a t t e r n s = p a t t e r n s ( ' ' , ( r ' ^ l a t e s t / $ ' , v i e w s . l a t e s t _ b o o k s ) , ) # l a t e s t _ b o o k s . h t m l ( t h e t e m p l a t e ) < h t m l > < h e a d > < t i t l e > B o o k s < / t i t l e > < / h e a d > < b o d y > < h 1 > B o o k s < / h 1 > < u l > { % f o r b o o k i n b o o k _ l i s t % } < l i > { { b o o k . n a m e } } < / l i > { % e n d f o r % } < / u l > < / b o d y > < / h t m l > There is lot more structure and lesser dependency. Meaning I can change one part and get away without checking for side effects. d j a n g o - a d m i n . p y s t a r t p r o j e c t h e r o a p p Our New Project

Slide 4

Slide 4 text

c d h e r o a p p / 1. manage.py 2. settings.py 3. urls.py 4. wsgi.py Lets add some more files - Content will be added later 1. views.py 2. models.py p y t h o n m a n a g e . p y r u n s e r v e r # v i e w s . p y f r o m d j a n g o . h t t p i m p o r t H t t p R e s p o n s e d e f h e l l o ( r e q u e s t ) : r e t u r n H t t p R e s p o n s e ( " H e l l o w o r l d " ) # u r l s . p y f r o m d j a n g o . c o n f . u r l s . d e f a u l t s i m p o r t * f r o m h e r o a p p . v i e w s i m p o r t h e l l o u r l p a t t e r n s = p a t t e r n s ( ' ' , ( ' ^ h e l l o / $ ' , h e l l o ) , Understand the Structure Making of App - Step 0 - RunServer Making of App - Step 1 - View

Slide 5

Slide 5 text

) # v i e w s . p y f r o m d j a n g o . h t t p i m p o r t H t t p R e s p o n s e i m p o r t d a t e t i m e d e f h e l l o ( r e q u e s t ) : r e t u r n H t t p R e s p o n s e ( " H e l l o w o r l d " ) d e f c u r r e n t _ d a t e t i m e ( r e q u e s t ) : n o w = d a t e t i m e . d a t e t i m e . n o w ( ) h t m l = " < h t m l > < b o d y > I t i s n o w % s . < / b o d y > < / h t m l > " % n o w r e t u r n H t t p R e s p o n s e ( h t m l ) d e f h o u r s _ a h e a d ( r e q u e s t , o f f s e t ) : t r y : o f f s e t = i n t ( o f f s e t ) e x c e p t V a l u e E r r o r : r a i s e H t t p 4 0 4 ( ) d t = d a t e t i m e . d a t e t i m e . n o w ( ) + d a t e t i m e . t i m e d e l t a ( h o u r s = o f f s e t ) h t m l = " < h t m l > < b o d y > I n % s h o u r ( s ) , i t w i l l b e % s . < / b o d y > < / h t m l > " % ( o f f s e t , d t ) r e t u r n H t t p R e s p o n s e ( h t m l ) # u r l s . p y f r o m d j a n g o . c o n f . u r l s . d e f a u l t s i m p o r t * f r o m h e r o a p p . v i e w s i m p o r t h e l l o , c u r r e n t _ d a t e t i m e u r l p a t t e r n s = p a t t e r n s ( ' ' , ( ' ^ h e l l o / $ ' , h e l l o ) , ( ' ^ t i m e / $ ' , c u r r e n t _ d a t e t i m e ) , ( ' ^ a n o t h e r - t i m e - p a g e / $ ' , c u r r e n t _ d a t e t i m e ) , Making of App - Step 2 - Loose Coupling & Dynamic URL

Slide 6

Slide 6 text

( r ' ^ t i m e / p l u s / ( \ d + ) / $ ' , h o u r s _ a h e a d ) , ) Now comment out the try except block and see Django's beauty. Understand the Django Error Page - Boon for debugging. # h e r o t e m p l a t e . h t m l - > G o e s i n t o t e m p l a t e s / < h t m l > < h e a d > < t i t l e > O r d e r i n g n o t i c e < / t i t l e > < / h e a d > < b o d y > < h 1 > O r d e r i n g n o t i c e < / h 1 > < p > D e a r { { p e r s o n _ n a m e } } , < / p > < p > T h a n k s f o r p l a c i n g a n o r d e r f r o m { { c o m p a n y } } . I t ' s s c h e d u l e d t o s h i p o n { { s h i p _ d a t e | d a t e : " F j , Y " } } . < / p > < p > H e r e a r e t h e i t e m s y o u ' v e o r d e r e d : < / p > < u l > { % f o r i t e m i n i t e m _ l i s t % } < l i > { { i t e m } } < / l i > { % e n d f o r % } < / u l > { % i f o r d e r e d _ w a r r a n t y % } < p > Y o u r w a r r a n t y i n f o r m a t i o n w i l l b e i n c l u d e d i n t h e p a c k a g i n g . < / p > { % e l s e % } < p > Y o u d i d n ' t o r d e r a w a r r a n t y , s o y o u ' r e o n y o u r o w n w h e n t h e p r o d u c t s i n e v i t a b l y s t o p w o r k i n g . < / p > Making of App - Step 3 - Templates

Slide 7

Slide 7 text

{ % e n d i f % } < p > S i n c e r e l y , < b r / > { { c o m p a n y } } < / p > < / b o d y > < / h t m l > Now add templates dir into settings.py And finally setup the views file c = C o n t e x t ( { ' p e r s o n _ n a m e ' : ' J o h n S m i t h ' , ' c o m p a n y ' : ' O u t d o o r E q u i p m e n t ' , ' s h i p _ d a t e ' : d a t e t i m e . d a t e ( 2 0 0 9 , 4 , 2 ) , ' o r d e r e d _ w a r r a n t y ' : F a l s e } )