Aplicações rápidas para web com Django
-
Upload
diemesleno-souza-carvalho -
Category
Documents
-
view
235 -
download
1
description
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’, ‘[email protected]’),
)
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> </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
???