Mas como fazer isso, sendo que o html será um campo RichText (django-ckeditor) com quantos links o usuário desejar?
O ckeditor gera no banco de dados, um campo do tipo Text e grava o conteúdo inserido em HTML. Para extrairmos os links, basta utilizarmos a mágica da expressão regular.
A estrutura ficou assim:
- MalaDireta: Uma classe que contém o conteúdo html a ser enviado
- Links: Uma classe que amarzenará os links gerados pela classe anterior
def save(self): self.link_set.all().delete() for u in re.findall(r'href=[\'"]?([^\'" >]+)', self.html): L = Link( maladireta = self, link = u, ) L.save() self.corpo = self.corpo.replace(u, "%s/verify_url/%s" % (settings.SITE_URL,L.id)) super(MalaDireta, self).save()
Desta forma, sempre que for alterada, a mala direta irá excluir todos os links vinculádos a ela, e inserir os novos links presentes no corpo.
Depois é só fazer uma view mapeada para a url inserida no replace acima, para contabilizar a visita, e fazer o redirect para o link original.
- A expressão regular acima, foi testada e consegue recuperar as urls com os seguintes padrões: http://www.sua_url.com http://
- www.sua_url.com.br http://
- www.sua_url.com#sua_ancora http://
- www.sua_url.com?seu_parametro=seu_valor
- http:// www.sua_url.com?seu_parametro=seu_valor#sua_ancora
- https://www.sua_url.com?seu_parametro=seu_valor#sua_ancora
- https://www.sua_url.com?seu_parametro1=seu_valor1&seu_parametro2=seu_valor2#sua_ancora
- https://www.sua_url.com/sua_pasta/?seu_parametro1=seu_valor1&seu_parametro2=seu_valor2#sua_ancora
Nenhum comentário:
Postar um comentário