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.