aplicações rápidas para web com django
DESCRIPTION
Mini-curso Django.TRANSCRIPT
![Page 1: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/1.jpg)
Aplicações rápidas para Web com
Diemesleno Souza CarvalhoSoftware Freedom Day - Campo Grande – MS
20 de Setembro de 2008
![Page 2: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/2.jpg)
Tópicos abordados
• Apresentação do framework.
• A documentação é importante?
• Mercado de trabalho.
• Instalação do Django no GNU/Linux.
• Criação de uma aplicação simples. *
* Caso o tempo permita.
![Page 3: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/3.jpg)
Apresentação
• Framework web de alto nível.
• Desenvolvimento rápido.
• Automatiza coisas repetitivas.
• Segue boas práticas de programação.
• Utiliza os princípios do DRY e ORM.
• Utiliza padrões MVC/MTV.
![Page 5: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/5.jpg)
Apresentação
• Guitarrista Belga• Grande nome do Jazz
• Django Reinhardt
![Page 6: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/6.jpg)
A documentação é importante?
• Conteúdo sempre atualizado.• Tutoriais passo-a-passo.• Tradução para português quase
completa.• Excelentes livros já lançados. (inglês)
![Page 7: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/7.jpg)
Mercado de trabalho
Há vagas!
![Page 8: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/8.jpg)
Mercado de trabalho
• http://www.pythonbrasil.com.br/moin.cgi/OportunidadesDeEmprego (42 Vagas)• http://djangogigs.com/ (242 Vagas)• http://simonwillison.net/2008/Jan/18/django/ (74 Vagas)• http://www.python.org/community/jobs/ (221 Vagas)
![Page 9: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/9.jpg)
Mercado de trabalho
![Page 10: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/10.jpg)
Curiosidade…
Do mesmo criador do digg
![Page 11: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/11.jpg)
Curiosidade…
Leah Culver
![Page 12: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/12.jpg)
Curiosidade…
Leah Culver
![Page 13: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/13.jpg)
Instalação
• Python 2.3+• Database: PostgreSQL, MySQL,
SQLite3• Django 1.0
![Page 14: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/14.jpg)
Instalando Django (1.0)
• apt-get install python-django
• http://www.djangoproject.com/download/– tar xvzf Django-1.0.tar.gz– cd Django-1.0– sudo python setup.py install
![Page 15: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/15.jpg)
Prática
Desenvolvendo uma aplicação simples
![Page 16: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/16.jpg)
Projeto (site) : empresa
Database
Application : adminApplication : admin
Aplicação : admin
/admin/
Aplicação : vagas
/vagas/
Prática
![Page 17: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/17.jpg)
Prática
django-admin.py startproject empresa
empresa__init__.py pacote/*manage.py gerenciador/*settings.py configurações/*urls.py rotas/*
![Page 18: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/18.jpg)
Prática
cd empresa
python manage.py startapp vagas
cd vagas __init__.py app/pacote/* models.py app/models/* views.py app/views/*
![Page 19: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/19.jpg)
Prática
cd empresaEditar settings.py
ADMINS = ((‘Diemesleno Souza Carvalho’, ‘[email protected]’),
)
DATABASE_ENGINE = ‘mysql’DATABASE_NAME = ‘livre’DATABASE_USER = ‘root’DATABASE_PASSWORD = ‘sgi’DATABASE_HOST = ‘localhost’
![Page 20: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/20.jpg)
PráticaTIME_ZONE = ‘America/Campo Grande’
LANGUAGE_CODE = ‘pt-br’
TEMPLATE_DIRS = (‘/home/diemesleno/livre/templates/’,
)
![Page 21: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/21.jpg)
Criando um Modelo[1]
Editando empresa/vagas/models.py
from django.db import models
# Criando uma classe para o “Local”
class Local(models.Model): cidade = models.CharField(max_length=50) estado = models.CharField(max_length=50, null=True,
blank=True) pais = models.CharField(max_length=50)
…
![Page 22: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/22.jpg)
Criando um Modelo[2]
…# Definindo a função para o retorno
def __unicode__(self):
if self.estado: return “%s, %s, %s” % (self.cidade, self.estado, self.pais)
else:return “%s, %s” % (self.cidade, self.pais)
![Page 23: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/23.jpg)
Criando um Modelo[3]
…# Criando a classe “Emprego”
class Emprego(models.Model): publicado = models.DateField() titulo = models.CharField(max_length=50) descricao = models.TextField()
local = models.ForeignKey(Local)
…
![Page 24: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/24.jpg)
Criando um Modelo[4]
…# Definindo a função para retorno da classe
def __unicode__(self):
return “%s (%s)” % (self.titulo, self.local)
![Page 25: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/25.jpg)
Ativando o modelo(Aplicação)
Editar settings.py INSTALLED_APPS
INSTALLED_APPS = (
‘django.contrib.auth’,‘django.contrib.contenttypes’,‘django.contrib.sessions’,‘django.contrib.sites’,‘django.contrib.admin’,‘django.contrib.admindocs’,‘empresa.vagas’,
)
![Page 26: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/26.jpg)
Visualizando o SQL
python manage.py sql vagas
![Page 27: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/27.jpg)
Executando o SQL
python manage.py syncdb
![Page 28: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/28.jpg)
Interface Admin
cd vagas
touch admin.py
vim admin.py
![Page 29: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/29.jpg)
Interface Admin[1]from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
pass
class EmpregoAdmin(admin.ModelAdmin):
pass
![Page 30: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/30.jpg)
Design das URLs
vim url.py
from django.conf.urls.defaults import *from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns(‘empresa.vagas.views’,(r'^admin/doc/', include('django.contrib.admindocs.urls')),(r’^admin/(.*)’, admin.site.root),
)
![Page 31: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/31.jpg)
Interface Admin[2]
python manage.py runserver
![Page 32: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/32.jpg)
Interface Admin[3]# Adicionando nossa aplicação na administração do sistema
from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
pass
class EmpregoAdmin(admin.ModelAdmin):
pass
admin.site.register(Local, LocalAdmin)
admin.site.register(Emprego, EmpregoAdmin)
![Page 33: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/33.jpg)
Interface Admin[4]# Organizando a visualização
from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
list_display = (“cidade”, “estado”, “pais”)
class EmpregoAdmin(admin.ModelAdmin):
pass
admin.site.register(Local, LocalAdmin)
admin.site.register(Emprego, EmpregoAdmin)
![Page 34: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/34.jpg)
Interface Admin[5]# Adicionando um campo para pesquisa
from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
list_display = (“cidade”, “estado”, “pais”)
search_fields = (“cidade”, “estado)
class EmpregoAdmin(admin.ModelAdmin):
pass
admin.site.register(Local, LocalAdmin)
admin.site.register(Emprego, EmpregoAdmin)
![Page 35: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/35.jpg)
Interface Admin[6]# Adicionando um filtro
from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
list_display = (“cidade”, “estado”, “pais”)
search_fields = (“cidade”, “estado)
list_filter = (“estado”,)
class EmpregoAdmin(admin.ModelAdmin):
pass
admin.site.register(Local, LocalAdmin)
admin.site.register(Emprego, EmpregoAdmin)
![Page 36: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/36.jpg)
Interface Admin[7]# Organizando a vizualização
from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
...
class EmpregoAdmin(admin.ModelAdmin):
list_display = (“titulo”, “descricao”, “local”, “publicado”)
l
admin.site.register(Local, LocalAdmin)
admin.site.register(Emprego, EmpregoAdmin)
![Page 37: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/37.jpg)
Interface Admin[8]# Ordenando a vizualização
from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
...
class EmpregoAdmin(admin.ModelAdmin):
list_display = (“titulo”, “descricao”, “local”, “publicado”)
ordering = [“-publicado”]
admin.site.register(Local, LocalAdmin)
admin.site.register(Emprego, EmpregoAdmin)
![Page 38: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/38.jpg)
Interface Admin[9]# Adicionando pesquisa
from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
...
class EmpregoAdmin(admin.ModelAdmin):
list_display = (“titulo”, “descricao”, “local”, “publicado”)
ordering = [“-publicado”]
search_fields = (“titulo”, “descricao”)
admin.site.register(Local, LocalAdmin)
admin.site.register(Emprego, EmpregoAdmin)
![Page 39: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/39.jpg)
Interface Admin[10]# Adicionando filtro
from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
...
class EmpregoAdmin(admin.ModelAdmin):
list_display = (“titulo”, “descricao”, “local”, “publicado”)
ordering = [“-publicado”]
search_fields = (“titulo”, “descricao”)
list_filter = (“local”,)
admin.site.register(Local, LocalAdmin)
admin.site.register(Emprego, EmpregoAdmin)
![Page 40: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/40.jpg)
Design das URLs
vim url.py
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns(‘empresa.vagas.views’,
(r'^admin/doc/', include ('django.contrib.admindocs.urls')),
(r’^admin/(.*)’, admin.site.root),
(r’^vagas/$’, ‘index’),
(r’^vagas/(?P<object_id>\d+)/$’, ‘detail’),
)
![Page 41: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/41.jpg)
Editanto a view
cd vagas
from django.shortcuts import get_object_or_404, render_to_responsefrom vagas.models import Emprego
def index(request):lista = Emprego.objects.order_by(‘-publicado’)[:10]return render_to_response(‘vagas/index.html’,
{‘lista’: lista})
…
![Page 42: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/42.jpg)
Editando a view…
def detail(request, object_id):vaga = get_object_or_404(Emprego, pk=object_id)return render_to_response(‘vagas/detail.html’,
{‘vaga’: vaga})
![Page 43: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/43.jpg)
Editar os templatesRelembrando: (settings.py)
TEMPLATE_DIRS = (‘/home/diemesleno/livre/templates/’,
)
cd /home/diemesleno/livre/templates/
![Page 44: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/44.jpg)
Editar os templatesvim base.html
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3c.org/1999/xhtml xml:lang=“en” lang=“en”>
<head><title> Super Empresa: {% block title %} Page {% endblock %} </title>
{% block extrahead %} {% endblock %}</head><body>
{% block content %} {% endblock %}</body></html>
![Page 45: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/45.jpg)
Editar os templates
mkdir vagas
cd vagas
vim base.html
![Page 46: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/46.jpg)
Editar os templates{% extends “base.html” %}
{% block extrahead %}<style> body { font-style: arial; color: navy; } h1 { text-align: center; } .job .title { font-size: 120px; font-weight: bold; } .job .posted { font-style: italic; } a.link { text-decoration: none; } a.visited { text-decoration:none; } a.hover { text-decoration: underline overline; background: #ffc;
color: #FF0000; }</style>{% endblock %}
![Page 47: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/47.jpg)
Editar os templatesvim index.html
{% extends “vagas/base.html” %}
{% block title %} Lista de vagas {% endblock %}
{% block content %}<h1>Lista de vagas</h1><ul>{% for vaga in lista %}
<li><a href=“{{ vaga.id }}”>{{ vaga.titulo }}</a></li>{% endfor %}</ul>
{% endblock %}
![Page 48: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/48.jpg)
Editar os templatesvim detail.html
{% extends “vagas/base.html” %}
{% block title %} Detalhes da vaga {% endblock %}
{% block content %}<h1>Detalhes da vaga</h1>
<div class=“job”><div class=“title”>
{{ vaga.titulo }}-{{ vaga.local }}
</div>…
![Page 49: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/49.jpg)
Editar os templates…
<div class=“posted”>Postado em: {{ vaga.publicado|date: “d-M-Y” }}
</div><div class=“description”>
{{ vaga.descricao }}</div>
</div><p> </p><a href=“/jobs/”>Voltar</a>{% endblock %}
![Page 50: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/50.jpg)
Conclusão
• Escrito em Python.• Página de administração simples.• Design de URLs elegantes.• Modelos do DB.• Templates.
• Desenvolvimento Web Rápido, fácil e poderoso com Django.
![Page 51: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/51.jpg)
Referências
• http://djangoproject.com/documentation/• http://code.djangoproject.com/• http://groups.google.com/group/django-user• http://groups.google.com/group/django-developers
![Page 52: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/52.jpg)
Principal referência
http://www.google.com.br
![Page 53: Aplicações rápidas para web com Django](https://reader034.vdocuments.mx/reader034/viewer/2022050723/55cf902f550346703ba3a429/html5/thumbnails/53.jpg)
Dúvidas
???