Rails Envy Podcast - Episode #050: 10/08/2008
Rails Envy - Wednesday, October 08, 2008 @ 10:34 PMEpisode 050. We've officially been doing the Rails Envy Podcast for a year now. Thanks everyone!
The Rails Envy podcast is brought to you this week by NewRelic. NewRelic provides RPM which is a plugin for rails that allows you to monitor and quickly diagnose problems with your Rails application in real time. Check them out at NewRelic.com.
Call Us! You can reach the podcast voicemail line at 407 409-8440.
Subscribe via iTunes - iTunes only link.
Download the podcast ~16:00 mins MP3.
Subscribe to feed via RSS by copying the link to your RSS Reader
- Thin 1.0 « Marc-Andr?? Cournoyer’s blog
- tog
- pivotal's desert at master — GitHub
- :: GIANT ROBOTS SMASHING INTO OTHER GIANT ROBOTS :: shoulda 2.0
- play/type blog. Workling Version 0.3 Released
- Shoulda Testing Cheat Sheet | Kyle Banker
- Codeword: Studios -> Introducing WeatherMan, a Ruby Gem.
- Named_scope backport
- Scotland on Rails
- Load Testing With Log Replay - igvita.com
- Katz Got Your Tongue? » Merb Master Process
- The Merbist » Blog Archive » Get on Merb Edge pre 1.0
- TextMate reigns supreme with ‘Ack in Project’ | eval(code)
- metautonomo.us » Blog Archive » Easy Role-Based Authorization in Rails
- Ruby Tools Roundup - The Devver Blog
- default_value_for Rails plugin: declaratively define default values for ActiveRecord models « Phusion Corporate Blog
- Rails XLS Revived
- Scotland on Rails
- » BaseApp: a quick start for your Rails App Ariejan.net
- Top 5 uses for Capistrano
- The Pragmatic Bookshelf | Rails Development for the Facebook Platform
- :: GIANT ROBOTS SMASHING INTO OTHER GIANT ROBOTS :: Custom Tags in Liquid
- Fair Answers » Blog Archive » My Month-A-Page Calendar
- Dan Manges's Blog - Testing Fragment Caching
Lastly, we are actively looking for podcast sponsors for the next few weeks, so if you'd like for us to talk about your products or services on the podcast email Gregg at RailsEnvy for additional information.
Rails Envy Podcast - Episode #050: 10/08/2008
Rails Envy - Wednesday, October 08, 2008 @ 10:34 PMEpisode 050. We've officially been doing the Rails Envy Podcast for a year now. Thanks everyone!
The Rails Envy podcast is brought to you this week by NewRelic. NewRelic provides RPM which is a plugin for rails that allows you to monitor and quickly diagnose problems with your Rails application in real time. Check them out at NewRelic.com.
Call Us! You can reach the podcast voicemail line at 407 409-8440.
Subscribe via iTunes - iTunes only link.
Download the podcast ~16:00 mins MP3.
Subscribe to feed via RSS by copying the link to your RSS Reader
- Thin 1.0 « Marc-André Cournoyer’s blog
- tog
- pivotal's desert at master — GitHub
- :: GIANT ROBOTS SMASHING INTO OTHER GIANT ROBOTS :: shoulda 2.0
- play/type blog. Workling Version 0.3 Released
- Shoulda Testing Cheat Sheet | Kyle Banker
- Codeword: Studios -> Introducing WeatherMan, a Ruby Gem.
- Named_scope backport
- Scotland on Rails
- Load Testing With Log Replay - igvita.com
- Katz Got Your Tongue? » Merb Master Process
- The Merbist » Blog Archive » Get on Merb Edge pre 1.0
- TextMate reigns supreme with ‘Ack in Project’ | eval(code)
- metautonomo.us » Blog Archive » Easy Role-Based Authorization in Rails
- Ruby Tools Roundup - The Devver Blog
- default_value_for Rails plugin: declaratively define default values for ActiveRecord models « Phusion Corporate Blog
- Rails XLS Revived
- Scotland on Rails
- » BaseApp: a quick start for your Rails App Ariejan.net
- Top 5 uses for Capistrano
- The Pragmatic Bookshelf | Rails Development for the Facebook Platform
- :: GIANT ROBOTS SMASHING INTO OTHER GIANT ROBOTS :: Custom Tags in Liquid
- Fair Answers » Blog Archive » My Month-A-Page Calendar
- Dan Manges's Blog - Testing Fragment Caching
deontology: Ethical theory ...
Project.ioni.st - Wednesday, October 08, 2008 @ 10:27 AMSad Guys On Trading Floors
Project.ioni.st - Wednesday, October 08, 2008 @ 10:27 AMBy default, Mail Goggles is...
Project.ioni.st - Wednesday, October 08, 2008 @ 10:27 AM“ By default, Mail Goggles is only active late night on the weekend as that is the time you’re most likely to need it. ”
Mail Goggles
Marinho Brandão: Django-plus: para que serve?
Django Community - Wednesday, October 08, 2008 @ 02:00 AMO django-plus foi uma biblioteca criada com o propósito de oferecer alguns recursos - criados por mim ou não, os códigos contidos nele que não são meus, recebem as devidas indicações ao autor - úteis que não faziam parte do core do Django.
Porque isso? Porque o Django possui uma política de coesão que evita que ele vire um cara gordão cheio de coisas, mas que existem coisas que realmente ajudam bastante em certas tarefas, mas que não justificam a criação de uma aplicação plugável.
Para adicionar a django-plus a seu projeto, você precisa fazer o download em [2] ou ainda em [6] e adicionar ao projeto como uma aplicação qualquer.
Seguem abaixo os recursos da django-plus.
JSONField
Tipo de campo que armazena listas ou dicionários em formato JSON bastante interessante. Foi criado pleo usuário deadwisdom que o colocou no Django Snippets [1].
Exemplo de uso
from djangoplus.fieldtypes import JSONField
class Produto(models.Model):
nome = models.CharField(max_length=50)
lista = JSONField(blank=True)
este campo aceitará listas, dicionários e outros valores serializáveis.
SectionedForm
Baseando num snippet que criei [3], trata-se de uma classe de form que permite dividir o form em fieldsets (da mesma forma que você pode fazer no Admin, por exemplo.
Exemplo de uso
from djangoplus.forms import SectionedForm
class FormProduto(SectionedForm, forms.ModelForm):
class Meta:
model = Produto
fields = ('nome', 'referecia', 'categorias', 'lista',)
fieldsets = (
(None, ('nome','referencia',)),
(_('Outras Informacoes'), ('categorias','lista',)),
)
quando o form for utilizando no template, em forma forma convencional, ele será divido em duas seções, uma sem título e outra chamada "Outras Informacoes". A divisão será feita por um elemento H3, mas você pode customizar isso adicionando o atributo "fieldset_template", exemplo
class FormProduto(SectionedForm, forms.ModelForm):
class Meta:
model = Produto
fields = ('nome', 'referecia', 'categorias', 'lista',)
fieldset_template = '<h2 id="section_%(section)s">%(title)s</h2>'
usando o id gerado por ele (veja o HTML gerado para saber qual), você pode exibir ou ocultar uma seção usando JavaScript.
para mim tem sido muito útil, pois é realmente chato ter formulários longos sem nenhuma divisão ou ter que informar campo por campo por causa delas.
Proteção anti-robôs para e-mails, URLs e outras informações
Baseado no snippet que criei em [4].
Sabe aquela coisa que alguns sites fazem para proteger um e-mail contra spam? exemplo "mari...@gmail.com".
Pois é, essa proteção é para isso. Na verdade eu precisa de uma proteção que valesse para todo tipo de informações, então ao invés de fazer o mesmo com o e-mail (adicionar as reticencias), ele exibe uma frase do tipo "informação confidencial, clique aqui para se certificar de que não é um robô". Aí ele vai para uma página com capcha e tudo resolvido.
Como usar
Adicione o middleware 'djangoplus.middleware.ProtectAntiRobotsMiddleware'
No template onde deseja ocultar uma informação, acrescente
{% load djangoplus_tags %} {% protectantirobots %} <a href="mailto: {{ office.email }}">{{ office.email }}</a> {% endprotectantirobots %}
FakeSessionCookieMiddleware
Criado por Dan Fairs e disponível em [5] este middleware aceita que seja informada a sessão através de um parâmetro na URL. É bastante útil para a criação de integração com Flesh, Ajax, Google Gadgets, Facebook F8, etc.
Para usá-lo, acrescente-o como middleware ao seu projeto 'djangoplus.middleware.FakeSessionCookieMiddleware'
render_to_json
Como o nome indica, funciona de forma semelhante à shortcut render_to_response, mas se destina a responder em formato JSON.
Exemplo de uso
from django.utils import simplejson
from djangoplus.shortcuts import render_to_json
def json_view(request):
ret = {'nome': 'Tarsila', 'idade': 2}
return render_to_json(simplejson.dumps(ret))
render_to_mail
Da mesma forma que a supracitade, renderiza, só que enviando um e-mail. É ainda mais útil para se enviar e-mails do tipo HTML.
Como usar
Se deseja usar formato texto plano, declare a setting
DEFAULT_EMAIL_CONTENT_SUBTYPE = 'plain'Para enviar um e-mail a partir de uma template, use um código como este
from djangoplus.shortcuts import render_to_mail return render_to_mail( 'central/usuarios/mensagem.html', locals(), subject='Titulo da mensagem', recipient_list=['marinho@marinhobrandao.com'], )
DynamicTemplate
Trata-se de um template dinâmico, que é manipulado através do Admin e pode ser acrescentado a um outro template através da template {% dynamic_template %}.
É um recurso poderoso, que pode ser utilizado em grupos, quando todos os templates de um grupo em comum são adicionados em lote.
Como usar
Vá até seu Admin, procure a seção "Djangoplus" e clique na opção "Dynamic templates" e adicione seu template dinâmico;
Em seu template, adicione uma template tag assim
{% load djangoplus_tags %} {% dynamic_template slug-do-template %} {% dynamic_template group grupo-do-template %}
Template filters
E por falar em template tags, o django-plus possui muitos template filters, úteis ou não para o seu caso
{{ numero|multiple_of:3 }} - retorna True se "numero" é multiplo de "3"
{{ valor|in_list:lista }} - retorna True se "valor" está contido em "lista"
{{ valor|is_equal:outro_valor }} - retorna True se "valor" é igual a "outro_valor"
{{ valor|is_not_equal:outro_valor }} - retorna True se "valor" não é igual a "outro_valor"
{{ valor|is_lt:outro_valor }} - retorna True se "valor" é menor que "outro_valor"
{{ valor|is_lte:outro_valor }} - retorna True se "valor" é menor ou igual a "outro_valor"
{{ valor|is_gt:outro_valor }} - retorna True se "valor" é maior que "outro_valor"
{{ valor|is_gte:outro_valor }} - retorna True se "valor" é maior ou igual a "outro_valor"
{{ numero|is_day_of:data }} - retorna True se "numero" é o dia de uma "data"
{{ numero|is_month_of:data }} - retorna True se "numero" é o mês de uma "data"
{{ numero|is_year_of:data }} - retorna True se "numero" é o ano de uma "data"
{{ numero|is_hour_of:data }} - retorna True se "numero" é a hora de uma "data"
{{ numero|is_minute_of:data }} - retorna True se "numero" é o minuto de uma "data"
{{ numero|is_second_of:data }} - retorna True se "numero" é o segundo de uma "data"
{{ data|dec_year:numero }} - decrementa "numero" de anos de uma "data"
{{ data|dec_month:numero }} - decrementa "numero" de meses de uma "data"
{{ data|inc_year:numero }} - incrementa "numero" de anos de uma "data"
{{ data|inc_month:numero }} - incrementa "numero" de meses de uma "data"
{{ lista|list_as_text }} - faz exatamente o mesmo que a template filter join faz hoje (na época da criação ela não existia)
{{ lista|list_as_text:atributo }} - faz o mesmo que acima, porém é baseado no atributo informado
{{ lista|list_as_links:atributo }} - faz o mesmo que a template filter list_as_text, entretanto, monta um link para cada uma delas
{{ variavel|startswith:outro_valor }} - retorna True se a string contida em "variavel" inicia com a contida em "outro_valor"
{{ variavel|endswith:outro_valor }} - retorna True se a string contida em "variavel" termina com a contida em "outro_valor"
{{ queryset|order_by:"campo1,campo2" }} - efetua a ordenação de uma queryset
Bom, há ainda alguns widgets, generic views, utilidades para Google Maps API e e o mais importante Model Info (para objeto e para listagem), que equivale ao ModelForm, porém exibe somente as informações para visualização. Entretanto, por hoje vamos ficar por aqui, logo eu publico a segunda parte :)
- http://www.djangosnippets.org/snippets/377/
- http://code.google.com/p/django-plus/source/checkout
- http://www.djangosnippets.org/snippets/798/
- http://www.djangosnippets.org/snippets/742/
- http://www.stereoplex.com/two-voices/cookieless-django-sessions-and-authentication-without-cookies
- http://django-plus.googlecode.com/files/django-plus-1.0-stable.tar.gz