Segue para o conteúdo

Artigos marcados como ‘django’

25
abr

Trabalhando com Python e Django à moda Osvaldo

Esse post está aqui para ser usado por mim como referência futura mas, como pode ser útil para outras pessoas vou deixá-lo público aqui no blog.

Software

Trabalhei muito tempo com Linux (e alguns outros Unices) e de três anos pra cá sou mais um Apple Fanboy que usa o excelente OS X. Mas acho que boa parte das dicas aqui ainda são úteis para usuários de Linux.

  • Terminal.app – Porque Mac é máquina pra ‘macho’ :D
  • bash – Pesadão, bloat, mas não consegui me habituar com outro. É o default do OS X.
  • Vim – Esse é o editor pra tudo. É difícil de aprender a usar mas é um F1. Depois que aprendemos a lidar com ele a gente voa. Uso a versão texto que acompanha o OS X.
  • TextMate – Esse eu uso para o desenvolvimento ‘pesado’. Dá pra usar o Vim pra isso também. Mas dependendo do meu humor eu escolho o TextMate para algumas coisas.
  • Rudix – O OS X não vem com tudo mas você encontra o que falta no Rudix.
  • Git – Uso o git pros meus projetos mas também tenho o Mercurial, Bazaar, Subversion, … instalados para contribuir com outros projetos open-source
  • virtualenv – ter um ambiente isolado para cada projeto Python onde você trabalha é muito legal. Já escrevi sobre o virtualenv aqui.
  • pylint e pyflakes – Analisadores estáticos de código.

Diretórios básicos

  • $HOME/
    • Work – Diretório onde os projetos em que trabalho ficam.
    • bin – Diretório com scripts, binários estáticos, etc. Esse diretório fica no $PATH

Configuração

Sempre que eu falar sobre um arquivo de configuração específico você pode encontrá-lo no endereço: http://github.com/osantana/personal.

Os arquivos ‘.’ (ponto)

.profile

  • Configurar 3 aliases: mv='mv -i' e cp='cp -i' pra evitar acidentes com arquivos sendo sobrescritos e ls='ls -G' para habilitar cores no comando ls.
  • Configurações genéricas para cores no terminal
  • Definir o vim como EDITOR padrão.
  • Definir LANG e LC_CTYPE como en_US.UTF-8 para que o Mercurial e alguns outros softwares funcionem corretamente.
  • Adicionar o diretório $HOME/bin ao $PATH. Nesse diretório eu jogo todos aqueles programinhas utilitários usados no dia a dia.
  • Configurações Python:
  • Configuração Java: export JAVA_HOME="/Library/Java/Home"
  • Configuração Ruby: adicionar $HOME/.gem/ruby/1.8/bin ao $PATH
  • Eu uso virtualenv em todos os meus projetos então crio duas funções para ativar os ambientes e entrar nos diretórios desses projetos:
    # Uso: p nome_do_projeto
    p() {
        cd ~/Work/$1*
        [ -f bin/activate ] && source bin/activate
    }
     
    # Uso: c
    c() {
        [ -d "$VIRTUAL_ENV" ] && cd $VIRTUAL_ENV
    }

.gitconfig

[user]
	name = Osvaldo Santana
	email = osantana na triveos.com
[color]
	status = auto
	diff = auto
	branch = auto
	ui = auto
	grep = auto
[alias]
	st = status
	ci = commit
	co = checkout
[merge]
	tool = opendiff
[core]
	legacyheaders = false
	excludesfile = /Users/osantana/.gitignore
    whitespace = trailing-space,space-before-tab
[apply]
    whitespace = fix
[repack]
	usedeltabaseoffset = true
[git-tmbundle]
	gitx-path = /Application/GitX.app/
[mergetool "opendiff"]
	cmd = opendiff
	trustExitCode = true
[clean]
	requireForce = false

.gitignore

.DS_Store
*.py[co]
*.tmproj
*~
*.swp*

.inputrc

Eu uso o modo vi também no console. Neste arquivo fica essa configuração e mais umas outras que deixam o comportamento do prompt do Mac mais parecido com o do Linux.

Já falei sobre essas configurações aqui no blog. Use por conta e risco.

.pylintrc

As configurações que eu uso para análise estática do código que eu produzo. Eu rodo o pylint antes de fazer o commit do meu código. Durante o desenvolvimento eu uso somente o pyflakes que é mais simples e rápido mas faz uma análise mais superficial do código. Eu costumava usar o pep8.py mas já faz um tempo que o aposentei.

.pystartup.py

Script executado pelo interpretador Python ao entrar no modo interativo. Eu configuro o ‘auto-completion’ do prompt interativo do Python, gravo o histórico de comandos, etc.

Infelizmente ele não funciona com o Python padrão do Mac porque o mesmo não é compilado com a biblioteca readline. Mas no Linux ele (deve) funcionar certinho.

.vimrc

Esse é o meu famoso arquivo .vimrc. Ele não tem nada de muito especial.

Outros arquivos

Existem outros arquivos mas, nestes casos, eles contém informações privativas e não faria sentido colocar aqui pra vocês :)

Criando e Usando um projeto Python (com Django)

Para exemplificar vamos criar um projeto “pythonologia”:

~ $ cd ~/Work
Work $ virtualenv --no-site-package pythonologia
New python executable in pythonologia/bin/python
Installing setuptools............done.
Work $ p pythonologia
(pythonologia) pythonologia $ easy_install django
(pythonologia) pythonologia $ django-admin.py pythonologia
(pythonologia) pythonologia $ cd pythonologia
(pythonologia) pythonologia $ git init
(pythonologia) pythonologia $ git add *.py
(pythonologia) pythonologia $ git commit -m "Initial commit"

Projeto criado e a estrutura de diretórios vai ficar mais ou menos assim:

~/Work/pythonologia
       |____ pythonologia
       |     |____ app_django1
       |      \___ app_django2
       |____ bin
       |____ include
        \___ lib
             \____ python2.6
                   |____ distutils
                    \____ site-packages

Os arquivos que não são mantidos no repositório Git ficam no diretório ~/Work/pythonologia ou em um diretório ~/Work/pythonologia/files. O arquivo de projeto do Textmate, por exemplo, fica em ~/Work/pythonologia/pythonologia.tmproj.

Eu também crio um link simbólico ~/Work/pythonologia/django -> ~/Work/pythonologia/lib/pythonX.X/site-package/Django-1.1.1-py2.6.egg/django para dar uma ‘espiada’ no código do Django quando necessário.

Quando eu quero trabalhar num outro projeto eu faço:

(pythonologia) pythonologia $ deactivate
pythonologia $ p outro_projeto
(outro_projeto) outro_projeto $

Eu estou num diretório qualquer e quero voltar para o diretório raiz do projeto basta fazer:

(pythonologia) ~ $ c
(pythonologia) pythonologia $
29
mar

Textmate “Django test executator tabajara”

O script a seguir pode ser usado para executar testes automatizados em uma aplicação Django a partir do Textmate.

Ele deve ser usado como um “command” no bundle “Python Django” do Textmate e funciona exclusivamente com o sistema de testes do próprio Django (manage.py test).

#!/bin/bash
 
python=$(/usr/bin/which ${TM_PYTHON:-python})
project="$(dirname "$TM_DIRECTORY")"
app="$(basename "$TM_DIRECTORY")"
 
# virtualenv
if [ -x "$project/../bin/python" ]; then
   python="$project/../bin/python"
fi
 
class_filter="s/^ *class +([A-Za-z0-9_]+Test)\(.*Test.*\):/\1/p"
test_filter="s/^ *def +(test[a-zA-Z0-9_]+) *\(self.*$/\1/p"
 
echo "<html><head>"
echo "<title>Django test results</title>"
echo "</head><body>"
echo "<h1>Django test results</h1>"
if [ -f "${project}/settings.py" -a \
     -f "${project}/manage.py" ]; then
  echo "<h2>Test Results for: $app</h2>"
  echo "<pre>"
 
  # selected text test
  tests=$(
    if [ x"$TM_FILENAME" = x"tests.py" -a \
         "$TM_SELECTED_TEXT" ]; then
      classname=$(
        sed -nE "1,${TM_INPUT_START_LINE}p" "${TM_FILEPATH}" |\
        sed -nE "$class_filter" |\
        tail -1
      )
      echo "$TM_SELECTED_TEXT" | while read l; do
        class_parse=$(echo "$l" | sed -nE "$class_filter")
        [ "$class_parse" ] && classname="$class_parse"
        test_parse=$(echo "$l" | sed -nE "$test_filter")
        [ "$test_parse" ] && echo "$app.$classname.$test_parse"
      done
    fi
  )
 
  [ -z "$tests" ] && tests="$app"
  $python $project/manage.py test $tests
  # I don't have time to "fight" against wordpress
  # echo "CLOSE_pre_tag"
else
  echo "<p style=\"color:red;\">Error: Django App expected.</p>"
fi
# Again, I don't have time to "fight" against wordpress
# echo "CLOSE_body_tag CLOSE_html_tag""
  • Este comando requer que o Bundle “Python Django” esteja instalado. Existe uma versão no repositório do próprio Textmate e uma versão atualizada no bitbucket.
  • Acione “Bundles->Bundle Editor->Show Bundle Editor”.
  • Selecione “Python Django” e clique no botão “+ New Command”.
  • Escolha um nome para o comando. Aqui eu uso “Run App Tests”.
  • Configure as opções do comando conforme abaixo:
    • Save: All files in Project
    • Commands: O script acima
    • Input: None
    • Output: Show as HTML
    • Activation: Key Equivalent ⌃⌥⌘R
    • Scope Selector: source.python.django

Modo de usar

  • O comando é acionado com as teclas ⌃⌥⌘R.
  • O comando executa apenas os testes da aplicação à qual o arquivo que você está editando pertence.
  • Por padrão o comando executará todos os testes da aplicação.
  • Se você selecionar o os testes que você quer executar no arquivo django_app/tests.py o comando executará apenas esses testes.
  • O comando tem um suporte básico para usuários do virtualenv. Para que o comando use o virtualenv é necessário estruturar os seus diretórios da seguinte maneira: virtualenv_root/django_project/django_app. Isso é necessário para que o comando encontre o interpretador virtualenv_root/bin/python.

2
dez

Treinamento Python e Django

Atualização Importante:

No dia 11 de junho a Triveos Tecnologia iniciou a pré-venda da versão online do curso “Desenvolvimento Web com Python e Django“. O curso completo será composto por quatro módulos e o primeiro já está disponível para quem adquirir o curso agora.

A promoção de pré-venda dá 20% de desconto e o curso sai por R$ 200,00 (ou em 12x R$19,00 no cartão). Os cursos estão hospedados na plataforma Ludeos e os pagamentos podem ser feitos com débito em conta, cartão de crédito ou boleto bancário através do PagSeguro.

A Triveos está lançando o seu treinamento de Desenvolvimento Web Ágil com Python e Django e por isso pega carona nesse conceituado blog (que por coincidência é um dos sócios da Triveos) para anunciar este lançamento.

Imagem ilustrativa do treinamento com a apostila e o texto 'Aprenda Python e Django em apenas 5 dias'

Eu não costumo fazer esse tipo de post (jabá) por aqui mas este é um caso especial por dois motivos: o produto anunciado foi criado pela minha empresa (como eu já havia dito); e porque que até o momento são poucas as empresas que ministram esse curso no Brasil.

Esse treinamento é o primeiro entre muitos que planejamos desenvolver no próximo ano sempre com algumas características:

  • treinamentos in-company — isso nos dá mobilidade e permite que o treinamento seja ministrado em qualquer lugar do Brasil e não somente no eixo Rio-São Paulo.
  • treinamentos de curta duração — achamos que tecnologias precisam ser simples e que se elas forem realmente simples não seria necessário investir meses num treinamento. O treinamento de Python e Django precisa de 5 dias apenas para ser ministrado com grande tranquilidade para pessoas que já desenvolvem em alguma linguagem OO.
  • treinamentos personalizáveis — a linha principal do treinamento é mantida mas algumas modificações podem ser feitas para adequar o treinamento aos requisitos das empresas. Exemplos: dedicar um tempo do treinamento à implantação do Django, apresentar alguma biblioteca Javascript para desenvolvimento de RIAs, ministrar só o módulo Django, etc.
  • materiais de qualidade — nada de apostilas contendo só slides impressos. Disponibilização de todo o material usado em aula (Slides, repositório de códigos, etc).
  • instrutores qualificados — não posso falar muito mais sobre isso. Sou um dos instrutores :D

Quem tiver interesse no treinamento pode entrar em contato com a gente através do site ou diretamente comigo.

Update: Pessoal, não tinha ficado claro mas, a Triveos só trabalha com treinamentos in-company, ou seja, não temos infra-estrutura para ministrar esse treinamento em nossa empresa. Fazemos isso dentro da sua empresa (ou da empresa onde você trabalha). De qualquer maneira estamos avaliando um modo de atender às demandas que estão surgindo.