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

Aplicacoes Rapidas Para Web Com Django

Embed Size (px)

Citation preview

Aplicações rápidas para Web

com

Diemesleno Souza Carvalho

Software Freedom Day - Campo Grande – MS

20 de Setembro de 2008

Tópicos abordados

• Apresentação do framework.

• A documentação é importante?

• Mercado de trabalho.• 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.• 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

MVC x MTV

Apresentação

Models

Modelos de dados.Modelos de dados.

class Exemplo(models.Model):

pass

Apresentação

Templates

{% tags %}{% tags %}

{{ variáveis }}

Apresentação

ViewsResponsável pela parte que ficará visível.

def index(request):

lista = Emprego.objects.order_by(‘-publicado’)[:10]

return render_to_response(‘vagas/index.html’,{‘lista’:lista})

Apresentação

• Lawrence Journal-World (http://www.ljworld.com)

Apresentação

• Guitarrista Belga

• Grande nome do Jazz

• Django Reinhardt• Django Reinhardt

A documentação é importante?

• Conteúdo sempre atualizado.

• Tutoriais passo-a-passo.

• Tradução para português quase completa.• Tradução para português quase completa.

• Excelentes livros já lançados. (inglês)

Mercado de trabalho

Há vagas!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://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/• 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

Application : adminApplication : admin

Aplicação : admin

/admin/

Prática

DatabaseAplicação : vagas

/vagas/

Prática

django-admin.py startproject empresa

empresa

__init__.py � pacote/*__init__.py � pacote/*

manage.py � gerenciador/*

settings.py � configurações/*

urls.py � rotas/*

Prática

python manage.py startapp vagas

cd vagas

__init__.py � app/pacote/*__init__.py � app/pacote/*

models.py � app/models/*

views.py � app/views/*

Prática

cd empresa

Editar � settings.py

ADMINS = (ADMINS = (

(‘Diemesleno Souza Carvalho’, ‘[email protected]’),

)

DATABASE_ENGINE = ‘mysql’

DATABASE_NAME = ‘empresa’

DATABASE_USER = ‘root’

DATABASE_PASSWORD = ‘123’

DATABASE_HOST = ‘localhost’

Prática

TIME_ZONE = ‘America/Campo Grande’

LANGUAGE_CODE = ‘pt-br’

TEMPLATE_DIRS = (

‘/home/diemesleno/livre/templates/’,‘/home/diemesleno/livre/templates/’,

)

Criando um Modelo

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

…# Definindo a função para o retorno

def __unicode__(self):

if self.estado: if self.estado:

return “%s, %s, %s” % (self.cidade, self.estado, self.pais)

else:

return “%s, %s” % (self.cidade, self.pais)

Criando um Modelo

…# Criando a classe “Emprego”

class Emprego(models.Model):class Emprego(models.Model):

publicado = models.DateField()

titulo = models.CharField(max_length=50)

descricao = models.TextField()

local = models.ForeignKey(Local)

Criando um Modelo

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

def __unicode__(self):

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

Ativando o modelo(Aplicação)

Editar � settings.py � INSTALLED_APPS

INSTALLED_APPS = (

‘django.contrib.auth’,‘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 vagaspython manage.py sql vagas

Executando o SQL

python manage.py syncdbpython manage.py syncdb

Interface Admin

cd vagas

touch admin.pytouch admin.py

vim admin.py

Interface Admin

from empresa.vagas.models import Local

from empresa.vagas.models import Emprego

from django.contrib import admin

Class LocalAdmin(admin.ModelAdmin):

list_display = (“titulo”, “descricao”, “local”, “publicado”)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)

Interface Admin

python manage.py runserver

http://localhost:8000/admin/http://localhost:8000/admin/

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’^vagas/$’, ‘index’),

(r’^vagas/(?P<object_id>\d+)/$’, ‘detail’),

(r’^admin/(.*)’, admin.site.root),

)

Editanto a view

cd vagas

from django.shortcuts import get_object_or_404, render_to_response

from 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}){‘vaga’: vaga})

Editar os templates

Relembrando: (settings.py)

TEMPLATE_DIRS = (

‘/home/diemesleno/livre/templates/’,

)

cd /home/diemesleno/livre/

mkdir templates

cd templates

Editar os templates

vim 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 empresa

cd empresa

vim base.html vim base.html

Editar os templates

{% extends “base.html” %}

{% block extrahead %}

<style>

body { font-style: arial; color: navy; }

h1 { text-align: center; }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 templates

vim 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 templates

vim 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”><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.• 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-• http://groups.google.com/group/django-developers

Principal referência

http://www.google.com.brhttp://www.google.com.br

Dúvidas

??????

Obrigado!Aplicações rápidas com Django

Software Freedom Day – 20 de agosto de 2008

Campo Grande – Mato Grosso do Sul

Contato:

E-mail: [email protected]

msn: [email protected]

Skype: diemesleno