GustavoHenrique.net

  • About
  • Contact
  • RSS Feed
  • Twitter

 

05
Feb

Participe do Flex for Kids

By gustavohenrique|Sem categoria|2 Comments

flexforkids

“O Flex for Kids é uma maratona de palestras on-line que será realizado no dia 06/02/2010 e contará com grandes nomes da comunidade Adobe Flex brasileira.
Serão 10 palestras on-line ao vivo durante o dia inteiro, usando um ambiente de eventos multimídia onde os palestrantes ministrarão seus temas através de recursos de áudio, vídeo, slides e chat.
Qualquer pessoa, empresa ou faculdade poderá participar do Flex for Kids, para isto basta fazer uma doação de um valor simbólico de R$ 30,00 para ter acesso as 10 palestras on-line e suas gravações que serão disponibilizadas 15 dias após o evento.
Todo dinheiro arrecadado será doado ao Cotolengo de Mato Grosso do Sul. Para conhecer a Cotolengo clique aqui.”

Obviamente eu já me inscrevi! E você?

03
Feb

Django usando Pisa para converter HTML para PDF

By gustavohenrique|Django, python|2 Comments

Torre de Pisa

Pisa é um conversor de HTML/XHTML/CSS para PDF, escrito em Python e baseado nas bibliotecas Reportlab, PyPDF, TechGame Networks CSS e HTML5lib. Seu foco principal não é gerar páginas perfeitas para impressão, mas utilizar HTML e CSS para gerar PDFs dentro de aplicações.
A instalação pode ser feita através do código no site do projeto ou pelo comando easy_install pisa.

Crie um arquivo chamado report.py dentro do diretório do projeto contendo o código abaixo:

# -*- coding: utf-8 -*-
from django import http
from django.template.loader import get_template
from django.template import Context
import ho.pisa as pisa
import cStringIO as StringIO
import cgi, os
 
 
def fetch_resources(uri, rel):
    path = '/path/para/diretorio/contendo/imagens/a/serem/exibidas'
    return path
 
def write_to_pdf(template_src, context_dict, filename):
    template = get_template(template_src)
    context = Context(context_dict)
    html  = template.render(context)
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result, link_callback=fetch_resources)
    if not pdf.err:
        response = http.HttpResponse(mimetype='application/pdf')
        response['Content-Disposition'] = 'attachment; filename=%s.pdf' % filename
        response.write(result.getvalue())
        return response
    return http.HttpResponse('Problema ao gerar PDF: %s' % cgi.escape(html))

E agora, dentro de uma view, é preciso importar o arquivo report.py e chamar a função write_to_pdf para fazer a conversão:

# views.py
from report import write_to_pdf
 
def listar_clientes_cadastrados(request):
    clientes = Cliente.objects.all()
    return write_to_pdf('relatorio.html', {'clientes': clientes}, 'nome_do_arquivo_pdf')

A função write_to_pdf recebe como parâmetro o nome do arquivo HTML que será convertido, as variáveis que serão tratadas dentro desse arquivo e o nome que o arquivo PDF sem a extensão. Retorna o download do arquivo PDF.

Conforme citado no início do post, a conversão não é perfeita. Por exemplo, às vezes uma tabela apresenta mínimas deformações, não fica igual como na versão HTML. Apesar disso Pisa é uma ótima solução que muitas vezes ajuda bastante e, como puderam ver, é muito fácil de usar.

29
Jan

Acessando BD Firebird através do KinterbasDB no Python

By gustavohenrique|python|Be the first to comment!

firebird-icon

KinterbasDB é uma biblioteca open source para Python que possibilita acessar banco de dados Firebird e algumas versões do Interbase.
O download pode ser feito na página do projeto.

Após o download, descompacte o pacote kinterbasdb-3.2.src.tar.gz.
Abra um terminal, entre no diretório onde o kinterbasdb foi descompactado e execute o comando python setup.py build. O script de instalação, setup.py, automaticamente vai detectar as informações necessárias pelo compilador C.
Se não ocorreu nenhum erro, execute o comando python setup.py install para instalar no diretório padrão de módulos do Python (varia de acordo com a distro).

root@localhost: ~# wget http://downloads.sourceforge.net/project/kinterbasdb/kinterbasdb/kinterbasdb-3.2/kinterbasdb-3.2.src.tar.gz?use_mirror=ufpr
root@localhost: ~# tar zxvf kinterbasdb-3.2.src.tar.gz
root@localhost: ~# python setup.py build
Succeeded:
  /usr/bin/python setup.py build
root@localhost: ~# python setup.py install

Para testar se foi instalado corretamente:

root@localhost: ~# python -c "import kinterbasdb as k; print k.__version__"
(3, 2, 0, 'final', 0)
root@localhost: ~#

É possível que apareça uma mensagem de erro em distros baseadas no Ubuntu:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
kinterbasdb.OperationalError: (-901, 'begin transaction: \n  invalid parameter in transaction parameter block')

Para corrigir esse problema é preciso usar uma outra versão do arquivo __init__.py.
Faça o download em https://firebird.svn.sourceforge.net/svnroot/firebird/qa/trunk/kinterbasdb/__init__.py e substitua o arquivo existente no diretório kinterbasdb.

root@localhost: ~# wget https://firebird.svn.sourceforge.net/svnroot/firebird/qa/trunk/kinterbasdb/__init__.py
root@localhost: ~# mv __init__.py /usr/lib/python2.5/site-packages/kinterbasdb/

Exemplo para Firebird-2.1 em servidor Windows:

import kinterbasdb
conn = kinterbasdb.connect(
    host='192.168.0.2',
    database='C:\\Dados\\meubanco.fdb',
    user='sysdba',
    password='masterkey'
)
cur = conn.cursor()
cur.execute('SELECT id, nome, telefone FROM tabela')
for (id, nome, telefone) in cur:
    print 'ID: %s, Nome: %s, Fone: %s' % (id, nome, telefone)
26
Jan

Formulários dinâmicos no Django

By gustavohenrique|Django|1 Comment

FormFill

Um formulário dinâmico é aquele que o usuário pode definir quais campos vão existir. O programador não precisa criar código para cada formulário.
Imagine um sistema que necessite de diversos tipos de formulários. Tarefa no mínimo entediante para o responsável pela manutenção. E se o usuário puder criar e modificar um formulário por uma interface gráfica fácil de usar? Seria muito bom para o programador!
O segredo desse dinamismo é o uso de metaclasses, que são classes cujas instâncias também são classes.
O truque é criar em tempo de execução uma metaclasse da classe forms.Form. Atributos dos campos como label, tipo, max length etc, podem ficar armazenados no banco de dados. Os valores dos campos podem ficar em outra tabela com uma referência de chave estrangeira. Usando o ORM do Django é muito simples, e de quebra já ganha uma interface gráfica para administrar tudo (admin).
Sendo assim, o usuário poderia montar os campos do formulário definindo um label, tipo de campo, se é obrigatório ou não, valor padrão… e essas informações ficarão no armazenadas no BD. Fica fácil criar um código para pegar essas informações, criar uma nova classe Form em tempo de execução, instância-la e renderizar no template.

Exemplo:

# views.py
 
from django.views.generic.simple import direct_to_template
from django.forms import forms, fields
 
def montar_formulario_dinamico(request):
    campos_dinamicos = {
        'nome': fields.CharField(max_length=100, required=True, label='Nome', initial='Gustavo'),
        'idade': fields.IntegerField(label='Idade', min_value=0),
        'email': fields.EmailField(max_length=200, required=False, label='E-mail')
    }
 
    FormDinamico = type('', (forms.Form,), campos_dinamicos)
    form = FormDinamico()
 
    return direct_to_template(request, 'formulario.html', extra_context={'formulario': form})

Fica a dica!

18
Jan

Servidor Linux com Proxy e Controle de Banda – Parte 3

By gustavohenrique|Django, Linux|4 Comments

firewall
Finalmente consegui escrever a última parte do artigo. :D
Nas partes 1 e 2 mostrei como configurar um servidor Linux para firewall e controle de banda, usando scripts que fazem a leitura de um arquivo texto contendo as informações dos pontos de rede (IP, MAC, velocidade de download e upload…). Entretanto, acessar o servidor e ficar editando um arquivo texto, na minha opinião é muito chato, possui risco de falha humana e apenas quem tem acesso ao servidor pode fazer isso. Para resolver esse contratempo foi desenvolvido o Bandcontrol, um pequeno sistema web que armazena os dados dos pontos de rede em um banco de dados e gera o arquivo texto usado pelos shell scripts.
O sistema foi desenvolvido em Django, personalizando o Admin. Vou mostrar apenas como instalar e usar. O código fonte está disponível para consulta de programadores, curiosos e simpatizantes.
(more…)

← 1 2 3 4 5 6 … 9 →

Tags

admin Django extjs firewall grails jquery KingHost liberações Linux manual model modelform mod_wsgi moeda brasileira mudanças mysql nível de serviço oo PagSeguro pdf php PIL pisa problemas proxy python qa qos real relacionamento roteamento service desk shell script sites tdd tipsforlinux traducao ubicomp ubuntu urllib virtualhost Webservices wikipedia xsol __init__

Recent Posts

  • Configurando um servidor LDAP no CentOS 6.2
  • Introdução ao padrão MVC no Ext JS 4
  • Virtualização com KVM
  • Autenticação Facebook no Grails
  • Grails com Sqlite3 no Ubuntu 11.04
  • Deploy no tomcat usando django-jython
  • Deploy múltiplas versões do Django no Nginx com VirtualEnv
  • Comandos básicos do Git
  • Introdução ao Apache Wicket
  • Feliz 2011

Archives

Categories

My tweets

  • @tregismoreira Genesis 7200 com android 4 3 days ago
  • @marcomaciel blz! 1 week ago
  • @marcomaciel hack com qualquer linguagem em qualquer plataforma pra mim ta valendo! #soudev 1 week ago
  • Fui instalar o android 2.3 da lg e agora meu celular não liga. #ffuuu 1 week ago
  • Tentando gerar uma NFe e não consigo =/ #stacktrace Impressionante como todos os sites e apps do governo são ruins. 2 weeks ago
  • More updates...

Powered by the inLine Minimal WordPress Theme