sexta-feira, 11 de janeiro de 2013

Django simple captcha no Ubuntu 12.10

Nenhum comentário:
Hoje eu estava desenvolvendo um projeto em Django que precisa de Captcha no cadastro de usuários. Já tenho familiaridade com o Simple Captcha, e resolvi usar novamente.

Esta aplicação Django tem uso bastante simples, mas eu não conseguia fazer a exibição das imagens corretamente. Eu usei a ferramenta virtualenv para montar meu ambiente de desenvolvimento, e as bibliotecas estavam instaladas lá via pip. A biblioteca PIL é uma dependência de Simple Captcha, justamente por permitir a criação de imagens por código. No meu formulário, ficou assim:

captcha = CaptchaField( label = 'Repita os caracteres a seguir')


Mas a exibição do formulário continha apenas o texto alternativo. O comando manage.py runserver mostrava um código 500 para a URL das imagens do captcha. Acessando a imagem da URL em si, pude verificar o seguinte erro:

The _imagingft C module is not installed

Um erro que já tinha me deparado antes, mas nunca registrei a solução. Essencialmente, a instalação via pip compila a bilioteca PIL, e o uso do Simple Captcha requer o suporte a Freetype2 no momento da compilação para poder gerar as imagens corretamente. Para corrigir isso no Ubuntu 12.10, basta colocar as referências certas antes da compilação:

# ln -s /usr/lib/`uname -i`-linux-gnu/libfreetype.so /usr/lib/
# ln -s /usr/lib/`uname -i`-linux-gnu/libjpeg.so /usr/lib/
# ln -s /usr/lib/`uname -i`-linux-gnu/libz.so /usr/lib/

Depois, basta instalar a biblioteca PIL:

pip install pil

A mensagem final da compilação deverá mostrar algo como

    --------------------------------------------------------------------
    PIL 1.1.7 SETUP SUMMARY
    --------------------------------------------------------------------
    version       1.1.7
    platform      linux2 2.7.3 (default, Sep 26 2012, 21:51:14)
                  [GCC 4.7.2]
    --------------------------------------------------------------------
    *** TKINTER support not available
    --- JPEG support available
    --- ZLIB (PNG/ZIP) support available
    --- FREETYPE2 support available
    *** LITTLECMS support not available
    --------------------------------------------------------------------

E deverá funcionar! Encontrei a solução neste link.