Chronosbox

Django

Vim confs prontas para trabalhar com Python e Django

by Felipe 'chronos' Prenholato on 06:59, under Dicas, Django, Linux, VIM - Vi IMproveded, python

Este fim de semana eu reescrevi meu .vimrc e gastei um tempo extra para fazer
as coisas funcionarem melhores para mim com python e django :) . Eu acabei
fazendo um belo trabalho e agora estou codando com muito mais eficiência.

Os resultados são:

  • Um .vimrc muito bem comentado e com muitas customizações.
  • Suporte para python omnicomplete.
  • Adição dos paths python e django automáticos ao ambiente do vim.
  • Adição da DJANGO_SETTINGS_MODULE automaticamente ao ambiente do vim, para completar seu próprio código.
  • Suporte do SnipMate para código django e django templates.
  • Django templates com suporte para highlighting das tags e uso do ‘%’ com o plugin matchit.
  • Python folding e suporte a python jumping.
  • O tema acinzentado wombat com algumas customizações minhas.
  • Um gerenciador de sessões para o Vim para facilitar sua vida em manter o ambiente de trabalho.

Aqui estão os arquivos para download:

Se você preferir, este é o endereço no github: http://github.com/chronossc/my-vim-confs

O pacote não poderia ter sido criado sem alguns plugins e artigos, segue a referência:

Adicionalmente (thx Handrus), eu sugiro para quem escreve muito HTML, dar uma olhada no SparkUp vim and textmate plugin ;) . Eu não testei, mas pareceu muito bom.

Muito obrigado a quem ler, a todos que escreveram os plugins, ao pessoal do canal #vim na freenode e a ótima documentação do vim!
Agora bora codar com o vim ;)

** Atualizado
2010-03-07: Eu criei novamente o tar porque eu removi algumas mensagens de debug, então faça o download novamente se você já fez ;) .
2010-03-09: Eu criei novamente o tar, fiz alguns fixes e adicionei no github.

Leave a Comment :, , , , , , , , , , , , , , more...

Configurando múltiplos ambientes Python

by Felipe 'chronos' Prenholato on 00:20, under Dicas, Django, Gentoo, python

Múltiplos ambientes python

Trabalhar com várias versões de ambientes python tem se tornado algo comum em minha vida, e acredito que um meio fácil de ’setar’ estes ambientes seja algo útil e não tão simples para a maioria das pessoas.

Eu criei um simples bash script que seta este ‘ambiente’, trata-se de uma função que você cria no seu .bash_profile. Executa-se ela com a versão do python em seguida e pronto, seu ambiente esta configurado. Vamos ver no código como eu fiz, o script está com comentários em inglês:

export ORIGINALPATH=$PATH
loadpyenv(){
    # $PV is our control variable, get from $1, first argument on shell
    # anything that you need to put here and depend for python version ${PV} is your var ;)
    export PV=$1
    echo -e "\n:: Setting environ to use python $PV"
 
    # Put here various aliases that you can use
    # put a python alias
    alias python="python${PV}"
    # m and runserver a kick alias for Django common actions
    alias m="python${PV} manage.py"
    alias runserver="python${PV} manage.py runserver :8000"
    # easy and fast install of python packages, in right path with localpyinstall
    alias localpyinstall="python${PV} setup.py install --prefix=~/.py/${PV}/"
    echo -e "\n:: New aliases"
    # print aliases :)
    alias python m runserver localpyinstall
 
    echo -e "\n:: New PATH"
    # setup aplications path, be careful about not use $ORIGINALPATH.
    #
    # I use a path structure like that:
    # ~/.py/
    # |-- 2.4
    # |-- 2.5
    # `-- 2.6
    export PATH="${HOME}/.py/${PV}/bin/:${ORIGINALPATH}"
    echo $PATH
    echo -e "\n:: New PYTHON PATH"
    # setup new python path, don't need to add system wide path, just our custom paths
    export PYTHONPATH="${HOME}/.py/${PV}/lib/python${PV}/site-packages/"
    # print more some info
    python$PV -c "import sys;print sys.path"
    echo -e "\n:: Django version & file"
    python$PV -c "import django;print 'version %s ... file %s' % (django.get_version(),django.__file__);"
}

Agora crie uma estrutura de diretórios com o comando:

$ mkdir -pv ~/.py/{2.4,2.5,2.6}

E cada vez que for usar uma versão diferente do python, carregue com:

$ loadpyenv VERSÃO

Onde VERSÃO é a versão escolhida do python.

Várias versões do Python no Gentoo

O Gentoo Linux, minha distro do dia a dia, me dá um bom bonus quanto a múltiplas versões do python, configure no /etc/make.conf a seguinte linha:

USE_PYTHON="2.4 2.5 2.6"

Instale os pythons nas versões escolhidas e execute o seguinte comando para re-compilar seus pacotes:

emerge $(eix -I dev-python/* | grep "\[I\]" | cut -d' ' -f2)

O eix é uma aplicação de indexação do portage, muito comum nas máquinas Gentoo.

Cada pacote python é recompilado para as 3 versões (no caso), mas tive problemas em compilar alguns pacotes para a 2.4, fiquem avisados :)

Bom, é isso, até mais!

1 Comment :, , , , , , , , , , more...

Manipulando erros Http 403 (permissão negada) no Django

by Felipe 'chronos' Prenholato on 17:35, under Apps e extensões, Django

Olá pessoal :) . Recentemente, precisei usar o módulo Auth do Django e suas permissões. É bastante interessante como você pode definir permissões por módulo e usar nas views, templates, etc.

Nosso código de hoje vem da necessidade de trabalhar facilmente com permissões negadas, onde o Django fornece apenas um HttpResponseForbidden, o que não é exatamente interessante de manipular, pois o ideal seria algo como a manipulação de erros 404.

Com essa necessidade desenvolvi um Middleware que intercepta exceções Http403 (vem junto com o pacote), e retorna uma das seguintes opções, na ordem de prioridade:

  1. Uma view customizada, configurada usando handler403 no seu urls.py
  2. Renderiza o template 403.html
  3. Renderiza um template Hardcoded

Para usar o Middleware, siga os procedimentos:

  1. Baixe o projeto no fim deste post, vamos usa-lo de exemplo, ele se chama http403project.
  2. Descompacte e copie o arquivo http.py para algum lugar do seu projeto, no http403project ele fica na raiz.
  3. Adicione o middleware ao settings.py:
    MIDDLEWARE_CLASSES = (
          # ...
          'http403project.http.Http403Middleware',
    )
  4. De raise na view, ex:
    from http import Http403
    def Http403View(request):
      raise Http403(u"This is custom message for permission denied.")
  5. Configure sua view customizada ou template se desejar. Seu template deve ter o nome de 403.html, sua view recebe os argumentos request e exception, o argumento exception contem a mensagem enviada pelo usuário :) . No projeto exemplo ele está renderizando o template 403.html, mas existe uma view de exemplo bastante simples no arquivo urls.py

Projeto: http403project.tgz

Ok, é isto, super simples, por hoje é só :) , divirtam-se!

Leave a Comment :, , , , , , more...

Pensamento rápido – “ilike” SQL

by Handrus Nogueira on 12:18, under Dicas, Django, Multi Database, MySQL

Hoje vi um post num dos blogs que acompanho, onde um camarada disse ter conseguido 1000% de melhora na performance de uma aplicação trocando um:

SELECT * FROM TABLE WHERE fieldname ILIKE 'abc%';

Para

SELECT * FROM TABLE WHERE lower(fieldname) LIKE 'abc%';

(diferença de ilike para lower… like)
Eu achei tosco (hehehe), óbviamente que esse ganho absurdo só pode ter ocorrido numa massa gigantesca de dados e provavelmente num campo sem índice.
Mas a minha dica é outra:
Além do ganho em performance o “ilike” não é suportado no mysql e sqlite.Portanto seu uso é extremamente desaconselhável, principalmente se você estiver trabalhando com Django, Rails ou qualquer aplicação que forneça um layer multi-db.
Claro que nos frameworks citados acima o único jeito de fazer isso é forçar o uso de “ilike”, suas ORMs conseguem lidar com situações assim muito bem.

Conclusão
Evite “ilike” em queries de sql, use o “lower()… like” ou “upper… like”; E se lembre de mudar sua variável para upper/lower!

1 Comment more...

Escritório Portátil do Desenvolvedor Web

by Handrus Nogueira on 22:26, under Dicas, Django, Editores

Seguindo as “febres” de artigos que só listam coisas úteis aqui vai minha lista de softwares portables e com licença free (alguns freeware, outros open-source) para você levar na pen-drive ou disco externo e ser capaz de lidar com qualquer situação desde que tenha um windows à mão. O foco são desenvolvedores PHP e PyWeb.

1 – Browsers

Firefox 3.5, chrome, opera, avant browser.  – Não faz sentido IE se você já está num windows certo? E ainda que você precise de outras versões lembre-se que estou falando de licenças free. A microsoft ainda não liberou nenhuma versão portable.

2 – Editores/IDEs

Aptana – apenas escolha zip file na opção ” download type”, Zend, Notepad++,

Gvim
Separei o Gvim por causa de alguns plugins.
Rails, PHP, CSS, CSS Color Preview, javascript, SQL, MySQL Runner e para os que gostam do estilo IDE, tentem o Proj
No caso do Gvim, considere ver o post do wombat modificado.
Também vem vindo aí um post meu sobre vim/gvim… fiquem de olho!

3 – Editores de Imagem

Gimp, Incscape, PickPick (screenshot e color picker).

4 – Escritório / Comunicação

Open-Office, Pidgin, aMsn, Thunderbird e lightning para thunderbird para os calendários e to-do.FoxitReader para abrir pdfs

5 – FTP / SSH

WinScp, FileZilla, Putty

6 – Utilitários

7-zip, FreeFileSync,Font Matcher, WinMerge, InfraRecorder, Wink

7 – Servidores Web

PHP: Xampp,USB Web Server

– UPDATE: pra mim nenhum dos dois servidores para Django funcionaram, se você teve sucesso, poste uma mensagem contando como ;)

Django: IntantDjango, DjangoStack

1 Comment more...

Django apps (coleção) – parte 1

by Felipe 'chronos' Prenholato on 03:14, under Apps e extensões, Django

Eu estou trabalhando atualmente com Python e Django, a linguagem e o framework
são excelentes e como pretendo desenvolver um projeto bastante interessante
com ele estou listando aqui alguns dos apps que achei bastante interessante
em uma rápida pesquisa no Django Plugables e outros lugares.

Estou dividindo o artigo em duas partes e postarei uma por semana, coloquem
suas sugestões nos comentaŕios :D .

(continue reading…)

Leave a Comment :, , , , , , , , , , , , , , , , , more...

StatPress

Visits today: 13 Visits since 6 de abril de 2009: 7655 Visitors now: %visitoronline%