Adicionar um mês a uma data em Python

Oi pessoal!

Estava aqui testando os recursos das classes datetime do Python para criar um módulo de pagamentos e surgiu a necessidade de acrescentar um mês a uma data para calcular o próximo vencimento.

Ao pesquisar na internet me deparei com dicas deste tipo:

import datetime
from datetime import timedelta

transacao = datetime.date(2011,1,30)
vencimento = transacao + timedelta(days=30)
print transacao.strftime("%d-%m-%Y")
print vencimento.strftime("%d-%m-%Y")

# saída
30-01-2011
01-03-2011

Nunca faça isto, pois os meses possuem 30 ou 31 dias, além de fevereiro que possui 28 dias.
Para resolver isto, existe uma classe específica para este tipo de cálculo, veja:

import datetime
from dateutil.relativedelta import relativedelta

transacao = datetime.date(2011,1,30)
vencimento = transacao + relativedelta(months=+1)
print transacao.strftime("%d-%m-%Y")
print vencimento.strftime("%d-%m-%Y")

# saída
30-01-2011
28-02-2011

O timedelta trabalha com milisegundos até weeks, então se for calcular datas ou tempo está valendo,
desde que não se trate de cálculos para datas de vencimento.

Até a próxima!

Criando uma aplicação no Django e configurando o settings.py

Olá pessoal!

Neste post mostrarei como criar uma aplicação Django pelo Eclipse e comentar um pouco sobre a configuração do settings.py.

Para criar um novo projeto Django pelo Eclipse, vá no menú File>New>Other>PyDev>PyDev Django Project, digite um nome para o projeto e desmarque a opção “create default ‘src’ folder and add it tho the pythonpath?”, pois em ambiente de produção não é recomendado usar a estrutura do projeto com a pasta “src”.

PyDev Django Project

Em interpreter, deixe como default, mas se o Eclipse acusar que falta apontar o interpretador no PythonPath, então clique no link abaixo para apontá-lo, surgirá a seguinte janela:

PyDev Python Path

Para configurar o caminho ao interpretador basta olhar a imagem acima e clicar em Auto Config. Ele sozinho irá escanear a pasta /usr/lib e adicionará ao Python Path.

Ao dar um “next” surgirá a janela de configuração para conexão ao banco de dados, lá existirão várias opções, escolha a sua. Não esqueça que o banco já deverá estar criado e de setar a porta do banco, usuário e senha corretamente:

PyDev Django Settings

Ao dar um Finish, o seu projeto terá a seguinte estrutura:

Estrutura do Projeto

Repare a estrutura, uma pasta principal “projeto”, dentro dela um pacote “projeto” e dentro deste pacote os módulos .py.

O arquivo manage.py é o responsável por rodar a aplicação, sincronizar as classes criadas com o banco, mostrar o sql gerado pela estrutura do projeto, entre outras coisas. Ele é muito usado em modo texto, por exemplo, para rodar o server pelo terminal, mas como estamos usando Eclipse, podemos rodar a aplicação pela própria IDE.

O __init__.py nem vamos tocar, esse é “editado” somente para algo mais avançado, para inicio de aprendizado e projeto simples, não precisamos mexer.

O arquivo de configuração do projeto é o settings.py, abra este arquivo e veja o seu conteúdo. Ao criar o projeto, repare que a parte do banco de dados já está configurada:


DATABASES = {

'default': {

'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.

'NAME': 'projeto',                      # Or path to database file if using sqlite3.

'USER': 'postgres',                      # Not used with sqlite3.

'PASSWORD': 'senha',                  # Not used with sqlite3.

'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.

'PORT': '5432',                      # Set to empty string for default. Not used with sqlite3.

}

}

A seguinte configuração também é recomendada para internacionalização, resolução de charset e language code:


TIME_ZONE = ''

LANGUAGE_CODE = 'pt-br'

# Content-Type header.

DEFAULT_CONTENT_TYPE = 'text/html'

DEFAULT_CHARSET = 'utf-8'

FILE_CHARSET = 'utf-8'

# If you set this to False, Django will make some optimizations so as not

# to load the internationalization machinery.

USE_I18N = True

# If you set this to False, Django will not format dates, numbers and

# calendars according to the current locale

USE_L10N = True

Estas dicas são as mais básicas, obviamente ainda falta a parte de pasta estática para armazenamento de arquivos css, imagens e arquivos, mas isso pode ser encontrado na documentação do Django.

Como o projeto está criado e configurado, no próximo post já será possível programar um pouco e rodar a aplicação.

Até o próximo post!

Abraço!

Começando no Django

Oi pessoal!

Este é o primeiro post dedicado a um excelente framework de desenvolvimento ágil em Python, se trata do Django.

Eu comecei em Java, usando o framework VRaptor 3, para quem não conhece recomendo esperimentá-lo, pois em questão de produtividade é um dos melhores.

Sabemos que em desenvolvimento precisamos cumprir prazos curtos, e muitas vezes o framework não colabora. Bom, isso está ficando para trás.

Depois que iniciei meus estudos em Python, percebi que a linguagem é mais objetiva e elegante que a linguagem Java, o código é menor e mais limpo.

As diferenças básicas entre Django e VRaptor 3 residem na estrutura do projeto e obviamente na linguagem, mas ambos são muito bons como frameworks ágeis.

A grande vantagem do Django é a quantidade de recursos que ele possui, o próprio framework lhe dá recursos para trabalhar com imagens, e-mails, arquivos estáticos, paginação na html e além desses recursos, possui plugins criados pela comunidade. Um site excelente é o Django-Packages, veja a quantidade de plugins que você pode adicionar à sua aplicação web.

Para começar o estudo do Django, eu estou migrando uma aplicação feita em Java, que é um sistema de gerenciamento imobiliário, possui galeria de fotos dos imóveis, newsletter, envio de e-mail e a parte de gerenciamento de proprietários e imóveis.

Nos frameworks em Java, ainda não existe um “Java-Packages” da vida, é necessário implementar tudo na mão, ou seja, criar do zero, ou então garimpar por códigos que possam ser adaptados à sua aplicação. Mas o Django possui códigos prontos e reusáveis para que os desenvolvedores possam adicionar fácilmente e assim agilizar o processo de desenvolvimento de software, ou seja, não precisa ficar “reinventando a roda”.

O princípio do Django é o princípio do DRY (don’t repeat yourself) – não se repita, portanto, nada de recriar o mesmo código para as visões. Sabe aquela parte chata de criar os fields e tables para várias páginas html? Esqueça, o Django cria automáticamente os forms a partir dos models. Não é legal?

Se você é desenvolvedor Java Web e está interessado no Django, aqui estão algumas dicas para começar.

Quando se desenvolve em Java, seu projeto possui camadas, o famoso MVC. camada de modelo, camada de visão e camada de controle. A estrutura do seu projeto possui no mínimo 3 pacotes que representam cada camada, mas além desses você possui um pacote DAO (data access objetc), um utils, um component ou um interceptor talvez.

No Django as coisas mudam um pouco, mas o principio do MVC está presente, aqui estão algumas diferenças entre o Django e frameworks Java.

Método no Java é a Função no Django.

Pacote no Java é uma pasta no Django.

App no Django representa uma aplicação que pode se comunicar com outras aplicações, como se fossem pacotes do Java se comunicando, porém, cada app possui seus próprios módulos.

Módulos no Django são arquivos .py que possuem funções específicas na aplicação, estas são as funções de cada módulo:

models.py – aqui ficam os seus models, ou seja, suas classes.

forms.py – aqui ficam os seus forms, são classes que geram forms a partir dos models.

admin.py – este arquivo registra a sua app no admin

urls.py – este arquivo mapeia/registra uma função com a sua url.

views.py – este arquivo armazena todas as suas funções (métodos).

settings.py – este arquivo é o responsável pela configuração do projeto, informações do banco de dados, pastas estáticas de css e imagens, registro de apps, registro de internacionalização, entre outras coisas, seria o web.xml do Django.

Estes são os módulos principais usados para construir uma aplicação, mas nada o impede de criar um utils.py para executar funções auxiliares.

Imagine que ao criar a sua aplicação você pudesse acessar uma área de admin, uma página pronta para que você gerenciar a sua aplicação gráficamente, o Django possui isto por default, para usar esta área, basta dizer qual app deseja que o admin registre.

Aqui está uma imagem de um form de cadastro de imóvel na área do admin:

Form de cadastro de Imóvel na área do Admin

Essa página é gerada pelo próprio Django, o que é necessário é apenas registrar a app no admin.py, no meu caso eu tenho várias apps, proprietário, imóvel, tipo, modalidade, status, galeria, endereço:

Página Inicial do Admin

Todo o css e javascript visualizado na página do admin é do Django, eu não criei nada e nem editei nada para essa área. Mas na sua aplicação sim, o css deverá ser criado, repare que o admin é uma área separada da sua aplicação. Veja o mesmo form de cadastro de imóvel na minha aplicação:

Form de Imóvel na aplicação

Veja que não possui css algum, esse form foi gerado a partir do model (classe imóvel).

Nisto o Django ajuda e muito, todos os forms podem ser gerados a partir das classes e seus fields podem ser alterados e validados.

Como desenvolvedor Java, eu uso o Eclipse Helios SR2, e para manter todos os projetos centralizados em uma IDE, eu instalei o PyDev no Eclipse. Para instalar abra o Eclipse, vá no menú help>install new software, clique em “add” e adicione a url http://pydev.org/updates.

O PyDev possui o suporte a desenvolvimento com Django, mas a instalação do Django será necessária. No Ubuntu o Django está no repositório, mas eu preferi baixar a versão mais nova do site oficial do Django, a instalação é extremamente fácil.

Eu uso PostgreSQL como database, e é necessário instalar o pacote python-psycopg2:

sudo apt-get install python-psycopg2

Se você usa o MySQL, instale o pacote python-mysqldb:

sudo apt-get install python-mysqldb

Para iniciar o aprendizado, recomendo duas fontes, o tutorial oficial do Django ou este artigo/tutorial postado no imasters.

Bom, este primeiro post foi apenas para apresentar o Django, tirar algumas dúvidas que alguns desenvolvedores Java possam ter, ou até aquele que não programa mas que está interessado em entrar no mundo do desenvolvimento Web.

Nos seguintes posts colocarei código, comentado o que aprendi até agora e dando dicas para não cometer erros que geralmente desenvolvedores de outras linguagens, como o Java, cometem.

Espero que tenham gostado.

Abraço!

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.