Django para desenvolvimento webPorque ser repetitivo e chato.
Arthur Furlan (afurlan)[email protected]
11 de Maio de 2010
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
”Django focuses on automating as much aspossible and adhering to the DRY principle.”
Django Project - http://djangoproject.com
Mais sobre o Django
Framework web voltado ao desenvolvimento agil
Torna facil e rapido tarefas simples do desenvolvimento web
Escrito com a linguagem de programacao Python
Django Reinhardt
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Mais sobre o Django
Framework web voltado ao desenvolvimento agil
Torna facil e rapido tarefas simples do desenvolvimento web
Escrito com a linguagem de programacao Python
Django Reinhardt
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Mais sobre o Django
Framework web voltado ao desenvolvimento agil
Torna facil e rapido tarefas simples do desenvolvimento web
Escrito com a linguagem de programacao Python
Django Reinhardt
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Mais sobre o Django
Framework web voltado ao desenvolvimento agil
Torna facil e rapido tarefas simples do desenvolvimento web
Escrito com a linguagem de programacao Python
Django Reinhardt
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Mais sobre o Django
Framework web voltado ao desenvolvimento agil
Torna facil e rapido tarefas simples do desenvolvimento web
Escrito com a linguagem de programacao Python
Django Reinhardt
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Principais caracterısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flexıvel de URLs
Sistema de cache
Internacionalizacao
Reusabilidade (DRY)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Principais caracterısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flexıvel de URLs
Sistema de cache
Internacionalizacao
Reusabilidade (DRY)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Principais caracterısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flexıvel de URLs
Sistema de cache
Internacionalizacao
Reusabilidade (DRY)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Principais caracterısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flexıvel de URLs
Sistema de cache
Internacionalizacao
Reusabilidade (DRY)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Principais caracterısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flexıvel de URLs
Sistema de cache
Internacionalizacao
Reusabilidade (DRY)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Principais caracterısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flexıvel de URLs
Sistema de cache
Internacionalizacao
Reusabilidade (DRY)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Principais caracterısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flexıvel de URLs
Sistema de cache
Internacionalizacao
Reusabilidade (DRY)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Principais caracterısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flexıvel de URLs
Sistema de cache
Internacionalizacao
Reusabilidade (DRY)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Principais caracterısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flexıvel de URLs
Sistema de cache
Internacionalizacao
Reusabilidade (DRY)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
O padrao MVC no Django
MVC X MTV
Model (Model)
Template (View)
View (Controller)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
O padrao MVC no Django
MVC X MTV
Model (Model)
Template (View)
View (Controller)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
O padrao MVC no Django
MVC X MTV
Model (Model)
Template (View)
View (Controller)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Projetos e aplicacoes
Sistemas em Django sao divididos em projetos e aplicacoes
Um projeto pode conter varias aplicacoes
Uma aplicacao pode fazer parte de varios projetos
O que e um projeto Django?
Uma instancia de Django: configuracoes, aplicacoes, etc.
O que e uma aplicacao Django?
Qualquer trecho de codigo que possa ser reutilizado
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Projetos e aplicacoes
Sistemas em Django sao divididos em projetos e aplicacoes
Um projeto pode conter varias aplicacoes
Uma aplicacao pode fazer parte de varios projetos
O que e um projeto Django?
Uma instancia de Django: configuracoes, aplicacoes, etc.
O que e uma aplicacao Django?
Qualquer trecho de codigo que possa ser reutilizado
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Projetos e aplicacoes
Sistemas em Django sao divididos em projetos e aplicacoes
Um projeto pode conter varias aplicacoes
Uma aplicacao pode fazer parte de varios projetos
O que e um projeto Django?
Uma instancia de Django: configuracoes, aplicacoes, etc.
O que e uma aplicacao Django?
Qualquer trecho de codigo que possa ser reutilizado
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Projetos e aplicacoes
Sistemas em Django sao divididos em projetos e aplicacoes
Um projeto pode conter varias aplicacoes
Uma aplicacao pode fazer parte de varios projetos
O que e um projeto Django?
Uma instancia de Django: configuracoes, aplicacoes, etc.
O que e uma aplicacao Django?
Qualquer trecho de codigo que possa ser reutilizado
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Projetos e aplicacoes
Sistemas em Django sao divididos em projetos e aplicacoes
Um projeto pode conter varias aplicacoes
Uma aplicacao pode fazer parte de varios projetos
O que e um projeto Django?
Uma instancia de Django: configuracoes, aplicacoes, etc.
O que e uma aplicacao Django?
Qualquer trecho de codigo que possa ser reutilizado
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Projetos e aplicacoes
Sistemas em Django sao divididos em projetos e aplicacoes
Um projeto pode conter varias aplicacoes
Uma aplicacao pode fazer parte de varios projetos
O que e um projeto Django?
Uma instancia de Django: configuracoes, aplicacoes, etc.
O que e uma aplicacao Django?
Qualquer trecho de codigo que possa ser reutilizado
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Entao o Django me ajuda a ser menos repetitivo... Ok, como?
O Django e um framework database-driven
Voce define suas regras de negocio no modelo
Camadas superiores herdam essas informacoes
AtributosInformacoesValidacoes
Entao o Django me ajuda a ser menos repetitivo... Ok, como?
O Django e um framework database-driven
Voce define suas regras de negocio no modelo
Camadas superiores herdam essas informacoes
AtributosInformacoesValidacoes
Entao o Django me ajuda a ser menos repetitivo... Ok, como?
O Django e um framework database-driven
Voce define suas regras de negocio no modelo
Camadas superiores herdam essas informacoes
AtributosInformacoesValidacoes
Entao o Django me ajuda a ser menos repetitivo... Ok, como?
O Django e um framework database-driven
Voce define suas regras de negocio no modelo
Camadas superiores herdam essas informacoes
AtributosInformacoesValidacoes
Entao o Django me ajuda a ser menos repetitivo... Ok, como?
O Django e um framework database-driven
Voce define suas regras de negocio no modelo
Camadas superiores herdam essas informacoes
Atributos
InformacoesValidacoes
Entao o Django me ajuda a ser menos repetitivo... Ok, como?
O Django e um framework database-driven
Voce define suas regras de negocio no modelo
Camadas superiores herdam essas informacoes
AtributosInformacoes
Validacoes
Entao o Django me ajuda a ser menos repetitivo... Ok, como?
O Django e um framework database-driven
Voce define suas regras de negocio no modelo
Camadas superiores herdam essas informacoes
AtributosInformacoesValidacoes
Criando um novo projeto
Um Catalogo de Contatos:
$ django-admin startproject catalogo
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando um novo projeto
Um Catalogo de Contatos:
$ django-admin startproject catalogo
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Comecando pelo comeco...
Configurando e criando o banco de dados:
$ vim settings.py
...DATABASE_ENGINE = ’postgresql_psycopg2 ’DATABASE_NAME = ’catalogo ’DATABASE_USER = ’catalogo ’DATABASE_PASSWORD = ’****** ’DATABASE_HOST = ’’DATABASE_PORT = ’’...
$ ./manage.py syncdb
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Comecando pelo comeco...
Configurando e criando o banco de dados:
$ vim settings.py
...DATABASE_ENGINE = ’postgresql_psycopg2 ’DATABASE_NAME = ’catalogo ’DATABASE_USER = ’catalogo ’DATABASE_PASSWORD = ’****** ’DATABASE_HOST = ’’DATABASE_PORT = ’’...
$ ./manage.py syncdb
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Digam ”Ola” para o Django!
Acessando o sistema:
$ ./manage.py runserver
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Digam ”Ola” para o Django!
Acessando o sistema:
$ ./manage.py runserver
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando uma aplicacao
Nossa primeira (e, nesta apresentacao, unica) aplicacao:
$ django-admin startapp contatos
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando uma aplicacao
Nossa primeira (e, nesta apresentacao, unica) aplicacao:
$ django-admin startapp contatos
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando um novo modelo
Criando o primeiro modelo da aplicacao
1 from django.db import models
2 from django.core.urlresolvers import reverse
34 class Pessoa(models.Model):
5 name = models.CharField(max_length =60)
6 email = models.EmailField(unique=True)
78 def __unicode__(self):
9 return ’"%s" <%s>’ % (self.name , self.email)
1011 def get_absolute_url(self):
12 return reverse(’pessoa -view’, args=[self.id])
Criando o formulario para o modelo Pessoa
1 from django.forms import ModelForm
2 from catalogo.apps.contatos.models import Pessoa
34 class PessoaForm(ModelForm ):
5 class Meta:
6 model = Pessoa
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando um novo modelo
Criando o primeiro modelo da aplicacao
1 from django.db import models
2 from django.core.urlresolvers import reverse
34 class Pessoa(models.Model):
5 name = models.CharField(max_length =60)
6 email = models.EmailField(unique=True)
78 def __unicode__(self):
9 return ’"%s" <%s>’ % (self.name , self.email)
1011 def get_absolute_url(self):
12 return reverse(’pessoa -view’, args=[self.id])
Criando o formulario para o modelo Pessoa
1 from django.forms import ModelForm
2 from catalogo.apps.contatos.models import Pessoa
34 class PessoaForm(ModelForm ):
5 class Meta:
6 model = Pessoa
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando a primeira view
Listagem dos objetos
from django.shortcuts import render_to_response
from django.template import RequestContext
from catalogo.apps.contatos.models import Pessoa
def pessoa_list(request ):
# obtem a lista de pessoas
object_list = Pessoa.objects.all()
# envia os dados para o template
return render_to_response(’pessoa_list.html’, locals(),
context_instance=RequestContext(request ))
Template
{% extends "base.html" %}
{% block title %} Pessoas {% endblock %}
{% block body %}
<a href="{% url pessoa -insert %}">Inserir </a><br />
<br />
{% for object in object_list %}
<a href="{{ object.get_absolute_url }}">{{ object }}</a>
(<a href="{% url pessoa -update object.id %}">Editar </a>
|<a href="{% url pessoa -delete object.id %}">Apagar </a>)<br />
{% endfor %}
{% endblock %}
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando a primeira view
Listagem dos objetos
from django.shortcuts import render_to_response
from django.template import RequestContext
from catalogo.apps.contatos.models import Pessoa
def pessoa_list(request ):
# obtem a lista de pessoas
object_list = Pessoa.objects.all()
# envia os dados para o template
return render_to_response(’pessoa_list.html’, locals(),
context_instance=RequestContext(request ))
Template
{% extends "base.html" %}
{% block title %} Pessoas {% endblock %}
{% block body %}
<a href="{% url pessoa -insert %}">Inserir </a><br />
<br />
{% for object in object_list %}
<a href="{{ object.get_absolute_url }}">{{ object }}</a>
(<a href="{% url pessoa -update object.id %}">Editar </a>
|<a href="{% url pessoa -delete object.id %}">Apagar </a>)<br />
{% endfor %}
{% endblock %}
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando a segunda view
Exibicao dos objetos
from django.shortcuts import render_to_response , get_object_or_404
from django.template import RequestContext
from catalogo.apps.contatos.models import Pessoa
def pessoa_view(request , object_id ):
# obtem a pessoa a ser exibida
object = get_object_or_404(Pessoa , id=object_id)
# envia os dados para o template
return render_to_response(’pessoa_view.html’, locals(),
context_instance=RequestContext(request ))
Template
{% extends "base.html" %}
{% block title %} Exibir pessoa {% endblock %}
{% block body %}
<b>Nome:</b> {{ object.name }}<br />
<b>Email:</b> {{ object.email }}<br />
<br />
<a href="{% url pessoa -list %}">Voltar </a>
{% endblock %}
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando a segunda view
Exibicao dos objetos
from django.shortcuts import render_to_response , get_object_or_404
from django.template import RequestContext
from catalogo.apps.contatos.models import Pessoa
def pessoa_view(request , object_id ):
# obtem a pessoa a ser exibida
object = get_object_or_404(Pessoa , id=object_id)
# envia os dados para o template
return render_to_response(’pessoa_view.html’, locals(),
context_instance=RequestContext(request ))
Template
{% extends "base.html" %}
{% block title %} Exibir pessoa {% endblock %}
{% block body %}
<b>Nome:</b> {{ object.name }}<br />
<b>Email:</b> {{ object.email }}<br />
<br />
<a href="{% url pessoa -list %}">Voltar </a>
{% endblock %}
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando a terceira view
Removendo objetos
from django.shortcuts import get_object_or_404
from django.http import HttpResponseRedirect
from catalogo.apps.contatos.models import Pessoa
def pessoa_delete(request , object_id ):
# obtem a pessoa a ser apagadao
object = get_object_or_404(Pessoa , id=object_id)
object.delete ()
# redireciona para a listagem de objetos
return HttpResponseRedirect(reverse(’pessoa -list’))
Template: nao tem
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando a terceira view
Removendo objetos
from django.shortcuts import get_object_or_404
from django.http import HttpResponseRedirect
from catalogo.apps.contatos.models import Pessoa
def pessoa_delete(request , object_id ):
# obtem a pessoa a ser apagadao
object = get_object_or_404(Pessoa , id=object_id)
object.delete ()
# redireciona para a listagem de objetos
return HttpResponseRedirect(reverse(’pessoa -list’))
Template: nao tem
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando a ultima view
Edicao de objetos
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response , get_object_or_404
from django.template import RequestContext
from django.http import HttpResponseRedirect
from catalogo.apps.contatos.models import Pessoa
from catalogo.apps.contatos.forms import PessoaForm
def pessoa_form(request , object_id=None):
# carrega o objeto (se houver) e inicializa o formulario
instance = get_object_or_404(Pessoa , id=object_id) if object_id else None
form = PessoaForm(instance=instance)
# valida e altera o objeto (caso a validacao esteja OK)
if request.method == ’POST’:
form = PessoaForm(request.POST , instance=instance)
if form.is_valid ():
form.save()
return HttpResponseRedirect(reverse(’pessoa -list’))
# envia novamente para o formulario
return render_to_response(’pessoa_form.html’, locals(),
context_instance=RequestContext(request ))
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Criando a ultima view
Template
{% extends "base.html" %}
{% block title %}
{% if form.instance.id %} Editar {% else %} Inserir {% endif %} pessoa
{% endblock %}
{% block body %}
<form method="post" action=".">
{{ form.as_p }}
<input type="submit" value="Enviar" />
</form>
{% endblock %}
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Mapeando URLs para as views
URLs do projeto
1 from django.conf.urls.defaults import *
23 urlpatterns = patterns(’’,
4 url(’^pessoa/’, include(’catalogo.apps.contatos.urls’)),
5 )
URLs da aplicacao
1 from django.conf.urls.defaults import *
23 urlpatterns = patterns(’catalogo.apps.contatos ’,
4 url(’^$’, ’views.pessoa_list ’, name=’pessoa -list’),
5 url(’^form/$’, ’views.pessoa_form ’, name=’pessoa -insert ’),
6 url(’^form /(?P<object_id >\d+)/$’, ’views.pessoa_form ’,
7 name=’pessoa -update ’),
8 url(’^view /(?P<object_id >\d+)/$’, ’views.pessoa_view ’,
9 name=’pessoa -view’),
10 url(’^delete /(?P<object_id >\d+)/$’, ’views.pessoa_delete ’,
11 name=’pessoa -delete ’),
12 )
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Mapeando URLs para as views
URLs do projeto
1 from django.conf.urls.defaults import *
23 urlpatterns = patterns(’’,
4 url(’^pessoa/’, include(’catalogo.apps.contatos.urls’)),
5 )
URLs da aplicacao
1 from django.conf.urls.defaults import *
23 urlpatterns = patterns(’catalogo.apps.contatos ’,
4 url(’^$’, ’views.pessoa_list ’, name=’pessoa -list’),
5 url(’^form/$’, ’views.pessoa_form ’, name=’pessoa -insert ’),
6 url(’^form /(?P<object_id >\d+)/$’, ’views.pessoa_form ’,
7 name=’pessoa -update ’),
8 url(’^view /(?P<object_id >\d+)/$’, ’views.pessoa_view ’,
9 name=’pessoa -view’),
10 url(’^delete /(?P<object_id >\d+)/$’, ’views.pessoa_delete ’,
11 name=’pessoa -delete ’),
12 )
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Reaproveitando mais, escrevendo menos...
Se eu quiser criar outro modelo, qual a diferenca?
O modelo
Por que nao criar algo generico?
Generic Views!
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Reaproveitando mais, escrevendo menos...
Se eu quiser criar outro modelo, qual a diferenca? O modelo
Por que nao criar algo generico?
Generic Views!
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Reaproveitando mais, escrevendo menos...
Se eu quiser criar outro modelo, qual a diferenca? O modelo
Por que nao criar algo generico?
Generic Views!
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Reaproveitando mais, escrevendo menos...
Se eu quiser criar outro modelo, qual a diferenca? O modelo
Por que nao criar algo generico?
Generic Views!
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Mapeando URLs para as views... com Generic Views
Mapeamento de URLs utilizando Generic Views
from django.conf.urls.defaults import *
from django.views.generic import create_update , list_detail
from models import Pessoa
list_dict_info = { ’queryset ’:Pessoa.objects.all(), ’template_name ’:’pessoa_list.html’ }
view_dict_info = { ’queryset ’:Pessoa.objects.all(), ’template_name ’:’pessoa_view.html’ }
insert_dict_info = {
’model’:Pessoa , ’post_save_redirect ’:’/pessoa/’,
’template_name ’:’pessoa_form.html’,
}
delete_dict_info = { ’model ’:Pessoa , ’post_delete_redirect ’:’/pessoa/’ }
update_dict_info = insert_dict_info
urlpatterns = patterns(’’,
url(’^$’, list_detail.object_list , list_dict_info , name=’pessoa -list’),
url(’^form/$’, create_update.create_object ,
insert_dict_info , name=’pessoa -insert ’),
url(’^form /(?P<object_id >\d+)/$’, create_update.update_object ,
update_dict_info , name=’pessoa -update ’),
url(’^view /(?P<object_id >\d+)/$’, list_detail.object_detail ,
view_dict_info , name=’pessoa -view’),
url(’^delete /(?P<object_id >\d+)/$’, create_update.delete_object ,
delete_dict_info , name=’pessoa -delete ’),
)
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpagesSitemapsFeedsAutenticacaoCache...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
Administracao
FlatpagesSitemapsFeedsAutenticacaoCache...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpages
SitemapsFeedsAutenticacaoCache...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpagesSitemaps
FeedsAutenticacaoCache...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpagesSitemapsFeeds
AutenticacaoCache...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpagesSitemapsFeedsAutenticacao
Cache...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpagesSitemapsFeedsAutenticacaoCache
...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpagesSitemapsFeedsAutenticacaoCache...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpagesSitemapsFeedsAutenticacaoCache...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpagesSitemapsFeedsAutenticacaoCache...
Repositorios de aplicacoes
http://djangoapps.org
http://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Isso e so a ponta do iceberg...
O Django tem muitas outras coisas interessantes:
AdministracaoFlatpagesSitemapsFeedsAutenticacaoCache...
Repositorios de aplicacoes
http://djangoapps.orghttp://pinaxproject.com
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web
Fim
Obrigado! Duvidas?
http://www.slideshare.net/afurlan/django-para-desenvolvimento-web-porque-ser-repetitivo-chato
http://tinyurl.com/afurlan-django
Arthur Furlan (afurlan)[email protected]
http://blog.afurlan.org
twitter: @arthurfurlan
Arthur Furlan (afurlan) [email protected] Django para desenvolvimento web