Django Utilidades :: Marinho Brandaohttp://marinhobrandao.com/pt-brTue, 06 Jan 2009 06:20:48 -0000Novo sistema de comentárioshttp://marinhobrandao.com/blog/p/novo-sistema-de-comentarios/Olá, eu me relutei para não publicar o novo sistema de comentários antes de ficar completo, mas fui vencido pela empolgação e aí está ele: sem sistema de respostas e com dois bugzinhos leves visuais.<br><br>Também não funciona (ainda) no Internet Explorer.<br><br>Basicamente é um <span style="font-weight: bold;">sistema de comentários geográfico</span>: você seleciona uma área da página que está carregada e digita o que bem entender, ele vai salvar seu comentário e dados pessoais para aquela area selecionada e pronto, todo mundo passa a ver.<br><br>Bacana né? Pois é, mas vai melhorar: vou dar opção de destacar o texto, colocar em negrito, salvar seus dados em um cookie, etc... tudo coisinha simples, mas tenho uma prioridade máxima nessas férias: <span style="font-weight: bold;">as férias</span>!<br><br>Outra notícia, mas desagradável, é que dei uma pequena bobeira e perdi os vínculos da maioria dos artigos com suas tags, ou seja, vou ter que repassar um a um fazendo esse vínculo, e isso deve ficar pronto em 1 ou 2 dias.<br><br>É isso aí! Bom proveito com o novo sistema de comentários.<br><br><span style="font-weight: bold;">PS: prometo colocar os comentários antigos no ar logo logo.</span>Django Ajaxhttp://marinhobrandao.com/blog/p/django-ajax/O <span style="font-weight: bold;">Django</span>&nbsp;é realmente fantástico. Com algumas linhas de código eu criei uma funcionalidade que pode ajudar em muito quem está fazendo seus primeiros testes com Django + Ajax. este é o arquivo com o controlador: <pre>from django.core import serializers from django.http import HttpResponse, Http404 from django.core.exceptions import PermissionDenied from django.db.models.query import QuerySet from django.db import models import operator def generic_search(request, app_label, model_name, word): model = models.get_model(app_label, model_name) if model is None: raise Http404, "App %r, model %r, not found" % (app_label, model_name) if not request.user.has_perm(app_label + '.' + model._meta.get_change_permission()): raise PermissionDenied if not model.Ajax or not model.Ajax.search_fields: raise Http404, "App %r, model %r, Ajax class not found" % (app_label, model_name)</pre> if model.Ajax.search_limit: limit = model.Ajax.search_limit else: limit = 10 or_queries = [models.Q(**{'%s__istartswith' % field_name: word}) for field_name in model.Ajax.search_fields] data = serializers.serialize("xml", model.objects.filter(reduce(operator.or_, or_queries))[:limit]) return HttpResponse(data, mimetype="text/xml")Este é um arquivo de visão. Ele recebe os parametros: aplicação, modelo e palavra-chave e retorna uma coleção de objetos serialiada para XML (isso pode ser facilmente mudado para JSON) este é o arquivo de urls: <pre>urlpatterns = patterns('', # observando que esta linha deve vir antes da linha de "admin" caso ela seja utilizada por ele (r'^admin/([^/]+)/([^/]+)/search/([^/]*)/$', 'aCom.ajaxsearch.generic_search'), (r'^admin/', include('django.contrib.admin.urls')), )</pre> Verifique que esta url é apenas uma sugestão para quem está utilizando o contrib admin como base da aplicação. Caso não o utilize, você pode remover a palavra "admin" da url e substituir conforme sua necessidade. este é o arquivo de uma classe de modelo: <pre>class ClassificacaoCliente(models.Model): descricao = models.CharField(maxlength=50) class Admin: pass class Ajax: search_fields = ['descricao'] search_limit = 10</pre> note que a classe Ajax dentro da classe de modelo aponta o campo e o limite para a busca em Ajax.