SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
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.
•   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




MVC x MTV
Apresentação

             Models
Modelos de dados.

    class Exemplo(models.Model):
         pass
Apresentação

      Templates
{% tags %}

{{ variáveis }}
Apresentação

                           Views
Responsá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
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
Prática
Projeto (site) : empresa


     /admin/
          Application : admin
       Application : admin
     Aplicação : admin




    /vagas/
      Aplicação : vagas          Database
Prática
django-admin.py startproject empresa

empresa
  __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/*
  models.py     app/models/*
  views.py      app/views/*
Prática
cd empresa
Editar  settings.py

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

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/’,
)
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:
                  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):
        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)
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
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”)
        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/
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})
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
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 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”>
                           {{ 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!
Aplicações rápidas com Django
Software Freedom Day – 20 de agosto de 2008
Campo Grande – Mato Grosso do Sul



Contato:
E-mail: diemesleno@gmail.com
msn: d.lenon@gmail.com
Skype: diemesleno

Weitere ähnliche Inhalte

Was ist angesagt?

Smarty Template Engine
Smarty Template EngineSmarty Template Engine
Smarty Template EngineDiego Tremper
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroEduardo Shiota Yasuda
 
Introdução ao framework CakePHP
Introdução ao framework CakePHPIntrodução ao framework CakePHP
Introdução ao framework CakePHPigorpimentel
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantesEduardo Mendes
 
Angular JS, você precisa conhecer
Angular JS, você precisa conhecerAngular JS, você precisa conhecer
Angular JS, você precisa conhecermeet2Brains
 
Segurança e Performance WordPress
Segurança e Performance WordPressSegurança e Performance WordPress
Segurança e Performance WordPressHenrique Mouta
 
Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2Afonso Gomes
 
Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Maurício Linhares
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJSRodrigo Branas
 
Javascript truquesmagicos
Javascript truquesmagicosJavascript truquesmagicos
Javascript truquesmagicosponto hacker
 
Desafios do Desenvolvimento de Front-end em um e-commerce
Desafios do Desenvolvimento de Front-end em um e-commerceDesafios do Desenvolvimento de Front-end em um e-commerce
Desafios do Desenvolvimento de Front-end em um e-commerceEduardo Shiota Yasuda
 
JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
 

Was ist angesagt? (20)

Java script - funções
Java script - funçõesJava script - funções
Java script - funções
 
Smarty Template Engine
Smarty Template EngineSmarty Template Engine
Smarty Template Engine
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zero
 
jQuery Simplificando o JavaScript
jQuery Simplificando o JavaScriptjQuery Simplificando o JavaScript
jQuery Simplificando o JavaScript
 
Introdução ao framework CakePHP
Introdução ao framework CakePHPIntrodução ao framework CakePHP
Introdução ao framework CakePHP
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 
Java script aula 05 - funções
Java script   aula 05 - funçõesJava script   aula 05 - funções
Java script aula 05 - funções
 
JSTL em 21mins
JSTL em 21minsJSTL em 21mins
JSTL em 21mins
 
Angular JS, você precisa conhecer
Angular JS, você precisa conhecerAngular JS, você precisa conhecer
Angular JS, você precisa conhecer
 
Segurança e Performance WordPress
Segurança e Performance WordPressSegurança e Performance WordPress
Segurança e Performance WordPress
 
Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2Aprender CSS (UFCD0154) v2
Aprender CSS (UFCD0154) v2
 
Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJS
 
Javascript truquesmagicos
Javascript truquesmagicosJavascript truquesmagicos
Javascript truquesmagicos
 
Desafios do Desenvolvimento de Front-end em um e-commerce
Desafios do Desenvolvimento de Front-end em um e-commerceDesafios do Desenvolvimento de Front-end em um e-commerce
Desafios do Desenvolvimento de Front-end em um e-commerce
 
HTML
HTMLHTML
HTML
 
Angular js
Angular jsAngular js
Angular js
 
Php 05 Mvc
Php 05 MvcPhp 05 Mvc
Php 05 Mvc
 
JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 

Andere mochten auch

Multi-touch 3D-set modeler
Multi-touch 3D-set modelerMulti-touch 3D-set modeler
Multi-touch 3D-set modelervrt-medialab
 
search and retrieval of audiovisual material
search and retrieval of audiovisual materialsearch and retrieval of audiovisual material
search and retrieval of audiovisual materialvrt-medialab
 
Computer Assisted Manufacturing
Computer Assisted ManufacturingComputer Assisted Manufacturing
Computer Assisted Manufacturingvrt-medialab
 
Resultados del II Encuentro Nacional de Profesionales de la Información
Resultados del II Encuentro Nacional de Profesionales de la InformaciónResultados del II Encuentro Nacional de Profesionales de la Información
Resultados del II Encuentro Nacional de Profesionales de la Informaciónguest58bbc0
 
Simon Small - FNUKY & 5 ideas that are changing media
Simon Small - FNUKY & 5 ideas that are changing mediaSimon Small - FNUKY & 5 ideas that are changing media
Simon Small - FNUKY & 5 ideas that are changing mediaLove Digital
 

Andere mochten auch (7)

Image Processing
Image ProcessingImage Processing
Image Processing
 
Multi-touch 3D-set modeler
Multi-touch 3D-set modelerMulti-touch 3D-set modeler
Multi-touch 3D-set modeler
 
search and retrieval of audiovisual material
search and retrieval of audiovisual materialsearch and retrieval of audiovisual material
search and retrieval of audiovisual material
 
Computer Assisted Manufacturing
Computer Assisted ManufacturingComputer Assisted Manufacturing
Computer Assisted Manufacturing
 
Test101
Test101Test101
Test101
 
Resultados del II Encuentro Nacional de Profesionales de la Información
Resultados del II Encuentro Nacional de Profesionales de la InformaciónResultados del II Encuentro Nacional de Profesionales de la Información
Resultados del II Encuentro Nacional de Profesionales de la Información
 
Simon Small - FNUKY & 5 ideas that are changing media
Simon Small - FNUKY & 5 ideas that are changing mediaSimon Small - FNUKY & 5 ideas that are changing media
Simon Small - FNUKY & 5 ideas that are changing media
 

Ähnlich wie Aplicações rápidas com Django

Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPelliando dias
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de djangoFilipe Ximenes
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Luis Gustavo Almeida
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPMarcelo Andrade
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao DjangoVinicius Mendes
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkMarcelo Rodrigo
 
Desenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engineDesenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app enginepugpe
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de djangorosenclever
 
Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Pablo Dall'Oglio
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos formsMoacir Filho
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 

Ähnlich wie Aplicações rápidas com Django (20)

Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Python Para Maemo
Python Para MaemoPython Para Maemo
Python Para Maemo
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao Django
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 
Design Patterns em Ruby
Design Patterns em RubyDesign Patterns em Ruby
Design Patterns em Ruby
 
Desenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engineDesenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engine
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de django
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013Adianti Framework PHPConf 2013
Adianti Framework PHPConf 2013
 
Django + extjs pelos forms
Django + extjs pelos formsDjango + extjs pelos forms
Django + extjs pelos forms
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 

Mehr von Freedom DayMS

Utilizando JMeter para realizar testes de carga em aplicações WEB
Utilizando JMeter para realizar testes de carga em aplicações WEBUtilizando JMeter para realizar testes de carga em aplicações WEB
Utilizando JMeter para realizar testes de carga em aplicações WEBFreedom DayMS
 
PHP de 0 a 100 em 50 minutos
PHP de 0 a 100 em 50 minutosPHP de 0 a 100 em 50 minutos
PHP de 0 a 100 em 50 minutosFreedom DayMS
 
O Que E Software Livre
O Que E Software LivreO Que E Software Livre
O Que E Software LivreFreedom DayMS
 
Seja "Smarty" na arte do desenvolvimento
Seja "Smarty" na arte do desenvolvimentoSeja "Smarty" na arte do desenvolvimento
Seja "Smarty" na arte do desenvolvimentoFreedom DayMS
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e FuturoFreedom DayMS
 
Pré-aquecimento Ubuntu Linux
Pré-aquecimento Ubuntu LinuxPré-aquecimento Ubuntu Linux
Pré-aquecimento Ubuntu LinuxFreedom DayMS
 
Software Rastreador de Movimentos
Software Rastreador de MovimentosSoftware Rastreador de Movimentos
Software Rastreador de MovimentosFreedom DayMS
 
Comparação entre Frameworks Web Ágeis
Comparação entre Frameworks Web ÁgeisComparação entre Frameworks Web Ágeis
Comparação entre Frameworks Web ÁgeisFreedom DayMS
 
Firefox Para Webmasters
Firefox Para WebmastersFirefox Para Webmasters
Firefox Para WebmastersFreedom DayMS
 
Aprenda E Turbine Firefox
Aprenda E Turbine FirefoxAprenda E Turbine Firefox
Aprenda E Turbine FirefoxFreedom DayMS
 

Mehr von Freedom DayMS (15)

Utilizando JMeter para realizar testes de carga em aplicações WEB
Utilizando JMeter para realizar testes de carga em aplicações WEBUtilizando JMeter para realizar testes de carga em aplicações WEB
Utilizando JMeter para realizar testes de carga em aplicações WEB
 
PHP de 0 a 100 em 50 minutos
PHP de 0 a 100 em 50 minutosPHP de 0 a 100 em 50 minutos
PHP de 0 a 100 em 50 minutos
 
Joomla
JoomlaJoomla
Joomla
 
Projeto Debian
Projeto DebianProjeto Debian
Projeto Debian
 
Software Livre Java
Software Livre JavaSoftware Livre Java
Software Livre Java
 
O Que E Software Livre
O Que E Software LivreO Que E Software Livre
O Que E Software Livre
 
Seja "Smarty" na arte do desenvolvimento
Seja "Smarty" na arte do desenvolvimentoSeja "Smarty" na arte do desenvolvimento
Seja "Smarty" na arte do desenvolvimento
 
PHP, Presente e Futuro
PHP, Presente e FuturoPHP, Presente e Futuro
PHP, Presente e Futuro
 
Pré-aquecimento Ubuntu Linux
Pré-aquecimento Ubuntu LinuxPré-aquecimento Ubuntu Linux
Pré-aquecimento Ubuntu Linux
 
Software Rastreador de Movimentos
Software Rastreador de MovimentosSoftware Rastreador de Movimentos
Software Rastreador de Movimentos
 
Gentoo
GentooGentoo
Gentoo
 
Dataprev
DataprevDataprev
Dataprev
 
Comparação entre Frameworks Web Ágeis
Comparação entre Frameworks Web ÁgeisComparação entre Frameworks Web Ágeis
Comparação entre Frameworks Web Ágeis
 
Firefox Para Webmasters
Firefox Para WebmastersFirefox Para Webmasters
Firefox Para Webmasters
 
Aprenda E Turbine Firefox
Aprenda E Turbine FirefoxAprenda E Turbine Firefox
Aprenda E Turbine Firefox
 

Aplicações rápidas com Django

  • 1. Aplicações rápidas para Web com Diemesleno Souza Carvalho Software Freedom Day - Campo Grande – MS 20 de Setembro de 2008
  • 2. 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.
  • 3. 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.
  • 5. Apresentação Models Modelos de dados. class Exemplo(models.Model): pass
  • 6. Apresentação Templates {% tags %} {{ variáveis }}
  • 7. Apresentação Views Responsá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})
  • 8. Apresentação • Lawrence Journal-World (http://www.ljworld.com)
  • 9. Apresentação • Guitarrista Belga • Grande nome do Jazz • Django Reinhardt
  • 10. 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)
  • 12. 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)
  • 16. Curiosidade… Leah Culver
  • 17. Instalação • Python 2.3+ • Database: PostgreSQL, MySQL, SQLite3 • Django 1.0
  • 18. 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
  • 20. Prática Projeto (site) : empresa /admin/ Application : admin Application : admin Aplicação : admin /vagas/ Aplicação : vagas Database
  • 21. Prática django-admin.py startproject empresa empresa __init__.py pacote/* manage.py gerenciador/* settings.py configurações/* urls.py rotas/*
  • 22. Prática python manage.py startapp vagas cd vagas __init__.py app/pacote/* models.py app/models/* views.py app/views/*
  • 23. Prática cd empresa Editar settings.py ADMINS = ( (‘Diemesleno Souza Carvalho’, ‘diemesleno@gmail.com’), ) DATABASE_ENGINE = ‘mysql’ DATABASE_NAME = ‘empresa’ DATABASE_USER = ‘root’ DATABASE_PASSWORD = ‘123’ DATABASE_HOST = ‘localhost’
  • 24. Prática TIME_ZONE = ‘America/Campo Grande’ LANGUAGE_CODE = ‘pt-br’ TEMPLATE_DIRS = ( ‘/home/diemesleno/livre/templates/’, )
  • 25. 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) …
  • 26. Criando um Modelo … # 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)
  • 27. Criando um Modelo … # Criando a classe “Emprego” class Emprego(models.Model): publicado = models.DateField() titulo = models.CharField(max_length=50) descricao = models.TextField() local = models.ForeignKey(Local) …
  • 28. Criando um Modelo … # Definindo a função para retorno da classe def __unicode__(self): return “%s (%s)” % (self.titulo, self.local)
  • 29. 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’, )
  • 30. Visualizando o SQL python manage.py sql vagas
  • 31. Executando o SQL python manage.py syncdb
  • 32. Interface Admin cd vagas touch admin.py vim admin.py
  • 33. 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”) ordering = [“-publicado”] search_fields = (“titulo”, “descricao”) list_filter = (“local”,) admin.site.register(Local, LocalAdmin) admin.site.register(Emprego, EmpregoAdmin)
  • 34. Interface Admin python manage.py runserver http://localhost:8000/admin/
  • 35. 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), )
  • 36. 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}) …
  • 37. 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})
  • 38. Editar os templates Relembrando: (settings.py) TEMPLATE_DIRS = ( ‘/home/diemesleno/livre/templates/’, ) cd /home/diemesleno/livre/ mkdir templates cd templates
  • 39. 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>
  • 40. Editar os templates mkdir empresa cd empresa vim base.html
  • 41. 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 %}
  • 42. 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 %}
  • 43. 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> …
  • 44. 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 %}
  • 45. 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.
  • 46. Referências • http://djangoproject.com/documentation/ • http://code.djangoproject.com/ • http://groups.google.com/group/django-user • http://groups.google.com/group/django- developers
  • 49. Obrigado! Aplicações rápidas com Django Software Freedom Day – 20 de agosto de 2008 Campo Grande – Mato Grosso do Sul Contato: E-mail: diemesleno@gmail.com msn: d.lenon@gmail.com Skype: diemesleno