django: o framework web para perfeccionistas com prazos

100
1 Boa noite pessoal, meu nome é Francisco :) Hoje vivemos num tempo de pressa, de urgências e tudo mais. Temos prazos para tudo, e alguma pessoas estão sempre nos lembrando deles, e nos dando a ideia de que estamos atrasados.

Upload: francisco-souza

Post on 15-Jan-2015

3.081 views

Category:

Technology


1 download

DESCRIPTION

Slides com notas da palestra "Django: o framework web para perfeccionistas com prazos".

TRANSCRIPT

Page 1: Django: o framework web para perfeccionistas com prazos

1

Boa noite pessoal, meu nome é Francisco :)

Hoje vivemos num tempo de pressa, de urgências e tudo mais. Temos prazos para tudo, e alguma pessoas estão sempre nos lembrando deles, e nos dando a ideia de que estamos atrasados.

Page 2: Django: o framework web para perfeccionistas com prazos

2

Desenvolvendo

Page 3: Django: o framework web para perfeccionistas com prazos

3

Desenvolvendo

aplicações web

Page 4: Django: o framework web para perfeccionistas com prazos

4

Desenvolvendo

aplicações webem tempo

Page 5: Django: o framework web para perfeccionistas com prazos

5

Desenvolvendo

aplicações webem tempo

RECORDE.

Esta pressa atingiu o desenvolvimento de software, e as pessoas estão sempre à busca de como desenvolver aplicações web em tempo recorde, mais rápido que todo mundo, para conquistar os clientes.

Vamos a uma análise de falso caso? :)

Page 6: Django: o framework web para perfeccionistas com prazos

6

Um cliente PRECISA de uma aplicação simples de notícias, enquetes e banners, com login para um sistema administrativo administrativo, onde essas notícias, enquetes e banners serão gerenciados.

Page 7: Django: o framework web para perfeccionistas com prazos

7

35O cliente procurou três empresas e elas disseram

que construiriam o sistema em 35 dias.

Page 8: Django: o framework web para perfeccionistas com prazos

8

30

A melhor proposta que o cliente consegue é 30 dias de uma empresa nova no mercado.

Page 9: Django: o framework web para perfeccionistas com prazos

9

20

O problema é que o cliente quer tudo isso em 20 dias, e está disposto a pagar por isso. Dinheiro não é problema para este cliente.

Você, que ama dinheiro e é um mestre de usabilidade, topa o projeto.

Page 10: Django: o framework web para perfeccionistas com prazos

10

E você é esperto.

Você conhece alguns sites que fornecem snippets de código prontinho pra você usar na sua aplicação, você baixa tudo, copia ...

Page 11: Django: o framework web para perfeccionistas com prazos

11

cola tudo, faz alguns ajustes

Page 12: Django: o framework web para perfeccionistas com prazos

12

Traduz as partes in english, junta tudo e

Page 13: Django: o framework web para perfeccionistas com prazos

13

10DEZ dias depois

Page 14: Django: o framework web para perfeccionistas com prazos

14

o código está pronto.

Page 15: Django: o framework web para perfeccionistas com prazos

15

O teclado mais rápido do Oeste.

Você vai até o seu cliente com a aplicação prontinha.

Ele fica realmente impressionado em te ver lá DEZ dias depois. Você terminou! Ele precisava da aplicação em 20 dias, você fez na metade do tempo.

A melhor proposta que ele recebeu antes de você era de 30 dias. Você foi três vezes mais rápido do que a melhor proposta.

O seu cliente tem plena certeza de que você é o cara mais rápido do mundo. E você provavelmente é.

O problema é que não é só a velocidade que importa...

Page 16: Django: o framework web para perfeccionistas com prazos

16

O teclado mais rápido do Oeste.

#$%&*&@#@#

#@$%

Depois de ver a aplicação “funcionando”, o seu cliente não mudou de ideia, ele continua te achando o mais rápido.

O título de teclado rápido do Oeste é seu, você é o mais rápido em escrever código. Mas desenvolver software não é só escrever código, desenvolver software não é só correr para escrever mais código em menos tempo.

Page 17: Django: o framework web para perfeccionistas com prazos

17

Você é o número 1 em velocidade, mas o seu cliente precisava de um produto de qualidade num tempo inferior ao tempo necessário para atingir tal qualidade.

Você deveria ter entregado um meio produto, mas você foi rápido o suficiente para entregar um produto meia boca.

Você ganhou um título. Você é rápido, você chega na frente, você é o melhor em algo.

O problema é que ser o melhor em algo que não é importante nem sempre é bom, e quando é bom,

Page 18: Django: o framework web para perfeccionistas com prazos

18

É bom só pra você.

[...]

Page 19: Django: o framework web para perfeccionistas com prazos

19

A satisfação do seu cliente é fundamental.

Page 20: Django: o framework web para perfeccionistas com prazos

20

DjangoO framework web para perfeccionistas com prazos

Hoje nós vamos falar de um framework para perfeccionistas com prazos, desenvolvedores que conhecem e respeitam os prazos, mas respeitam, acima de tudo, a qualidade do produto a ser desenvolvido.

Page 21: Django: o framework web para perfeccionistas com prazos

21quem é você?

Antes de seguir em frente, quero rapidamente conhecer vocês.

Alguém aqui conhece conhece e/ou tem experiênca com:

- O básico de Python?•- Orientação a Objetos?•- Desenvolvimento web?•- Estrutura de funcionamento da web (protocolo

HTTP, request, response)?

Page 22: Django: o framework web para perfeccionistas com prazos

22

Welcome to the Django!

Django.

O que é Django? Framework pra perceccionistas com prazo? Qqisso?!?!?! E aquele pônei?

Page 23: Django: o framework web para perfeccionistas com prazos

23

Django Pony, mascote não oficial do Django.

Page 24: Django: o framework web para perfeccionistas com prazos

24

Internacionalmente conhecido por suas aparições na televisão.

Page 25: Django: o framework web para perfeccionistas com prazos

25

Também costuma estar presente nas conferências de desenvolvimento de software.

Page 26: Django: o framework web para perfeccionistas com prazos

26

Inclusive apresentando palestras de alto nível.

Page 27: Django: o framework web para perfeccionistas com prazos

27

Mas é importante respeitar o Django Pony, pois ele pode te atacar repentinamente.

Page 28: Django: o framework web para perfeccionistas com prazos

28

E os ataques dele são mortais.

Page 29: Django: o framework web para perfeccionistas com prazos

29

mas qual é a relação?

Qual é a relação entre um pônei rosa e um framework web?

Page 30: Django: o framework web para perfeccionistas com prazos

30

Magia

Magia :)

Page 31: Django: o framework web para perfeccionistas com prazos

31

Já temos um cliente insatisfeito, eu já conheço vocês, vocês já conhecem um pônei rosa, tá na hora de conhecer esse tal de Django né?!

O Django é um framework, uma caixa de ferramentas à sua disposição para construir aplicações web de qualidade em tempo recorde.

Page 32: Django: o framework web para perfeccionistas com prazos

32

O Django foi criado para o portal do Lawrence Journal World, um jornal da cidade de Lawrence, no estado do Kansas, nos Estados Unidos.

Page 33: Django: o framework web para perfeccionistas com prazos

33

Django vem sido adotado em outros projetos de larga escala.

Na onda crescente de cloud computing, Django serviu como base para o projeto Nebula, plataforma de cloud computing da Nasa e para o App Engine, plataforma de cloud computing do Google.

Page 34: Django: o framework web para perfeccionistas com prazos

34

Abrindo a caixa

Sabemos que Django é como se fosse uma caixa de ferramentas. Vamos olhar dentro da nossa caixa de ferramentas e entendê-la melhor :)

Page 35: Django: o framework web para perfeccionistas com prazos

35

Orientado a aplicações

Django é orientado a aplicações, aplicações plugáveis.

Você tem blocos de montar que integram-se para a construção dos seus projetos. Você encontra várias aplicações reusáveis na internet.

Page 36: Django: o framework web para perfeccionistas com prazos

36

E você pode montar esses blocos com muita facilidade. Django é fácil, e lhe permite caminhar por um caminho de qualidade com relativa facilidade.

Se o seu projeto vai usar n aplicações plugáveis ou você vai desenvolver todas “no braço”, você certamente não encontrará tanta dificuldade e você provavelmente vai se divertir.

Page 37: Django: o framework web para perfeccionistas com prazos

37

Open source: Django é open source, pertence à comunidade, é meu, é seu.

Se você acha que Django tem um problema, você pode reportá-lo e até corrigi-lo. Você pode fazer um fork do Django para adequá-lo à sua necessidade, ou qualquer coisa do tipo :)

Page 38: Django: o framework web para perfeccionistas com prazos

38

MVC?Django é baseado em MVC? Eu trabalho nestas três

camadas?

Page 39: Django: o framework web para perfeccionistas com prazos

39

MVC?+-+/-

Page 40: Django: o framework web para perfeccionistas com prazos

40

Django organiza-se utilizando MTV: Model, template e view.

Page 41: Django: o framework web para perfeccionistas com prazos

41

Essa é a estrutura completa de funcionamento de um request/response no Django, mas não é importante agora entender isso :)

Page 42: Django: o framework web para perfeccionistas com prazos

42

Cliente (browser)

URLTemplate

View

Model

Banco de dados

Esta é uma estrutura mais simples. Útil o suficiente para o nosso exemplo.

Temos nosso browser, o Firefox, por exemplo. Ele vai acessar uma página de um sistema feito em Django.

Page 43: Django: o framework web para perfeccionistas com prazos

43

GET /livros

URLTemplate

View

Model

Banco de dados

A página a ser acessada está na URL /livros. O cliente faz então a requisição em /livros.

Page 44: Django: o framework web para perfeccionistas com prazos

44

GET /livros

Módulo de URLsTemplate

View

Model

Banco de dados

(r'^livros/$', 'views.listar_livros'),

Neste momento o módulo de URLs do Django entra em ação para detectar qual a view responsável por tratar o acesso à URL /livros.

A URL /livros está mapeada para a view listar_livros. Uma linha de código e esta URL está mapeada utilizando expressões regulares.

Page 45: Django: o framework web para perfeccionistas com prazos

45

GET /livros

Módulo de URLsTemplate

listar_livros(request)

Model

Banco de dados

def listar_livros(request): livros = Livro.objects.all() return render_to_response('livros.html', locals())

Uma view é uma função, a função listar_livros vai receber nosso request e tratá-lo para retornar um response.

Trata-se de um ponto “polêmico” do Django. No Django, uma view faz um trabalho semelhante ao trabalho feito por controllers em outros frameworks. Mas não se espante, não vamos escrever nenhum select na camada de interface ou injetar lógica de negócio lá.

O que acontece no Django é que a camada de interface não se chama view, e só. Enxergue apenas como uma questão de nomenclatura :)

Page 46: Django: o framework web para perfeccionistas com prazos

46

listar_livros(request)

GET /livros

Módulo de URLsTemplate

Model: classe Livro

Banco de dados

class Livro(Model): titulo = CharField(max_length = 100)

def listar_livros(request): livros = Livro.objects.all() return render_to_response('livros.html', locals())

A primeira linha da nossa função view faz uma chamada a uma classe Livro, um model. Um objeto que representa, no nosso sistema, o livro verdadeiramente falando. Esta classe também é responsável por fazer a comunicação com o banco de dados, então aqui estamos buscando todos os livros armazenados no banco de dados.

O código da classe é bem explicativo: mostra que um livro é um Model e tem um título.

Page 47: Django: o framework web para perfeccionistas com prazos

47

Model: classe Livro

GET /livros

Módulo de URLsTemplate

Não importa (:

listar_livros(request)

def listar_livros(request): livros = Livro.objects.all() return render_to_response('livros.html', locals())

Não importa o banco de dados.

O Django é capaz de lidar com inúmeros bancos de dados, e é bem provável que pra você não seja muito importante o que está abaixo da camada de modelo. A menos que você tenha um sistema muito grande.

Vamos voltar então à nossa view, que tem duas linhas de código. Já temos a lista de livros “em mãos”, agora podemos entregar ela para o nosso cliente, certo?

Page 48: Django: o framework web para perfeccionistas com prazos

48

listar_livros(request)

Model: classe Livro

GET /livros

Módulo de URLslivros.html

def listar_livros(request): livros = Livro.objects.all() return render_to_response('livros.html', locals())

<ul> {% for livro in livros %} <li>{{ livro.titulo }}</li> {% endfor %}</ul>

Antes, entregamos ao template engine do Django que processa tudo isso e gera a saída para o nosso cliente.

Page 49: Django: o framework web para perfeccionistas com prazos

49

livros.html

listar_livros(request)

Model: classe Livro

Módulo de URLs

GET /livros

A saída não é tão bonita, mas você vai poder contar com um designer esperto pra te ajudar com isso :)

Page 50: Django: o framework web para perfeccionistas com prazos

50

Cliente (browser)

URL

Banco de dados

Template

View

Model

E agora você pode entender de onde vem o MTV :)

Page 51: Django: o framework web para perfeccionistas com prazos

51

E mais...

E tem mais uma coisa que talvez você não tenha percebido ainda.

Page 52: Django: o framework web para perfeccionistas com prazos

52

E mais...

6 linhas de código Python.

Com seis linhas de código Python,

Page 53: Django: o framework web para perfeccionistas com prazos

53

E mais...

6 linhas de código Python.

5 linhas de html/template.

cinco linhas de código da template engine do Django

Page 54: Django: o framework web para perfeccionistas com prazos

54

E mais...

6 linhas de código Python.

5 linhas de html/template.SQL?

e NENHUMA linha SQL nós construímos uma listagem com todos os registros de uma entidade no banco de dados.

Page 55: Django: o framework web para perfeccionistas com prazos

55

Amazing!!!

Como diria o Steve Jobs: it's amazing! =D

Page 56: Django: o framework web para perfeccionistas com prazos

56

Amazing!!!

Asombroso!!!

Surpreendente!!!

i18nDjango tem um framework de internacionalização

extremamente simples de utilizar, que usa o gettext para traduzir termos.

Escrever aplicações em vários idiomas no Django é brincadeira de criança.

Page 57: Django: o framework web para perfeccionistas com prazos

57

Autenticação

Django também tem autenticação integrada, com cadastro de usuários e grupos, e gerenciamento de permissões.

Page 58: Django: o framework web para perfeccionistas com prazos

58

@login_requireddef listar_livros(request): livros = Livro.objects.all() return render_to_response('livros.html', locals())

Autenticação

Com mais uma linha de código, um simples decorator, poderíamos exigir que o usuário estivesse logado para ver a lista de livros.

Page 59: Django: o framework web para perfeccionistas com prazos

59

Controle de permissão

Junto ao cadastro de usuários, o sistema de autenticação do Django também integra controle de permissão.

Page 60: Django: o framework web para perfeccionistas com prazos

60

Controle de permissão

@permission_required('livros.pode_listar')def listar_livros(request): livros = Livro.objects.all() return render_to_response('livros.html', locals())

Trocando o login_required por permission_required, podemos criar uma permissão específica e dizer que apenas usuários ou grupos de usuários específicos teriam acesso àquela view.

Page 61: Django: o framework web para perfeccionistas com prazos

61Django Forms

Um outro recurso do Django bastante comentado é o framework de formulários, chamado Django Forms.

Vamos ver um pouco do Django Forms...

Page 62: Django: o framework web para perfeccionistas com prazos

62Django Forms

class LivroForm(Form): titulo = CharField(max_length = 100)

Aqui estamos definindo um formulário chamado LivroForm que tem um campo título.

Page 63: Django: o framework web para perfeccionistas com prazos

63Django Forms

class LivroForm(Form): titulo = CharField(max_length = 100)

class Livro(Model): titulo = CharField(max_length = 100)

Note que definimos o formulário praticamente da mesma forma que definimos o model, estamos repetindo código né?!

Isso não é muito bom, e até fere um dos princípios do Django. Será que não teria uma forma de somar o Model e o Form?

Page 64: Django: o framework web para perfeccionistas com prazos

64Django Forms

class LivroForm(ModelForm): class Meta: model = Livro

ModelForm :)

Criamos o form e dizemos qual é o model “dono” dele.

Page 65: Django: o framework web para perfeccionistas com prazos

65Django Forms

class LivroForm(ModelForm): class Meta: model = Livro

class Livro(Model): titulo = CharField(max_length = 100) autor = CharField(max_length = 255) descricao = CharField(max_length = 1024)

Assim, independente de quantos campos existirem no model, todos vão ser acessados no form e serão exibidos na tela quando formos mostrar o form.

O formulário também vai herdar toda a validação do model, assim, teremos formulários prontinhos para nossas aplicações web só esperando para serem exibidos nos templates e tratados nas views.

É mágico e faz você andar muito mais rápido.

Page 66: Django: o framework web para perfeccionistas com prazos

66Django Forms

class LivroForm(ModelForm): class Meta: model = Livro

class Livro(Model): titulo = CharField(max_length = 100) autor = CharField(max_length = 255) descricao = CharField(max_length = 1024)

Tem um desses pra Fórmula 1?

[...]

Page 67: Django: o framework web para perfeccionistas com prazos

67Django Forms

class LivroForm(ModelForm): class Meta: model = Livro

class Livro(Model): titulo = CharField(max_length = 100) autor = CharField(max_length = 255) descricao = CharField(max_length = 1024)

Tá de sacanagem?!

Tem um desses pra Fórmula 1?

Não tem na F1, mas tem no Django, de verdade :)

Page 68: Django: o framework web para perfeccionistas com prazos

68

L10n

class PessoaForm(Form): nome = CharField(max_length = 100) cpf = CPFField() telefone = BRPhoneField()

Além da internacionaliação e do Django Forms, também podemos contar com os recursos de Localization do Django.

Lembra que os formulários têm validação automática? Assim, podemos validar o tamanho do campo, se ele foi preenchido ou não, se ele é inteiro, se é uma data.

Com os recursos de Localization do Django, podemos ir além, e validar automagicamente se um campo é um CPF, um CNPJ, um CEP ou um telefone no formato brasileiro.

Page 69: Django: o framework web para perfeccionistas com prazos

69

L10n

class PessoaForm(Form): nome = CharField(max_length = 100) cpf = CPFField() telefone = BRPhoneField()

Totalmente assustador.

Page 70: Django: o framework web para perfeccionistas com prazos

70

1/2

Bom, esse é um momento em que eu preciso respirar e preciso de interação. Eu preciso de no mínimo duas perguntas para seguir com a palestra, então agora é com vocês.

O número grande é o contador de perguntas, preciso que vocês façam ele chegar no dois para prosseguirmos.

Vamos à pergunta número 1?

Page 71: Django: o framework web para perfeccionistas com prazos

71

2/2

Pergunta número 2.

Page 72: Django: o framework web para perfeccionistas com prazos

72

Da pra fazer melhor?

Ainda tem mais coisas?

Da pra melhorar a situação? o__O'

Page 73: Django: o framework web para perfeccionistas com prazos

73

Django admin

Sim :)

Não sei quantas pessoas aqui já construíram áreas administrativas em sites para gerir conteúdo e entidades. Por exemplo, um sisteminha de notícia com login para você publicar essas notícias. Definitivamente, é algo trabalhoso e que, por vezes, pode fazer com que o desenvolver perca alguma noite de sono.

É claro que com recursos de L10n, i18n e o Django Forms, tudo isso fica MUITO mais fácil, mas o Django ainda tem algo muito melhor para te dar noites tranquilas de sono.

Page 74: Django: o framework web para perfeccionistas com prazos

74

class Livro(Model): titulo = CharField(max_length = 100)

Vamos à prática, bem melhor assim.

Lembram-se do nosso model Livro? Ele tem um título, certo? Então aí está ele.

Page 75: Django: o framework web para perfeccionistas com prazos

75

class Livro(Model): titulo = CharField(max_length = 100)

admin.site.register(Livro)

Vamos chamar o tal do admin, dentro do site do admin, vamos pedir para ele registrar o nosso model, a nossa classe Livro.

Tudo tranquilo até aqui?

Page 76: Django: o framework web para perfeccionistas com prazos

76

class Livro(Model): titulo = CharField(max_length = 100)

admin.site.register(Livro)

(r'^admin/', include(admin.site.urls)),

Lembra lá atrás quando fizemos um mapeamento de uma URL para acessar a listagem de views? Precisamos fazer algo semelhante com o admin, precisamos dar uma URL a ele, e vamos entregar a ele a URL /admin.

Page 77: Django: o framework web para perfeccionistas com prazos

77

class Livro(Model): titulo = CharField(max_length = 100)

admin.site.register(Livro)

(r'^admin/', include(admin.site.urls)),

Resultado?

Então, o que acontece quando acessamos /admin, que foi a URL mapeada?

Page 78: Django: o framework web para perfeccionistas com prazos

78

Tela de login, é uma área administrativa né?!

Lembra da chatisse de implementar uma gerência de usuários, sistema de login, tratar sessão, colar tudo e traduzir lá do começo? Esquece, existem formas mais legais e inteligentes de gerenciar isso.

Apenas preencha o nome de usuário e a senha, e clique em Acessar.

Page 79: Django: o framework web para perfeccionistas com prazos

79

E cá estamos. Na página inicial de administração. Note que não está em inglês :) i18n é a lei =P

Veja na coluna da direita um histórico de ações do usuário (que está vazio, obviamente).

O mais importante está em destaque, nosso model Livros está ali, com duas opções: Adicionar e Modificar.

Page 80: Django: o framework web para perfeccionistas com prazos

80

Clicando em Adicionar, temos uma tela para o cadastro do Livro. Os campos exibidos são os atributos do model, que no nosso caso é apenas titulo.

Page 81: Django: o framework web para perfeccionistas com prazos

81

Se clicarmos em Salvar sem preencher o título, olha que lindo: ele valida, em português também!

Page 82: Django: o framework web para perfeccionistas com prazos

82

Então preenchemos o título.

Page 83: Django: o framework web para perfeccionistas com prazos

83

E clicamos em salvar para ver a listagem e a mensagem de que nosso amado livro foi salvo com sucesso no banco de dados =D

Page 84: Django: o framework web para perfeccionistas com prazos

84

E se clicamos sobre o livro, podemos editá-lo ou excluí-lo.

E sabe o que é realmente bacana nisso tudo?

Page 85: Django: o framework web para perfeccionistas com prazos

85

44 linhas de código.

[...]

E defintivamente, eu preciso dizer que o Django Admin

Page 86: Django: o framework web para perfeccionistas com prazos

86

Merece a dancinha

merece a dancinha do Gato Matrix.

Page 87: Django: o framework web para perfeccionistas com prazos

87

Tem mais?

Então, depois disso tudo, tem mais?

Page 88: Django: o framework web para perfeccionistas com prazos

88

Tem mais?

PaginaçãoViews genéricasFeedsMensagensCSRFSignalsTestes automatizados[...]

Com certeza.

Django conta com uma bilbioteca de paginação nativa;

views genéricas para automatizar CRUDs;

views para feeds (Atom ou RSS, o que você quiser :D);

Um framework de mensagens simples e poderoso;

CSRF nativo

Signals

Suporte nativo a testes, com cliente de testes

Etc etc etc

Page 89: Django: o framework web para perfeccionistas com prazos

89

Algumas considerações

Antes de finalizar, vamos a algumas considerações.

Page 90: Django: o framework web para perfeccionistas com prazos

90

Eu não sei Python

Eu não sei Python, tem problema?

A vantagem de conhecer profundamente a linguagem Python é que ao desenvolver aplicações em Django, podemos explorar melhor os melhores recursos da linguagem Python para construir o seu software.

Assim, o ideal é aprender Django e Python paralelamente, ou até aprender Python antes, e não apenas o suficiente de Python para usar o Django Admin :)

Page 91: Django: o framework web para perfeccionistas com prazos

91

Onde e como hospedar?

“Python é a única linguagem de programação com mais frameworks web do que palavras reservadas”. Esta é uma afirmação relativamente famosa no mundo Python.

Python tem um problema de excesso de frameworks, e com isso veio um problema na forma como os frameworks se comunicavam com os servidores web.

Para solucionar o problema, foi criado o WSGI, que padroniza a forma como frameworks Python se comunicam com servidores web.

Assim, basta que o servidor web tenha uma interface WSGI que você poderá utilizar o Django ou outro framework Python.

Alguns servidores que podem ser utilizados: Apache, IIS, Nginx, Passenger, dentre outros.

Page 92: Django: o framework web para perfeccionistas com prazos

92

E agora?

E agora, o que fazer? Como prosseguir com o Django? Quais são os links bacanas pra seguir em frente?

Page 93: Django: o framework web para perfeccionistas com prazos

93www.djangoproject.com

Site oficial: www.djangoproject.com =)

Page 94: Django: o framework web para perfeccionistas com prazos

94www.djangobrasil.org

Site da comunidade Django Brasil: www.djangobrasil.org

Page 95: Django: o framework web para perfeccionistas com prazos

95www.aprendendodjango.com

Quer aprender Django fácil fácil?

Aprendendo Django no Planeta Terra é um livro gratuito, disponível em formato hipertexto (online) e PDF.

Veja o site: www.aprendendodjango.com

Page 96: Django: o framework web para perfeccionistas com prazos

96www.djangosites.org

Sentiu falta de alguns sites em Django? Confira neste link: www.djangosites.org

Page 97: Django: o framework web para perfeccionistas com prazos

97

groups.google.com/group/django-brasil

Conheça o grupo de desenvolvedores de Django no Brasil inteiro, lá você vai encontrar feras e o apoio necessário para se tornar um ninja em Django.

http://groups.google.com/group/django-brasil

Page 98: Django: o framework web para perfeccionistas com prazos

98www.djangovideos.com

O site Django Videos conta com vários vídeos sobre Django, contando com screencasts, palestras, etc. :)

www.djangovideos.com

Page 99: Django: o framework web para perfeccionistas com prazos

99

?/∞

Agora é com vocês, perguntem à vontade ;)

Page 100: Django: o framework web para perfeccionistas com prazos

100

@[email protected]

DjangoO framework web para perfeccionistas com prazos

dê endi.