Aplicações rápidas para web com Django

Post on 16-Jan-2016

237 views 1 download

description

Mini-curso Django.

Transcript of 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

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.

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.

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

Apresentação

• Guitarrista Belga• Grande nome do Jazz

• Django Reinhardt

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)

Mercado de trabalho

Há vagas!

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)

Mercado de trabalho

Curiosidade…

Do mesmo criador do digg

Curiosidade…

Leah Culver

Curiosidade…

Leah Culver

Instalação

• Python 2.3+• Database: PostgreSQL, MySQL,

SQLite3• Django 1.0

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

Prática

Desenvolvendo uma aplicação simples

Projeto (site) : empresa

Database

Application : adminApplication : admin

Aplicação : admin

/admin/

Aplicação : vagas

/vagas/

Prática

Prática

django-admin.py startproject empresa

empresa__init__.py pacote/*manage.py gerenciador/*settings.py configurações/*urls.py rotas/*

Prática

cd empresa

python manage.py startapp vagas

cd vagas __init__.py app/pacote/* models.py app/models/* views.py app/views/*

Prática

cd empresaEditar settings.py

ADMINS = ((‘Diemesleno Souza Carvalho’, ‘diemesleno@gmail.com’),

)

DATABASE_ENGINE = ‘mysql’DATABASE_NAME = ‘livre’DATABASE_USER = ‘root’DATABASE_PASSWORD = ‘sgi’DATABASE_HOST = ‘localhost’

PráticaTIME_ZONE = ‘America/Campo Grande’

LANGUAGE_CODE = ‘pt-br’

TEMPLATE_DIRS = (‘/home/diemesleno/livre/templates/’,

)

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)

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)

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)

Criando um Modelo[4]

…# Definindo a função para retorno da classe

def __unicode__(self):

return “%s (%s)” % (self.titulo, self.local)

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’,

)

Visualizando o SQL

python manage.py sql vagas

Executando o SQL

python manage.py syncdb

Interface Admin

cd vagas

touch admin.py

vim admin.py

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

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

)

Interface Admin[2]

python manage.py runserver

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)

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)

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)

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)

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)

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)

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)

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)

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’),

)

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

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

Editar os templatesRelembrando: (settings.py)

TEMPLATE_DIRS = (‘/home/diemesleno/livre/templates/’,

)

cd /home/diemesleno/livre/templates/

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>

Editar os templates

mkdir vagas

cd vagas

vim base.html

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 %}

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 %}

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

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 %}

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.

Referências

• http://djangoproject.com/documentation/• http://code.djangoproject.com/• http://groups.google.com/group/django-user• http://groups.google.com/group/django-developers

Principal referência

http://www.google.com.br

Dúvidas

???

Obrigado!Diemesleno Souza Carvalho

MSN: d.lenon@gmail.com

Skype: diemesleno