aplicações rápidas para web com django

Download Aplicações rápidas para web com Django

Post on 16-Jan-2016

221 views

Category:

Documents

0 download

Embed Size (px)

DESCRIPTION

Mini-curso Django.

TRANSCRIPT

  • Aplicaes rpidas para Web com

    Diemesleno Souza CarvalhoSoftware Freedom Day - Campo Grande MS

    20 de Setembro de 2008

  • Tpicos abordados

    Apresentao do framework. A documentao importante? Mercado de trabalho. Instalao do Django no GNU/Linux. Criao de uma aplicao simples. *

    * Caso o tempo permita.

  • Apresentao

    Framework web de alto nvel. Desenvolvimento rpido. Automatiza coisas repetitivas. Segue boas prticas de programao. Utiliza os princpios do DRY e ORM. Utiliza padres MVC/MTV.

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

  • Apresentao

    Guitarrista Belga Grande nome do Jazz

    Django Reinhardt

  • Adocumentaoimportante?

    Contedo sempre atualizado. Tutoriais passo-a-passo. Traduo para portugus quase

    completa. Excelentes livros j lanados. (ingls)

  • 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

  • Instalao 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

  • Prtica Desenvolvendo uma aplicao simples

  • Projeto (site) : empresa

    Database

    Application : adminApplication : adminAplicao : admin/admin/

    Aplicao : vagas/vagas/

    Prtica

  • Prticadjango-admin.py startproject empresa

    empresa__init__.py pacote/*manage.py gerenciador/*settings.py configuraes/*urls.py rotas/*

  • Prticacd empresa

    python manage.py startapp vagas

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

  • Prticacd empresaEditar settings.py

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

    )

    DATABASE_ENGINE = mysqlDATABASE_NAME = livreDATABASE_USER = rootDATABASE_PASSWORD = sgiDATABASE_HOST = localhost

  • PrticaTIME_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 funo 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 funo para retorno da classe

    def __unicode__(self):return %s (%s) % (self.titulo, self.local)

  • Ativando o modelo(Aplicao)

    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 Localfrom empresa.vagas.models import Empregofrom django.contrib import admin

    class LocalAdmin(admin.ModelAdmin):pass

    class EmpregoAdmin(admin.ModelAdmin):pass

  • Design das URLsvim 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 aplicao na administrao do sistema

    from empresa.vagas.models import Localfrom empresa.vagas.models import Empregofrom 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 visualizao

    from empresa.vagas.models import Localfrom empresa.vagas.models import Empregofrom 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 Localfrom empresa.vagas.models import Empregofrom 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 Localfrom empresa.vagas.models import Empregofrom 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 vizualizao

    from empresa.vagas.models import Localfrom empresa.vagas.models import Empregofrom 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 vizualizao

    from empresa.vagas.models import Localfrom empresa.vagas.models import Empregofrom 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 Localfrom empresa.vagas.models import Empregofrom 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 Localfrom empresa.vagas.models import Empregofrom 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 URLsvim url.pyfrom 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\d+)/$, detail),

    )

  • Editanto a viewcd vagasfrom 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

    Super Empresa: {% block title %} Page {% endblock %}

    {% block extrahead %} {% endblock %}

    {% block content %} {% endblock %}

  • Editar os templates

    mkdir vagas

    cd vagas

    vim base.html

  • Editar os templates{% extends base.html %}

    {% block extrahead %}

    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; backgrou