Autenticando o seu usuário Django pelo Facebook

Essa semana tive que fazer uma integração com a API de autenticação do Facebook e fiz uma pesquisazinha. Dei de cara com esse post que fazia uma comparação entre quatro ferramentas. Assim como o post, fiquei entre o django-allauth e o django-social-auth. Testei somente o segundo e ele coube como uma luva para o que eu necessitava – autenticar com o Facebook e manter a autenticação padrão do Django ativa.

Como não achei nada na internet que fosse resumido e focado para a autenticação com o Facebook utilizando essa app, resolvi fazer esse post para compartilhar a experiência. Então vou fazer um passo-a-passo aqui do que tive que fazer para completar a integração (que foi bem simples, diga-se de passagem).

Passo 1: READ THE DOCS!

Mesmo sendo algo simples e utilizando uma app para fazer a autenticação, você ainda tem a obrigação de ler a documentação do que trata a autenticação com o Facebook. Não adianta nada usar uma lib sem saber o que ela resolve por baixo dos panos. Aconselho a ler, pelo menos, a página que fala do fluxo da autenticação e da lista de permissões adicionais.

Passo 2: Configurar o seu projeto com o django-social-auth

Essa parte é muito simples. Tudo que você precisa fazer é instalar a app e configurá-la. Para instalar a app e as suas dependências, basta executar:

pip install django-social-auth

Depois disso, só precisamos configurar o settings.py e o urls.py da seguinte maneira:

Passo 3: Colocar o link no template

A configuração acima é tudo que você precisava para uma autenticação básica. Aconselho fortemente a ler o código da app para entender o que ela faz com os modelos por baixo dos panos. Agora é só colocar a url correta no template com a linha abaixo e correr para o abraço:

<a href=”{% url socialauth_begin ‘facebook’ %}”>Login com o Facebook</a>

Level Bônus: Recuperando dados extras do usuário

Como eu falei, o processo acima lida com uma autenticação básica. Mas, como fazer se precisarmos de mais dados do usuário como, por exemplo, sua cidade ou o seu aniversário? Se você leu a documentação do Facebook, vai ver que é só adicionar alguns valores na querystring da sua requisição de autenticação. (Aqui vale um parênteses: o Facebook não manda o email do usuário no pacote de dados básicos)

O django-social-auth viabiliza isso através de uma variável no settings e com o uso da sua estrutura de pipeline. O seu pipeline é composto por funções que são executadas no final do processo de autenticação e o mesmo é extensível. Portanto, você pode escrever sua função para fazer algo específico – no nosso caso salvar o aniversário e a cidade natal do usuário – e colocá-la no pipeline de funções executáveis. Para isso precisaríamos apenas adicionar algo parecido com isso ao nosso projeto:

Conclusão

Achei a app bem bacana e fácil de usar e configurar. Achei ela bem pensada e versátil (existe autenticação com 1000 redes sociais e afins). O único ponto que não gostei muito foi a maneira com que ela lida com falhas. A maioria da exceções são capturadas e não são tratadas ou geram notificações para os admins. Apenas mostram na tela uma mensagem falando que algo de errado aconteceu.

Para quem quer utilizá-la, digo que vale muito a pena dar uma navegada pelo seu código para ficar mais familiarizado com a app e ver se ela realmente tem o potencial necessário para atender as suas necessidades.

Até a próxima!

Um Slider Com Lazyload Utilizando jQuery

Atualmente tenho trabalho em um portfólio de um escritório de arquitetura que é bem puxado para o frontend por conta das variadas maneiras de interação com o conteúdo. No post de hoje, quero compartilhar com vocês um snippet de Javascript que utilizei para construir um slider que carrega suas imagens uma a uma.

Para deixarmos claro, slider são aquelas interações que já estamos acostumados a ver e que fazem transições percorrendo imagem por imagem em uma lista de imagens a serem apresentadas. O carregamento das imagens preguiçoso, conhecido como lazyload, é uma técnica em que as imagens só são carregadas quando o usuário deseja vê-las. Isso é útil para tornar a página mais leve diminuindo o número de requisições iniciais que o browser precisa fazer para renderizar a página.

O script que junta essas duas ideias foi resultado de uma adaptação de um código que faz de um slider simples junto ao conceito desse plugin e do código do Pedro Menezes para fazer lazyload de imagens utilizando a jQuery. Além disso, ainda faço um controle de exibição dos botões que fazem a interação de próxima e anterior com o slider. Então, o resultado desse trabalho foi esse – vale dizer que não sou grande conhecedor de Javascript e jQuery:



Para ver um exemplo bem simples do funcionamento do script, você pode acessar esse link do JsFiddle e clicar no botão “Run” na parte superior esquerda. Não conhecia  essa ferramenta e achei muito legal para validar pequenas lógicas com Javascript e jQuery. Valeu Morada!

Estou começando a me interessar mais sobre desenvolvimento em frontend e, principalmente, por jQuery e Javascript.  Portanto, espero que tenhamos novos  posts sobre o assunto em breve. Até a próxima, para nossa alegria!

O que mais curti do Django 1.4

Como muitos já sabem, na sexta-feira passada foi feita a release da versão 1.4 do Django. Essa versão traz vários ajustes que visam tornar o framework ainda mais leve e fácil para o desenvolvimento web. Incentivado por esse post do Adam McKerlie, resolvi falar das novas features que eu mais curti.

Facilidade com testes de aceitação

O Django 1.4 adiciona uma classe chamada LiveServerTestCase que tem o intuito de simular a aplicação e a suas integrações, com o banco por exemplo, para que se possa fazer testes de aceitação. Ela facilita a combinação com outras ferramentas comumente utilizadas nesse tipo de teste como o Selenium, por exemplo. Acho bom esse tipo de feature ser fornecida pelo framework porque torna mais fácil e convidativo a escrita de testes durante o processo de desenvolvimento.

Método prefetch_related

Essa parece uma alteração simples, mas de todas foi a que eu mais gostei. Antes já existia o select_releated que possibilitava queries únicas para recuperar um objeto e seus relacionamentos de chave estrangeira. Entretanto, quando tínhamos um relacionamento de muitos para muitos, por exemplo, isso não era possível. Esse método resolve essa questão e acaba por resolver um grande problema de performance quando esse tipo de relacionamento entre tabelas do banco tinha que ser trabalhado no Django.

Improvements do admin

Já precisei personalizar o admin além do que o framework fornece e não rolou. Curiosamente foi para fazer exatamente algo que a nova opção list_filter. Além disso, foram adicionados métodos que tornaram o ModelAdmin ainda mais poderoso e fácil de customizar como o get_list_display_links e o save_related.

Assignment tag

Essa tag é a única feature que, confesso, nunca tive necessidade real de utilizar. Mas me pareceu tão óbvio e fácil que teve que entrar nessa lista. Ela é bem interessante, mas fiquei um pouco de orelha em pé… Digo isso porque ela te dá um poder legalzinho e ela aumenta bem a possibilidade de fazer com que lógica da aplicação vaze para o template. Mas, é aquela coisa: grandes poderes, grandes responsabilidades.

 

Esses quatro pontos foram os que mais me chamaram a atenção por, com exceção do último, terem sido problemas que eu já enfrentei de alguma maneira. Vale dizer que ainda existem outras features bem bacanas como novos métodos para manipular o banco de dados ou o novo form wizard.

Sobre as minor features, segue uma listinha das que eu também curti mais:

Participem da discussão colocando os pontos que vocês mais gostaram dessa nova release nos comentários! Até a próxima!

Como colocar um experimento no ar em menos de 2 dias

Durante o final de semana o Luciano Ratamero começou a aprender Django e ficou impressionado com o framework. Ele queria aprender mais e então resolvemos implementarmos, juntos e do zero, um pequeno projetinho que concebemos na sexta anterior.

A ideia foi o “Uma História Por Dia”, uma aplicação com que os usuários interajem construindo uma história criando frases associadas a imagens da web. Simples assim. O site foi concebido depois de uma conversa com o Miguel Nóbrega sobre interação randômica em alguns sites aliado a algumas aplicações de bots do Rafael Polo que pega um pouco dessa dinâmica também.

O mais interessante foi conseguir fazer todo o planejamento do projeto, desenvolvimento, layout e deploy em menos de 2 dias de trabalho. Confesso que conseguimos isso porque utilizamos algumas ferramentas e técnicas que viablizaram esse ciclo de desenvolvimento. E é sobre elas que vou falar agora.

Bom planning

O primeiro passo que garantiu um desenvolvimento rápido foi um planejamento bem elaborado. Focamos em qual era o MVP e criamos tópicos com tarefas bem definidas que refletiam os passos que deveriam ser implementados para que aquele tópico pudesse declarado como pronto. Percebemos que esse momento nos deu vários alertas prévias de problemas que enfrentamos depois. Assim, com os alertas, as soluções puderam ser pensadas com calma.

Dev Power up

No desenvolvimento tivemos o gitflow e o Django como fiés aliados. O primeiro nos permitiu utilizar um workflow do git bem estruturado e rápido. Isso parece bobo, mas você se sente muito mais leve para desenvolver sem ter que ficar com medo de lidar com merges a cada pull ou push.

Já o Django nos ajudou com dois pontos. Os testes podem ser considerados o primeiro, já que o Luciano nunca tinha desenvolvido com TDD. Não é necessário dizer que ele ficou impressionado em como desenvolver dessa maneira economiza
tempo de debug mais a frente, entre outros benefícios. Além dos testes, fizemos uso extensivo das class-based generic views do Django. Todas as views ficaram muito simples e de fácil e rápida customização. Isso nos permitiu experimentar muito mais por não termos a barreira de lidar com muito código para criar algo.

Para agilizar o layout, tarefa que nos tomou mais tempo, utilizamos o já famoso Bootstrap do Twitter. Pegamos ele como base e adicionamos novos estilos para deixar a página de um jeito que achamos mais bonito. Mas, a parte de containers e grid foram uma mão na roda!

Decolagem rápida

Por último, para o deploy, utilizamos o Heroku que já disponibilizou suporte Python faz um tempinho. Foi quase inacreditável preparar a máquina e colocar a aplicação no ar em menos de 30 minutos e com nem uma dúzia de comandos. Muito simples mesmo.

A avaliação final da experiência é que criar algo pequeno, validar uma ideia ou desenvolver um MVP hoje em dia é muito simples e rápido. Tentarei reproduzir ao máximo algumas das decisões que tomamos para projetos futuros, principalmente
em relação as class-based views.

E para não terminar sem um jabá, participe do “Uma História Por Dia”. Porque quem conta um conto, aumenta um ponto!

PS.: Agradecimentos à minha namorada, Paula Paiva, que deu várias ideias e dicas para estruturarmos a interface e interação do sistema.

Update >>> O projeto é aberto e qualquer pessoa pode contribuir com o código que está nesse repositório do Gtihub.

Pontos que mais utilizo com o Vim

Para quem não sabe, o Vi é um antigo editor de texto mas que é vastamente utilizado até hoje por conta dos seus super poderes e customização. Comecei a utilizá-lo o Vim (Vi Improved) quando trabalhei na Myfreecomm graças a ajuda do Flávio Amieiro. Hoje em dia sou um defensor do editor e faço propagandas dele quando dá.

Faz um tempo e alguns amigos meus me pediram dicas sobre o Vim e ajuda para começar a utilizar e aprender a manipular melhor o editor. Para isso, eu sempre passava o endereço do meu repositório com meus arquivos de configuração e explicava o que eu utilizava. Como já me cansei de fazer isso, resolvi fazer esse post para mostrar o que eu uso com mais frequência quando estou trabalhando com o Vim.

1 – NerdTree Plugin

Esse eu acredito que seja um must-have do Vim. Basicamente você ganha o poder de visualizar a árvore de arquivos a partir do diretório que você está. Isso é bom porque você pode fazer busca de arquivos, navegar por diretórios e abrir arquivos de maneira mais rápida. Você pode instalá-lo seguindo essas instruções. A única coisa de diferente que fiz foi mudar o mapeamento da exibição da árvore.

2 – Code Fold

Eu me confundo muito quando tem muito código em um arquivo e eu só preciso trabalhar em uma parte dele. Para resolver esse problema utilizo uma função que faz esconde o código respeitando a sua identação. Acredito que essa seja a função que eu mais utilize do meu vimrc. Para utilizá-la, é só copiar essa parte de código para o seu vimrc e utilizar espaço quando fora do modo de edição.

3 – Tab completion

Existem ferramentas mais eficientes para fazer o tab completion de linguagens, mas eu gosto da função que utilizo exatamente por ela não ser guiada por nenhuma linguagem de programação. Basicamente ele utiliza o que já foi escrito no próprio arquivo para fazer avaliações de possíveis complementos, ou seja, ele assume que o que você vai utilizar, provavelmente já foi escrito. Acho essa abordagem bem interessante porque limita bastante o número de possibilidades e
evita listas gigantescas de alternativas. O código para essa função está aqui.

4 – Closetag

Esse é um script simples que faz um map para fechar tags HTML automaticamente. Assim, depois de criar o conteúdo de uma tag, apenas faço um CONTROL + _ e essa tag está fechada. Parece bobo, mas é uma mão na roda! Para utilizar é só colocar essas linhas no seu vimrc e copiar esse arquivo para o diretório .vim/scripts/.

5 – Ipython Debugger instantâneo

O último item da lista é a função Python que fiz como experimento para inserir e remover breakpoints para fazer debug de código Python. Já fiz um post falando sobre essas funções, então se quiserem saber como utilizar é só olhar lá.

Esses são os 5 pontos que mais utilizo. Ainda existem outras coisas, mas esses são os que utilizo praticamente todo dia que abro o Vim para trabalhar. Como bonus vale dar uma olhada nos mapeamentos de teclado para de navegação e manuseio de mais de uma janela que utilizo dentro do Vim.

Se você está começando, também aconselho o post Aprenda Vim Progressivamente que é original do Yann Esposito, mas que o Tarsis Azevedo fez uma ótima tradução.

Compartilhe nos comentários os seus plugins e maneiras de utilizar o Vim que eu não compartilhei nesse texto para iniciarmos uma rica discussão! Até a próxima!

←Older