Slide 1

Slide 1 text

DJANGO: O FRAMEWORK WEB PARA PERFECCIONISTAS COM PRAZOS. 11 / 05 / 2013

Slide 2

Slide 2 text

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/

Slide 3

Slide 3 text

O QUE É DJANGO?

Slide 4

Slide 4 text

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.

Slide 5

Slide 5 text

PRINCIPAIS FUNCIONALIDADES

Slide 6

Slide 6 text

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.

Slide 7

Slide 7 text

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.

Slide 8

Slide 8 text

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).

Slide 9

Slide 9 text

SISTEMA DE TEMPLATES Linguagem de templates amigável para designers. Facilita separação de código e apresentação.

Slide 10

Slide 10 text

INTERNACIONALIZAÇÃO Suporte a aplicações multi-idiomas. Permite a especificação de trechos para tradução e definir funcionalidades específicas por idioma.

Slide 11

Slide 11 text

QUEM UTILIZA???

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

ARQUITETURA

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

MODEL-VIEW-TEMPLATE Model - seus dados View - lógica para processar seus dados Template - apresentando seus dados para o usuário

Slide 20

Slide 20 text

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 ( )

Slide 21

Slide 21 text

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 ;

Slide 22

Slide 22 text

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 > ]

Slide 23

Slide 23 text

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 } )

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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 >

Slide 26

Slide 26 text

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 % }

Slide 27

Slide 27 text

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 ' ) , ) )

Slide 28

Slide 28 text

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.

Slide 29

Slide 29 text

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 ! ' )

Slide 30

Slide 30 text

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 , } )

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

QUERO SABER MAIS

Slide 37

Slide 37 text

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/

Slide 38

Slide 38 text

OBRIGADO! @RENNEROCHA http://rennerocha.com/ renne@rennerocha.com