+


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
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
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
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
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
# -*- coding: utf-8 -*-
from django.http import HttpResponse
def index(request):
return HttpResponse('Olá mundo')
urlpatterns = patterns('',
...
url(r'^$', 'agenda.views.index'),
)
Um simples Olá mundo

Modelos de dados
from django.db import models
class ItemAgenda(models.Model):
data = models.DateField()
hora = models.TimeField()
titulo = models.CharField(max_length=100)
descricao = models.TextField()
python manage.py syncdb
Configurar diretório de templates
Incluir no settings.py
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
Criando o template
<!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
{% 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
{% 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
def lista(request):
itens_agenda = ItemAgenda.objects.all()
return render_to_response(
'agenda/lista.html', {'itens': itens_agenda}
)
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)
)
from django.http import HttpResponseRedirect
from django.template import RequestContext
from django.forms.models import modelform_factory
Configurando a URL
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
Dúvidas?
Title
Introdução ao Django
By Roldão Junior
Introdução ao Django
Pequena introdução ao Django
- 973