django: o framework web para perfeccionistas com prazos

Post on 15-Jan-2015

3.082 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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.

2

Desenvolvendo

3

Desenvolvendo

aplicações web

4

Desenvolvendo

aplicações webem tempo

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? :)

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.

7

35O cliente procurou três empresas e elas disseram

que construiriam o sistema em 35 dias.

8

30

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

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.

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

11

cola tudo, faz alguns ajustes

12

Traduz as partes in english, junta tudo e

13

10DEZ dias depois

14

o código está pronto.

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

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.

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,

18

É bom só pra você.

[...]

19

A satisfação do seu cliente é fundamental.

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.

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

22

Welcome to the Django!

Django.

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

23

Django Pony, mascote não oficial do Django.

24

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

25

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

26

Inclusive apresentando palestras de alto nível.

27

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

28

E os ataques dele são mortais.

29

mas qual é a relação?

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

30

Magia

Magia :)

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.

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.

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.

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

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.

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.

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

38

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

camadas?

39

MVC?+-+/-

40

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

41

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

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.

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.

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.

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

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.

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?

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.

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

50

Cliente (browser)

URL

Banco de dados

Template

View

Model

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

51

E mais...

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

52

E mais...

6 linhas de código Python.

Com seis linhas de código Python,

53

E mais...

6 linhas de código Python.

5 linhas de html/template.

cinco linhas de código da template engine do Django

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.

55

Amazing!!!

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

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.

57

Autenticação

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

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.

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.

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.

61Django Forms

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

Vamos ver um pouco do Django Forms...

62Django Forms

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

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

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?

64Django Forms

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

ModelForm :)

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

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.

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?

[...]

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

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.

69

L10n

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

Totalmente assustador.

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?

71

2/2

Pergunta número 2.

72

Da pra fazer melhor?

Ainda tem mais coisas?

Da pra melhorar a situação? o__O'

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.

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.

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?

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.

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?

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.

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.

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.

81

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

82

Então preenchemos o título.

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

84

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

E sabe o que é realmente bacana nisso tudo?

85

44 linhas de código.

[...]

E defintivamente, eu preciso dizer que o Django Admin

86

Merece a dancinha

merece a dancinha do Gato Matrix.

87

Tem mais?

Então, depois disso tudo, tem mais?

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

89

Algumas considerações

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

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

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.

92

E agora?

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

93www.djangoproject.com

Site oficial: www.djangoproject.com =)

94www.djangobrasil.org

Site da comunidade Django Brasil: www.djangobrasil.org

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

96www.djangosites.org

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

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

98www.djangovideos.com

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

www.djangovideos.com

99

?/∞

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

100

@franciscosouzafrancisco@franciscosouza.net

DjangoO framework web para perfeccionistas com prazos

dê endi.

top related