Apresentação disponível em:
http://slides.com/roldaojunior/intro-django
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 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
print('Olá, Mundo!')
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)
# 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
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
class Quadrado(object): def __init__(self, lado): self.largura = lado self.altura = lado quadrado = Quadrado(2)
print quadrado.largura, quadrado.altura
def soma(a, b=1):
return a + b
print soma(10, 2)
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.
Baixar e instalar o Python (http://www.python.org)
Baixar e instalar o PIP (http://www.pip-installer.org)
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 é 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.
pip install virtualenv
pip install virtualenvwrapper
Configurando o virtualenv wrapper
source virtualenvwrapper.sh
echo . virtualenvwrapper.sh > ~/.bashrc
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.
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
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.
O django já possui diversos apps para as mais diversas tarefas. (facebook, e-cormerce, cms, comentários, blogs, busca, etc.)
Onde encontrar:
Criar novo virtualenv
mkvirtualenv gerenciador
Alternar para o ambiente
workon gerenciador
pip install django
Para criar um novo projeto basta executar o comando:
django-admin.py startproject gerenciador
Para executar o projeto basta usar o comando
python manage.py runserver
python manage.py startapp agenda
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
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
INSTALLED_APPS = (
...
'agenda',
)
# -*- coding: utf-8 -*-
from django.http import HttpResponse
def index(request):
return HttpResponse('Olá mundo')
urlpatterns = patterns('',
...
url(r'^$', 'agenda.views.index'),
)
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
Incluir no settings.py
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
<!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>
{% 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 %}
{% extends 'base.html' %}
{% block corpo %}
<form action="" method="post">
<table>
{% csrf_token %}
{{ form.as_table }}
</table>
<button type="submit">Adicionar</button>
</form>
{% endblock %}
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
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
urlpatterns = patterns('',
...
url(r'agenda/$', 'agenda.views.lista'),
url(r'agenda/add$', 'agenda.views.adiciona'),
)