InFog

Um blog sobre GNU, Linux, Open Source, Desenvolvimento e Nerdices em Geral

Django: Usando o Session para exibir mensagens (Dica rápida)

Tags: , ,

Olá pessoal!

Aqui vai uma dica rápida para quem está se aventurando no Django.

O problema era exibir uma mensagem após a inclusão de alguns dados no banco. Após a inclusão dos dados foi utilizado o método HttpResponseRedirect e o problema dele é não poder passar informações adicionais, como uma mensagem que será exibida para o usuário. Foi aí que eu resolvi usar o recurso do Session.

Na view que define a mensagem faça algo assim:

1
request.session['mensagem'] = 'Dados incluídos!'

Na view que será exibida após a inclusão dos dados (ou qualquer outra página que você queira) será necessário verificar a mensagem:

1
2
3
4
5
6
7
mensagem = False
if request.session.has_key('mensagem'):
    mensagem = request.session['mensagem']
    del request.session['mensagem']
return render_to_response('pagina.html', {
    'mensagem': mensagem,
    })

Primeiro eu defini a variável mensagem com um valor False (No template dá para entender melhor por que eu fiz isso). Se a Session tiver a chave ‘mensagem’ então ela é atribuída à variável mensagem e depois é removida com usando o ‘del’.

E o template fica assim:

1
2
3
{% if mensagem %}
    {{ mensagem }}
{% endif %}

E a dica foi essa.

Ah, este vídeo sobre Django é bem legal. É uma palestra um pouco antiga e algumas coisas já mudaram no Django, mesmo assim vale a pena.

InFog

3 Comentários

O editor de textos Geany!

Tags: , ,

Olá pessoal!

Hoje vou fazer um pequeno post sobre um editor de textos muito interessante que “conheci” depois de muito ouvir falar e de tanta gente nos comentários das aulas de Python dizendo que o editor era muito legal. O editor em questão é o Geany e, para algumas linguagens, como c/c++, ele pode ser considerado uma IDE.

Para instalar o Geany em distribuições baseadas no Debian, como o Ubuntu basta um:

# aptitude install geany

Bem, o editor vem com muitas opções, mas muitas opções mesmo! Algumas são velhas conhecidas do Gedit e do Kate, como as opções de definir se a identação é feita com espaços ou tabs e padrão de codificação de arquivos.

Mas eu gostei mesmo foi do recurso de “projetos”. Ele funciona de forma parecida com as sessões do Kate, mas eu achei bem interessante por que ele separa os arquivos na barra lateral por diretório. Vejam um exemplo:

geany2

Para mim apenas este recurso já valeu a pena, mas na aba “simbolos” tem mais, vejam a foto abaixo:

geany

Nesta foto eu estou com o fonte do GeSpeak aberto.

O reconhecimento da codificação dos arquivos é bem melhor do que no Kate, nada de ver um monte de simbolos “?” por que você escolheu errado a codificação do arquivo, e isso é ótimo para quem tem uns códigos em UTF-8 e ISO-8859-1 espalhados pela máquina =)

Achei meio chatinho o fato de não ter opção para mudar o esquema de cores original dele, neste quesito Gedit e Kate ganharam. Como eu não gostei muito das cores originais eu mudei para as cores do projeto Geany Dark Scheme. Se você também quiser utilizar as cores “dark” basta baixar o pacote no site do projeto e extrai-lo em /usr/share/geany/ (O problema é que isso acaba sobrepondo as cores originais).

O Geany também completou os nomes de funções e classes presentes em outros arquivos abertos no mesmo projeto, ponto pra ele!

Ele também tem opções para pesquisar em todos os arquivos abertos, inserir pedaços de código e cabeçalhos de arquivos, para isso basta configurar as opções de “quem é o desenvolvedor”.

Enfim, se você não conhece o Geany eu sugiro que faça um teste de alguns minutos, ele pode até não se tornar o seu editor principal, mas será uma opção interessante.

InFog

7 Comentários

Curso de Python – Aula 19 – PyGTK e sua documentação

Tags: , ,

Olá pessoal!

Aqui vamos nós para mais uma aula de Python!

Mas antes disso eu gostaria de lembra-los que a vaquinha para nos ajudar na viagem de lua de mel ainda está rolando! Já tivemos algumas contribuições e eu agradeço muito aos que ajudaram, mas infelizmente ainda estamos longe até mesmo de 10% do valor =( Se você quiser ajudar também basta clicar na simpática vaquinha abaixo e doar.

Vakinha Lua de Mel em Buenos Aires

Dado o recado vamos à aula!

Hoje veremos um pouco mais sobre os conectores e também vamos aprender a encontrar respostas na documentação do PyGTK.

É através dos conectores que nós conseguimos ligar as ações do usuário na interface às funções do programa. Na aula 16, nosso primeiro contato com PyGTK, já existe uma demonstração de um conector ligando o evento “clique” de um botão à função “ola_mundo“.

Primeiro precisamos saber que não existe apenas o sinal ‘clicked’, alguns widgets do PyGTK apresentam outros tipos de sinais, então nossa missão é descobrir que sinais são esses. Mas como faremos isso? Simples, basta ter alguns conhecimentos que você já deve possuir: Leitura e Navegação na Web heheh. Na página de referência do PyGTK você encontra a documentação de todos os componentes desta API.

Pois bem, vamos fazer o seguinte exemplo: Uma janela com um rótulo e um botão, quando o mouse passar sobre o botão o rótulo deve dizer “O mouse está sobre o botão!” e quando deixa-lo a mensagem muda para “O mouse saiu de cima do botão!”. Aqui está um modelo para a janela:

aula_19_1

Janelinha bonitinha, não? Fiz no Inkscape =)

Bem, agora que já temos o modelo precisamos escrever o código para esta janela:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python
# -*- coding=utf-8 -*-
import pygtk
import gtk
class CJanela():
    __doc__ = """
        Classe CJanela, desenha uma janela com um label e um botão em uma
        caixa vertical.
    """

    def __init__(self):
        self.janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.janela.set_title("Aula 19, Sinais")
        self.rotulo = gtk.Label()
        self.botao = gtk.Button("Passe o mouse")
        self.caixa = gtk.VBox()
        self.caixa.pack_start(self.rotulo)
        self.caixa.pack_start(self.botao)
        self.janela.add(self.caixa)
        self.janela.show_all()
janela = CJanela()
gtk.main()

Vejam que desta vez estou usando uma metodologia diferente, fiz uma classe CJanela que é a responsável por exibir a janela e seu conteúdo. Acredite em mim esta metodologia facilita muito o acesso aos widgets.

Ora, ora, já temos a janela com o rótulo e o botão, agora nos resta programar as ações e “mouse sobre” e “mouse sai”. Então vamos recorrer à documentação do PyGTK, como vamos usar os sinais do botão então é a documentação deste que devemos ver.

Vejam na área “gtk.Button Signal Prototypes“, este widget nos oferece seis sinais: activate, clicked, enter, leave, pressed e released. Para o que queremos fazer os sinais ‘enter’ e ‘leave’ serão suficientes. Reparem que na referência diz que o sinal ‘clicked’ é praticamente o único que uma aplicação precisa, mas não aqui nas aulas do InFog heheh.

Então vamos criar as funções ‘mouse_sobre’ e ‘mouse_saiu’, elas serão as responsáveis por alterar o texto do rótulo, e usaremos os conectores para ligar os sinais do botão à estas funções, vejam o código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env python
# -*- coding=utf-8 -*-
import pygtk
import gtk
class CJanela():
    __doc__ = """
        Classe CJanela, desenha uma janela com um label e um botão em uma
        caixa vertical.
    """

    def __init__(self):
        self.janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.janela.set_title("Aula 19, Sinais")
        self.rotulo = gtk.Label()
        self.botao = gtk.Button("Passe o mouse")
        self.botao.connect('enter', self.mouse_sobre)
        self.botao.connect('leave', self.mouse_saiu)
        self.caixa = gtk.VBox()
        self.caixa.pack_start(self.rotulo)
        self.caixa.pack_start(self.botao)
        self.janela.add(self.caixa)
        self.janela.show_all()
    def mouse_sobre(self, widget):
        self.rotulo.set_text("O mouse está sobre o botão!")
    def mouse_saiu(self, widget):
        self.rotulo.set_text("O mouse saiu de cima do botão!")
janela = CJanela()
gtk.main()

Vejam o resultado:

captura_de_tela-aula-19-sinais

captura_de_tela-aula-19-sinais-1

Bem simples né? O legal do PyGTK é que na maioria das vezes, para aplicações mais simples, a sua preocupação será com o negócio e não com o PyGTK com em sí, já que sua manipulação não é algo tão complexo.

E essa foi a nossa aula de hoje, espero que tenham gostado e aprendido bastante.

Lição de Casa!

Rá! Pensou que ia ficar só nisso né? Agora é a hora de botar a cachola para funcionar! A lição de hoje é simples, quero que vocês façam uma janela com um rótulo e quatro botões: “maximizar“, “desfazer maximização“, “tela cheia” e “desfazer tela cheia“. Quando clicados os botões devem fazer as devidas ações e o rótulo deve mostrar o status da janela, exemplo: “Janela Maximizada“, “Janela em Tela Cheia“, etc. Boa sorte! E não se esqueça de contribuir com a nossa Vakinha!

15 Comentários

© 2009 InFog. All Rights Reserved.

This blog is powered by Wordpress and Magatheme by Bryan Helmig.