Melhores práticas para desenvolvimento Python/Django

Bom dia, boa tarde, boa noite.

Dando continuidade ao blog irei tratar hoje das melhores práticas para desenvolvimento Python/Django, e quando falamos em melhores práticas os primeiros passos que devemos seguir são as famosas PEP’s, Pyhton Enhancement Proposal (Proposta de Melhoria do Python), do Python.

As PEP’s foram escritas por várias pessoas ligadas ao Python e a mais famosa delas, mas não a única, é a PEP8 escrita pelos autores: Guido van Rossum <guido em python.org>, Barry Warsaw <barry em python.org>.

Não pensem que as PEP’s são restritivas ou obrigatórias, são apenas melhores práticas e você pode ou não seguir, mas aviso logo que para tornar-se um bom programador Python/Django e desejar um emprego bom, é altamente aconselhável seguir ao máximo as “dicas” das PEP’s e como já falei sendo a PEP8 a mais “famosa” vamos discutir um pouco sobre algumas “dicas” que devem ser adotadas tanto no Python, como consequentemente no Django.

PEP 8 | http://www.python.org/dev/peps/pep-0008/

  1. Utilizar quatro espaçamentos no lugar de tab’s para a identação.
  2. Nunca misturar espaços com tab’s.
  3. Comprimento máximo de cada linha 80 caracteres, para a quebra de linha utilizamos \ ou agrupamos o trecho de código com (), essa regra em particular eu não uso muito, pois dificulta a minha leitura.
    # Alinhados com a abertura delimitador 
    foo = long_function_name (var_one, var_two, 
                             var_three, var_four)
  4. Utilizar duas linhas em branco entre a declaração das classes.
  5. Os imports devem ser feitos em linhas separadas.
    import sys
    import os
    from subprocess import Popen, PIPE
  6. Quando importar uma classe de um módulo de mesmo nome, não há problemas em usar.
    from MyClass import MyClass
    from foo.bar.YourClass import YourClass
  7. Evitar espaços em branco nos seguintes lugares:
    • Antes e após parêntese, colchete ou chave.
      Errado: spam( ham[ 1 ], { eggs: 2 } )
      Certo: spam(ham[1], {eggs: 2})
    • Logo antes de uma vírgula, ponto-e-vírgula ou dois-pontos.
      Errado: if x == 4 : print x , y ; x , y = y , x
      Certo: if x == 4: print x, y; x, y = y, x
    • Imediatamente antes da chave que abre um índice.
      Errado: spam (1)
      Certo: spam(1)
    • Logo antes do parêntese que abre a lista de argumentos de uma função.
      Errado: dict [‘key’] = list [index]
      Certo: dict[‘key’] = list[index]

  8. Nomes e identificadores.
    • _underscore_no_inicio: costuma indicar que o atributo é de uso interno
    • underscore_no_fim_: usado para evitar conflitos com palavras-chave
    • __dois_underscores_no_início: atributo privado da classe
    • __dois_underscores_no_início_e_no_fim__: atributos ou objetos especiais, como __init__ , __import__ ou __file__
    • Módulos, devem ter as declarações TodaEmMaiusculas
    • Nomes de classes, sempre devem ser declaradas TodaEmMaiuscula
    • Nomes de funções, podem ser declaradas TodaEmMaiuscula ou toda_em_minuscula

Como falei antes, as “dicas” podem ou não ser seguidas, mas devemos sempre ter um mente que nosso código será lido em algum momento por outra pessoa, e mesmo nós quando passamos muito tempo ser lermos o código sentiremos dificuldade quando surgir a necessidade de darmos manutenção num determinado código, por isso para mim a principal dica é sobre o DocStrings que tratam sobre os comentário.

Devemos documentar os módulos, as funções, as classes e os métodos públicos, tais documentações devem vir logo abaixo das declarações, os DocStrings também são utilizados para testes no Python/Django devendo conter também declarações de testes, mas isso é assunto para o próximo post.

>>> print u’%s’ % (“Abraços”)

IDE’s ou não para desenvolver em Python/Django

Sendo uma linguagem fácil de trabalhar e com uma curva de aprendizagem bem curta, não é de forma alguma necessário o uso de qualquer IDE para o desenvolvimento com Python. Particularmente ainda lembro de uma dica da minha professora de HTML/CSS que dizia que a melhor IDE que existe é o bloco de notas, pois não tendo auxílio nenhum fixamos melhor à linguagem. Mas como o título do post fala irei aqui dar algumas dicas de IDE’s para o desenvolvimento em Python/Django.

IDE’s:

  1. Aptana, http://www.aptana.com/, é uma IDE não só para Python/Django com muitas funcionalidades que auxiliam o desenvolvimento.
  2. Eclipse, http://www.eclipse.org/, muito conhecida da galera que trabalha com Java, traz também várias funcionalidades.
  3. NotePad++, http://notepad-plus-plus.org/, bem simples nem podendo na minha maneira de pensar ser considerada uma IDE, mas muitas pessoas utilizam por ser bem leve, apenas para Windows.
  4. SublimeText2, http://www.sublimetext.com/2, minha preferida, pois além de ser desenvolvida em Python é a mais leve de todas e com inúmeros recursos, tendo como característica principal a simplicidade, além de ser Multiplataforma.

Como já disse a minha preferida é a SublimeText2, e caso algum leitor queira conhecer mostrarei aqui alguns plugins dessa IDE.

  1. O Package Control é o plugin inicial, pois ele será nosso gerenciador de plugins no sublimetext, facilitando a instalação/manutenção/remoção dos demais plugins, a instalação é bem simples para isso depois de instalado e aberto o SublimeText2 basta abrir o console e colar o código abaixo e clicar na tecla Enter:
    import urllib2,os; pf=’Package Control.sublime-package’; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),’wb’).write(urllib2.urlopen(‘http://sublime.wbond.net/’+pf.replace(&#8216; ‘,’%20’)).read()); print ‘Please restart Sublime Text to finish installation’Para instalar os demais plugins iremos trabalhar com o Package Control utilizando as teclas CTRL + ↑ + P e ao abrir a janela digitamos Package será mostrada uma janela como essa abaixo, ao escolhermos a opção Package Control: Install Package na próxima janela digitaremos o nome do plugin que desejamos instalar

    Janela do Package Controle

  2. ZenCode, https://bitbucket.org/sublimator/sublime-2-zencoding/wiki/Home, o objetivo desse plugin é agilizar o desenvolvimento principalmente em HTML, um exemplo que posso mostrar é a criação de uma lista UL com 5 elementos LI, para isso podemos digitar ul>li*5 e teclar TAB o resultado será isso:

    Bloco de código criado pelo ZendCode para uma lista desordenada, UL.

  3. Prefixr, http://wbond.net/sublime_packages/prefixr, esse plugin é muito interessante para quem já trabalha com CSS3. O funcionamento dele é bem simple, estando num bloco de código CSS3 que customiza por exemplo o background gradiente da página basta apertarmos CTRL + ALT + X e o resultado será a criação de comando para que o CSS3 funcione nos principais navegadores do mercado, que atualmente renderizam o CSS3 com prefixos.

    Comando CSS3 para configurar o background da página.

    Resultado do comando CTRL+ALT+x do plugin Prefixr, que configura o comando CSS para os principais browser’s do mercado

  4. GIT, https://github.com/kemayo/sublime-text-2-git, como o nome já diz é um plugin para trabalhar com versionamento
  5. CodeIntel, https://github.com/Kronuz/SublimeCodeIntel, para quem prefere ter o auxílio de um plugin de autocompletar esse plugin traz essa funcionalidade para várias linguagens.

Existem inúmeros outros plugins para o SublimeText2, basta fazer a pesquisa no Package Control.

>>> print u’%s’ % (“Abraços”)

Ambiente para desenvolvimento

Como já falei o Python/Django é realmente multiplataforma e você pode escolher desenvolver no Windows/Linux/MAC.

Aqui vou mostrar como instalá-lo no Windows, pois para os demais SO’s existem vários tutoriais, basta fazer uma simples busca no Google. Para o ambiente Windows vamos utilizar o arquivo Python 2.7.3 Windows Installer, encontrado no site do Python ¹, após concluir o download a instalação é simples como todas as do Windows não sendo necessário mudar nenhuma opção do instalador.

Para o Django iremos baixar a versão mais nova no site oficial do Django que atualmente é a 1.4.1 ². A instalação do Django é feita em duas partes, sendo a primeira a descompactação do arquivo baixado e a segunda executando o comando python setup.py install, esse comando deve ser executado do terminal do Windows, também conhecido como CMD, lembro que você deve para facilitar o uso do comando python configurar nas variáveis de ambiente do Windows o Python, para tanto indico o tutorial contido no portal “Aprendendo Django no Planeta Terra” ³ do colega/mestre Marinho Brandão. 

Para verificarmos se o Django foi instalado basta executar a sequência de comandos abaixo:

  1. Abrir o terminal, CMD, no Windows
  2. Executar no terminal o comando Python
  3. Executar no terminal do Python o comando import django
  4. Executar no terminal do Python o comando print django.get_version() o resultado deve ser 1.4.1, que é a versão que baixamos

Assim temos nosso ambiente pronto para o desenvolvimento dos nossos estudos

1 – http://python.org/download/
2
 – https://www.djangoproject.com/download/
3
 – http://www.aprendendodjango.com/baixando-e-instalando-o-django/

>>> print u’%s’ % (“Abraços”)

Porque aprender Python e Django?

Não vou tentar convencer ninguém que Python/Django é melhor ou pior que qualquer outra linguagem/framework, vou falar sobre o que me fez aprender essa dupla.

Python, apesar de pouco conhecida no Brasil, já é muito utilizada no exterior, tendo como exemplo o Google que o utiliza em vários de seus produtos como YouTube e Gmail. O Python não é limitada ao ambiente web, podendo-se desenvolver com python para vários ambientes e dispositivos, até mesmo sistemas embarcados podem ser desenvolvidos.

Entre as inúmeras vantagens que vi no Python destaco:

  • Fácil de aprender
  • Reusabilidade do código
  • Orientada a Objeto, inclusive com herança múltipla
  • Verdadeiramente multi-plataforma, pois o mesmo código, sem alteração, roda tanto em Linux/Unix, Windows e MAC
  • Infinidade de bibliotecas disponíveis para as mais variadas tarefas
  • Legibilidade do código
  • Módulo nativo para desenvolvimento orientado a teste, TDD

Já em relação ao Django o que posso dizer é que ele seguiu quase todas as características do Python, tendo entretando uma característica bem interessante que é a geração automática de formulários de manipulação, incluindo a validação, dos dados da sua aplicação/site, o famoso CRUD (Create, Read, Delete, Update)

A necessidade do desenvolvimento de aplicações/site cada vez mais complexas, a garantia de código gerenciável, facilidade de manutenção e agilidade no desenvolvimento são algumas das necessidades do desenvolvedor atual e todas elas são atendidas pela dupla Python/Django. Foram essas características combinada com a equipe reduzida que temos na Prefeitura Municipal de Palmas, que me levou como gerente de projetos e sistemas a adotar o Django como framework para desenvolvimento de nossas aplicações web como também do nosso portal.

>>> print u’%s’ % (“Abraços”)