Apresentação disponível em:
http://slides.com/roldaojunior/intro-django

 Python

História

  • Criada em 1990 por Guido van Rossum
  • Concebido a partir da linguagem ABC
  • Nome inspiriado no programa de TV Monty Python's Flying Circus

Características

  • Fácil de aprender e legível
  • Interpretada + Compilada
  • Multi-plataforma (Windows, Unix/Linux, Mac, etc.)
  • Orientada a objetos
  • Tipagem dinâmica e forte
  • Suporte a paradigma estrutural funcional
  • Ambiente interativo
  • Vasto conjunto de bibliotecas
  • Integração com outras linguagens com Java, C, C++, .NET

Quem usa

  • Google (Youtube, Groups, Gmail)
  • Dropbox
  • NASA
  • Reddit
  • Distribuições Linux
  • Serpro
  • Autodesk Maya
  • IFRN
  • Globo.com
  • e muitas outras

IDEs para Python

IDEs para Python

  • Aptana PyDev (plug-in do eclipse)
  • NetBeans
  • JetBeans PyCharm
  • Komodo
  • PyStudio
  • Python Tools for Visual Studio
  • KDevelop
  • Wing IDE
  • entre outras.

Módulos e Pacotes

As bibliotecas Python são organizadas em módulo e pacotes. Cada arquivo .py é um módulo Python que pode conter várias classes e objetos.

As pastas contendo arquivos .py são considerados como pacotes.

Importando módulos

Importando para um namespace seperado

import pacote.modulo 

Importar para o namespace atual

from pacote.modulo import * 

Importar um objetivo específico com outro nome

from pacote.modulo import Classe as Novo 

Linguagem Python

Olá mundo

print('Olá, Mundo!') 

Exemplo de Código

texto = "string"
numero = 1
booleando = True or False
lista = [1, 2, 3]
dicionario = {'chave': 'valor'}

def soma(a, b=1):
    return a + b

soma(1)
soma(1, 2)
soma(a=1, b=2)
soma(b=1, a=2)

Exemplo de Código

# Uma lista de instrumentos musicais
instrumentos = ['Baixo', 'Bateria', 'Guitarra']
# Para cada nome na lista de instrumentos
for instrumento in instrumentos:
    # mostre o nome do instrumento musical
    print instrumento 

Resultado

Baixo
Bateria
Guitarra 

Exemplo de Código

Programa 1

print 'Digite os valores a somar seguidos de [ENTER].'
print 'Para encerrar digite zero: 0'
n = float(raw_input(':'))
total = n
while n != 0:
   n = float(raw_input(':'))
   total = total + n
print 'TOTAL: %s' % total 
Programa 2
for i in [234, 654, 378, 798]:
    if i % 3 == 0:
        print i, '/ 3 =', i / 3 

Exemplo de Código

Classes

class Quadrado(object):
    def __init__(self, lado):
        self.largura = lado
        self.altura = lado

quadrado = Quadrado(2)print quadrado.largura, quadrado.altura

Funções

def soma(a, b=1):
    return a + b

print soma(10, 2)

Evitando problemas com acentos

No Python 2 caso algum arquivo código possua acentos ou outros caracteres não-ASCII, o interpretador irá falhar ao tentar ler o arquivo.

Para evitar isso basta incluir a língua a seguir no início do arquivo

# -*- coding: utf-8 -*-

A partir do Python 3 isso não é mais necessário, pois ele já considera todos os arquivos fontes como sendo UTF-8.

Instalação o Python e PIP

Windows

Baixar e instalar o Python (http://www.python.org)

Baixar e instalar o PIP (http://www.pip-installer.org)

Linux

O linux já possui suporte ao Python e ao PIP. Basta instalá-los pelo gerenciador de pacotes.

sudo apt-get install python python-pip

Virtualenv

Virtualenv é uma ferramenta para criar ambientes isolados do Python.

Permite uso de diversas versões do Python e dos pacotes dependendo do projeto.

Virtualenv Wrapper é um conjunto de scripts para facilitar o a criação e uso dos virtualenvs.

Instalando

pip install virtualenv
pip install virtualenvwrapper

Configurando o virtualenv wrapper

source virtualenvwrapper.sh
echo . virtualenvwrapper.sh > ~/.bashrc

 Django

História

Django é framework para desenvolvimento rápido de aplicações web, escrito em Python.

O nome Django foi inspirado no músico de jazz Django Reindhardt.

Foi criado originalmente como sistema para gerenciar um site jornalistico na cidade de Lawrance, no Kansas. Tornou-se um projeto de código aberto e foi publicado sob licença BSD em 2005.


Características

DRY - (Don't Repeat Yourself, Não se repita)

Padrão MTV (Model Template View)

Mapeamento objeto-relacional (ORM)

Interface administrativa

Formulãrios

URLs elegantes

Sistema de templates

Internacionalização

Localização

Aplicação e projeto

Uma aplicação (app) é um pacote Python que executa alguma funcionalidade (sistema de notícias, enquete, eventos, etc.)

Um projeto é um conjunto de apps para um site em particular.

Um projeto pode conter várias apps e uma app pode estar em vários projetos.

Apps reutilizáveis

O django já possui diversos apps para as mais diversas tarefas. (facebook, e-cormerce, cms, comentários, blogs, busca, etc.)

Onde encontrar:

  • DjangoPackages.com
  • Github
  • Python Package Index

Configurando o ambiente

Configurar virtualenv

Recomenda-se a utilização do Django em um virtualenv

Criar novo virtualenv

mkvirtualenv gerenciador 

Alternar para o ambiente

workon gerenciador

Instalando o Django

pip install django


Criando o projeto

Para criar um novo projeto basta executar o comando:

django-admin.py startproject gerenciador
O comando irá criar uma pasta chamada projeto com os seguintes arquivos:
__init__.py - Modulo padrão do pacote (necessário para reconhecer a pasta como pacote Python)
manage.py - Script para realizar tarefas administrativas no projeto
settings.py - Configurações do projeto (BD, apps, etc.)
urls.py - Configuração das URLs
wsgi.py - Ponto de entrada do projeto (primeiro arquivo a ser carregado pelo servidor para executar o projeto no ambiente de produção)

Página inicial do Django

Para executar o projeto basta usar o comando

python manage.py runserver


Criando uma aplicação

python manage.py startapp agenda
O comando irá criar uma pasta chamada app1 com seguintes arquivos:
__init__.py - Modulo padrão do pacote (necessário para reconhecer a pasta como pacote Python)
admin.py - Configuração do admin
models.py - Contém as classes de domínio da aplicação.
tests.py - Contém os testes específicos da aplicação
views.py - Contém as visões do aplicação

Estrutura do projeto

A estrutura do projeto deverá estar assim, porém ele pode ser modificada conforme necessário.

gerenciador/
    agenda/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py
    gerenciador/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    manage.py

Configuração do Django

Configuração do Banco de dados

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
} 

Habilitar o app no projeto

INSTALLED_APPS = (
    ...
    'agenda',
)

Um simples Olá mundo

Editar o arquivo agenda/views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse

def index(request):
    return HttpResponse('Olá mundo') 
Editar o arquio urls.py
urlpatterns = patterns('',
    ...
    url(r'^$', 'agenda.views.index'),
) 

Um simples Olá mundo


Modelos de dados

Incluir no arquivos agenda/models.py
from django.db import models

class ItemAgenda(models.Model):
    data = models.DateField()
    hora = models.TimeField()
    titulo = models.CharField(max_length=100)
    descricao = models.TextField() 
Atualizando no banco de dados
python manage.py syncdb 

Configurar diretório de templates

Incluir no settings.py

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
) 

Criando o template

Criar aruqivo templates/base.html
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
    {% block cabecalho %}
        <title>Agenda</title>
    {% endblock %}
</head>
<body>
    {% block corpo %}
        <!-- body -->
    {% endblock %}
</body>
</html>

Criando o template

Criar arquivo agenda/templates/agenda/lista.html
{% extends 'base.html' %}
{% block corpo %}
<ul>
{% for item in itens %}
  <li>
    {{ item.data|date:'d/m/Y' }} - {{ item.titulo }}
  </li>
{% empty %}
  <li>Sem itens na lista</li>
{% endfor %}
</ul>
<a href="add">Adicionar</a>
{% endblock %}

Criando o template

Criar o arquivos agenda/templates/agenda/adiciona.html
{% extends 'base.html' %}
{% block corpo %}
<form action="" method="post">
<table>
  {% csrf_token %}
  {{ form.as_table }}
</table>
<button type="submit">Adicionar</button>
</form>
{% endblock %}

Criando a view lista

Adicionar em agenda/views.py
 def lista(request):
    itens_agenda = ItemAgenda.objects.all()
    return render_to_response(
        'agenda/lista.html', {'itens': itens_agenda}
    )
Adicionar importações
from django.shortcuts import render_to_response
from .models import ItemAgenda

Criando a view adicionar

ItemAgendaForm = modelform_factory(ItemAgenda)

def adiciona(request):
    if request.method == 'POST':
        form = ItemAgendaForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("/agenda")
    else:
        form = ItemAgendaForm()
    return render_to_response(
        'agenda/adiciona.html', {'form': form},
        context_instance=RequestContext(request)
    )
Adicionar importações
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.forms.models import modelform_factory 

Configurando a URL

Adicionar ao arquivo urls.py
urlpatterns = patterns('',
    ...
    url(r'agenda/$', 'agenda.views.lista'),
    url(r'agenda/add$', 'agenda.views.adiciona'),
)

Página de lista


Página de adicionar


Exemplo de aplicativo

O código está disponível em:
https://github.com/roldaojr/exemplo-django

Dúvidas?

Title

Made with Slides.com