Django: o framework web para perfecionistas com prazos

Django: o framework web para perfecionistas com prazos

Palestra apresentada na DevCamp - 11/05/2013

Vĩdeo: http://www.infoq.com/br/presentations/django-framework-web-prazos

O Django é um framework desenvolvido em Python, rápido, fácil de aprender, flexível e muito simples de usar para projetar e desenvolver aplicações web. São utilizado em grandes sites como Globo.com, Instagram, Disqus, Mozilla e muitos outros. Neste palestra serão apresentados os fundamentos e a estrutura de uma aplicação Django mostrando exemplos de códigos de aplicações open-source existentes.

7f189d0edace3f257ce9c2960ec124d2?s=128

Renne Rocha

May 11, 2013
Tweet

Transcript

  1. 2.

    RENNE ROCHA Engenheiro Eletricista - Unicamp Desenvolvedor Python Nokia Siemens

    Networks Organizador do Caipira Ágil http://caipiraagil.com/ Fundador do Laboratório Hacker de Campinas http://lhc.net.br/
  2. 4.
  3. 6.

    OBJECT-RELATIONAL MAPPER (ORM) Seus modelos de dados são definidos totalmente

    em Python. Fornece uma API para acesso ao banco de dados. Independe de sistema de gerenciamento de banco de dados.
  4. 7.

    INTERFACE DE ADMINISTRAÇÃO AUTOMÁTICA Interface pronta para seu utilizada em

    produção para entrada, consulta, atualização e exclusão de dados. C R U D.
  5. 8.

    URLS AMIGÁVEIS Esquema limpo e elegante para definição de URLs

    Definidos em um módulo Python que faz o mapeamento de padrões de URL (expressões regulares) com funções Python (views).
  6. 10.

    INTERNACIONALIZAÇÃO Suporte a aplicações multi-idiomas. Permite a especificação de trechos

    para tradução e definir funcionalidades específicas por idioma.
  7. 12.
  8. 13.
  9. 14.
  10. 15.
  11. 16.
  12. 18.
  13. 19.

    MODEL-VIEW-TEMPLATE Model - seus dados View - lógica para processar

    seus dados Template - apresentando seus dados para o usuário
  14. 20.

    MODEL f r o m d j a n g

    o . c o n t r i b . a u t h . m o d e l s i m p o r t U s e r 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 P a l e s t r a n t e ( m o d e l s . M o d e l ) : u s e r n a m e = m o d e l s . F o r e i g n K e y ( U s e r ) t w i t t e r = m o d e l s . C h a r F i e l d ( m a x _ l e n g t h = 2 0 ) c l a s s T r i l h a ( m o d e l s . M o l d e ) : n o 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 , u n i q u e = T r u e ) d a t a = m o d e l s . D a t e T i m e F i e l d ( ) c l a s s P a l e s t r a ( m o d e l s . M o d e l ) : t r i l h a = m o d e l s . F o r e i g n K e y ( T r i l h a ) t i t u l o = m o d e l s . C h a r F i e l d ( m a x _ l e n g t h = 2 5 5 ) p a l e s t r a n t e s = m o d e l s . M a n y T o M a n y ( P a l e s t r a n t e ) r e s u m o = m o d e l s . T e x t F i e l d ( )
  15. 21.

    REPRESENTAÇÃO NO BD B E G I N ; C

    R E A T E T A B L E " s c h e d u l e _ p a l e s t r a n t e " ( " i d " i n t e g e r N O T N U L L P R I M A R Y K E Y , " u s e r n a m e _ i d " i n t e g e r N O T N U L L , " t w i t t e r " v a r c h a r ( 2 0 ) N O T N U L L ) ; C R E A T E T A B L E " s c h e d u l e _ t r i l h a " ( " i d " i n t e g e r N O T N U L L P R I M A R Y K E Y , " n o m e " v a r c h a r ( 5 0 ) N O T N U L L U N I Q U E , " d a t a " d a t e t i m e N O T N U L L ) ; C R E A T E T A B L E " s c h e d u l e _ p a l e s t r a _ p a l e s t r a n t e " ( " i d " i n t e g e r N O T N U L L P R I M A R Y K E Y , " p a l e s t r a _ i d " i n t e g e r N O T N U L L , " p a l e s t r a n t e _ i d " i n t e g e r N O T N U L L R E F E R E N C E S " s c h e d u l e _ p a l e s t r a n t e " ( " i d " ) , U N I Q U E ( " p a l e s t r a _ i d " , " p a l e s t r a n t e _ i d " ) ) ; C R E A T E T A B L E " s c h e d u l e _ p a l e s t r a " ( " i d " i n t e g e r N O T N U L L P R I M A R Y K E Y , " t r i l h a _ i d " i n t e g e r N O T N U L L R E F E R E N C E S " s c h e d u l e _ t r i l h a " ( " i d " ) , " t i t u l o " v a r c h a r ( 2 5 5 ) N O T N U L L , " r e s u m o " t e x t N O T N U L L ) ; C O M M I T ;
  16. 22.

    API Nunca escreva SQL novamente... ...não ser que seja necessário.

    I n [ 1 ] : r e n n e = P a l e s t r a n t e . o b j e c t s . g e t ( t w i t t e r = ' r e n n e r o c h a ' ) I n [ 2 ] : t r i l h a = T r i l h a . o b j e c t s . c r e a t e ( n o m e = ' D e v R o o t s ' , . . . : d a t a = d a t e t i m e . d a t e t i m e ( 2 0 1 3 , 5 , 1 1 ) ) I n [ 3 ] : p a l e s t r a = P a l e s t r a . o b j e c t s . c r e a t e ( . . . : t i t u l o = ' D j a n g o : o f r a m e w o r k w e b . ' , . . . : t r i l h a = t r i l h a , r e s u m o = ' D j a n g o ' ) I n [ 4 ] : T r i l h a . o b j e c t s . f i l t e r ( . . . : p a l e s t r a _ _ t i t u l o = ' D j a n g o : o f r a m e w o r k w e b . ' ) O u t [ 4 ] : [ < T r i l h a : D e v R o o t s > ] I n [ 5 ] : p a l e s t r a . p a l e s t r a n t e s . a l l ( ) O u t [ 5 ] : [ ] I n [ 6 ] : p a l e s t r a . p a l e s t r a n t e . a d d ( r e n n e ) I n [ 7 ] : p a l e s t r a . p a l e s t r a n t e . a l l ( ) O u t [ 7 ] : [ < P a l e s t r a n t e : r e n n e > ]
  17. 23.

    VIEW f r o m d j a n g

    o . h t t p i m p o r t H t t p 4 0 4 d e f d e t a l h e _ p a l e s t r a ( r e q u e s t , p a l e s t r a _ i d ) : t r y : p a l e s t r a = P a l e s t r a . o b j e c t s . g e t ( p k = p a l e s t r a _ i d ) e x c e p t P a l e s t r a . D o e s N o t E x i s t : r a i s e H t t p 4 0 4 r e t u r n r e n d e r _ t o _ r e s p o n s e ( ' p a l e s t r a s / d e t a l h e s . h t m l ' , { ' p a l e s t r a ' : p a l e s t r a } )
  18. 24.

    OUTROS RETORNOS Não precisamos retornar apenas HTML... i m p

    o r t c s v 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 s o m e _ v i e w ( r e q u e s t ) : # C r e a t e t h e H t t p R e s p o n s e o b j e c t w i t h t h e a p p r o p r i a t e C S V h e a d e r . r e s p o n s e = H t t p R e s p o n s e ( c o n t e n t _ t y p e = ' t e x t / c s v ' ) r e s p o n s e [ ' C o n t e n t - D i s p o s i t i o n ' ] = ' a t t a c h m e n t ; f i l e n a m e = " s o m e f i l e n a m e . c s v " ' w r i t e r = c s v . w r i t e r ( r e s p o n s e ) w r i t e r . w r i t e r o w ( [ ' F i r s t r o w ' , ' F o o ' , ' B a r ' , ' B a z ' ] ) w r i t e r . w r i t e r o w ( [ ' S e c o n d r o w ' , ' A ' , ' B ' , ' C ' , ' " T e s t i n g " ' , " H e r e ' s a q u o t e " ] ) r e t u r n r e s p o n s e
  19. 25.

    TEMPLATE base.html < h t m l > < h

    e a d > < t i t l e > { % b l o c k t i t l e % } { % e n d b l o c k % } < / t i t l e > < / h e a d > < b o d y > { % b l o c k c o n t e n t % } { % e n d b l o c k % } < / b o d y > < / h t m l >
  20. 26.

    TEMPLATE palestras.html { % e x t e n d

    s ' b a s e . h t m l ' % } { % b l o c k t i t l e % } D e v C a m p - P a l e s t r a s { % e n d b l o c k % } { % b l o c k c o n t e n t % } < h 1 > P a l e s t r a s < / h 1 > < u l > { % f o r p a l e s t r a i n p a l e s t r a s % } < l i > { { p a l e s t r a . t i t u l o } } < b r > { { p a l e s t r a . r e s u m o } } < / l i > { % e m p t y % } < l i > N e n h u m a p a l e s t r a : - ( < / l i > { % e n d f o r % } < / u l > { % e n d b l o c k % }
  21. 27.

    URLS f r o m d j a n g

    o . c o n f . u r l s i m p o r t p a t t e r n s , u r l f r o m d j a n g o . v i e w s . g e n e r i c . s i m p l e i m p o r t d i r e c t _ t o _ t e m p l a t e u r l p a t t e r n s = p a t t e r n s ( ' ' , ( r ' ^ / $ ' , d i r e c t _ t o _ t e m p l a t e , { ' t e m p l a t e ' : ' i n d e x . h t m l ' } ) , u r l ( r ' ^ p a l e s t r a s / $ ' , ' s c h e d u l e . v i e w s . p a l e s t r a s ' , n a m e = ' p a l e s t r a s ' ) , u r l ( r ' ^ p a l e s t r a / ( ? P < p a l e s t r a _ i d > \ d + ) / $ ' , ' s c h e d u l e . v i e w s . d e t a l h e _ p a l e s t r a ' , n a m e = ' d e t a l h e _ p a l e s t r a ' ) , ) )
  22. 28.

    FORMULÁRIOS Biblioteca de manipulação de formulários. Geração automática do HTML

    do formulário. Valida dados submetidos. Reexibe o formulário caso existam erros de validação.
  23. 29.

    FORMULÁRIO SIMPLES f r o m d j a n

    g o i m p o r t f o r m s c l a s s C o n t a c t F o r m ( f o r m s . F o r m ) : 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 = 1 0 0 ) m e s s a g e = f o r m s . C h a r F i e l d ( ) s e n d e r = f o r m s . 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 ) d e f c l e a n _ m e s s a g e ( s e l f , v a l u e ) : b a d _ w o r d s _ l i s t = [ ' f i * * * * * * * t a ' , ' v a * * * * * * e r ' , ] i f v a l u e i n b a d _ w o r d s _ l i s t : r a i s e V a l i d a t i o n E r r o r ( ' S e m p a l a v r õ e s ! ' )
  24. 30.

    FORMULÁRIO SIMPLES 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 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 R e d i r e c t d e f c o n t a c t ( r e q u e s t ) : i f r e q u e s t . m e t h o d = = ' P O S T ' : # I f t h e f o r m h a s b e e n s u b m i t t e d . . . f o r m = C o n t a c t F o r m ( r e q u e s t . P O S T ) # A f o r m b o u n d t o t h e P O S T d a t a i f f o r m . i s _ v a l i d ( ) : # A l l v a l i d a t i o n r u l e s p a s s # P r o c e s s t h e d a t a i n f o r m . c l e a n e d _ d a t a # . . . 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 ( ' / t h a n k s / ' ) # R e d i r e c t a f t e r P O S T e l s e : f o r m = C o n t a c t F o r m ( ) # A n u n b o u n d f o r m r e t u r n r e n d e r ( r e q u e s t , ' c o n t a c t . h t m l ' , { ' f o r m ' : f o r m , } )
  25. 31.

    MODEL FORM f r o m d j a n

    g o i m p o r t f o r m s f r o m s c h e d u l e . m o d e l s i m p o r t P a l e s t r a c l a s s P a l e s t r a F o r m ( f o r m s . M o d e l F o r m ) : c l a s s M e t a : m o d e l = P a l e s t r a
  26. 32.

    INICIANDO UM PROJETO $ d j a n g o

    - a d m i n s t a r t p r o j e c t d e v c a m p d e v c a m p / m a n a g e . p y d e v c a m p / _ _ i n i t _ _ . p y s e t t i n g s . p y u r l s . p y w s g i . p y
  27. 33.

    APLICAÇÕES O ambiente montado é um projeto. Agora você precisa

    criar aplicações dentro deste projeto. Filosofia do Unix: Write programs that do one thing and do it well
  28. 34.

    CRIANDO UMA APPLICAÇÃO $ d j a n g o

    - a d m i n s t a r t a p p s c h e d u l e d e v c a m p / m a n a g e . p y d e v c a m p / s c h e d u l e / _ _ i n i t _ _ . p y m o d e l s . p y t e s t s . p y v i e w s . p y
  29. 35.

    APLICAÇÕES - EXEMPLOS South - migrações de bancos de dados

    django-registration - registro de contas de usuários django-piston - aplicações REST django-debug-toolbar - barra de debug para desenvolvedores
  30. 37.

    Documentação oficial Listas de discussão django-users django-brasil IRC (Freenode) #django-br

    #django Vídeos da DjangoCon https://www.djangoproject.com/ http://pyvideo.org/