54
Aplicações rápidas para Web com Diemesleno Souza Carvalho Software Freedom Day - Campo Grande – MS 20 de Setembro de 2008

Aplicações rápidas para web com Django

Embed Size (px)

DESCRIPTION

Mini-curso Django.

Citation preview

Page 1: Aplicações rápidas para web com Django

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

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

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 4: Aplicações rápidas para web com Django

Apresentação • Lawrence Journal-World (http://www.ljworld.com)

Page 5: Aplicações rápidas para web com Django

Apresentação

• Guitarrista Belga• Grande nome do Jazz

• Django Reinhardt

Page 6: Aplicações rápidas para web com Django

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

Mercado de trabalho

Há vagas!

Page 8: Aplicações rápidas para web com Django

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

Mercado de trabalho

Page 10: Aplicações rápidas para web com Django

Curiosidade…

Do mesmo criador do digg

Page 11: Aplicações rápidas para web com Django

Curiosidade…

Leah Culver

Page 12: Aplicações rápidas para web com Django

Curiosidade…

Leah Culver

Page 13: Aplicações rápidas para web com Django

Instalação

• Python 2.3+• Database: PostgreSQL, MySQL,

SQLite3• Django 1.0

Page 14: Aplicações rápidas para web com Django

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

Prática

Desenvolvendo uma aplicação simples

Page 16: Aplicações rápidas para web com Django

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

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

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

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

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

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

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

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

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

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

Visualizando o SQL

python manage.py sql vagas

Page 27: Aplicações rápidas para web com Django

Executando o SQL

python manage.py syncdb

Page 28: Aplicações rápidas para web com Django

Interface Admin

cd vagas

touch admin.py

vim admin.py

Page 29: Aplicações rápidas para web com Django

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

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

Interface Admin[2]

python manage.py runserver

Page 32: Aplicações rápidas para web com Django

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

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

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

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

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

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

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

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

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

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

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

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

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

Editar os templates

mkdir vagas

cd vagas

vim base.html

Page 46: Aplicações rápidas para web com Django

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

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

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

Editar os templates…

<div class=“posted”>Postado em: {{ vaga.publicado|date: “d-M-Y” }}

</div><div class=“description”>

{{ vaga.descricao }}</div>

</div><p>&nbsp;</p><a href=“/jobs/”>Voltar</a>{% endblock %}

Page 50: Aplicações rápidas para web com Django

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

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

Principal referência

http://www.google.com.br

Page 53: Aplicações rápidas para web com Django

Dúvidas

???

Page 54: Aplicações rápidas para web com Django

Obrigado!Diemesleno Souza Carvalho

MSN: [email protected]

Skype: diemesleno