Mais algumas coisas sobre Django que tenho gostado


Olá! Estou em uma jornada engraçada agora, onde estou tentando aprender como fazer sites no estilo 2010, onde tenho um banco de dados SQL e renderizo algum HTML no backend.

É uma jornada interessante porque não parece necessariamente “fácil” para mim fazer sites desta forma: nunca aprendi como fazer isso nos anos 2000 ou 2010, e há muito que preciso aprender.

Então, aqui estão alguns recursos do Django que fazem com que a construção desse tipo de site pareça mais viável do que quando eu estava tentando e não consegui usar a biblioteca padrão do Go ou o Flask. E falarei sobre alguns problemas que encontrei com o Django.

por que aprender a fazer sites como em 2010?

Anteriormente, o kit de ferramentas com o qual me sentia confiante para criar sites era:

  • geradores de sites estáticos (como neste blog)
  • sites estáticos que fazem coisas divertidas com Javascript (como este playground sql)
  • aplicativos simples de página única Vue.js com Lambda como back-end ou back-end Go (como mexer com DNS)

Eu realmente gostei dessa abordagem pesada de frontend para esses aplicativos super simples, mas quando comecei a pensar em fazer algo com muitas páginas diferentes (em vez de literalmente apenas uma página), não fiquei tão animado com as opções que vi que envolviam muito código de frontend. Então pensei em tentar o back-end.

Escrever um site focado em back-end que use o mínimo de JS possível parece o mesmo para mim, da mesma forma que escrever um site JS de página única que faça o mínimo possível de back-end, mesmo que possam parecer opostos. Em ambos os casos, estou apenas tentando manter o máximo possível de lógica em um só lugar.

Agora, algumas reflexões sobre Django!

Estou gostando dos construtores de consultas

Aprendi que posso definir uma classe de “conjunto de consultas” no Django com vários métodos com diferentes WHERE declarações que talvez eu queira usar ao construir uma consulta:

Veja como eu o uso em meu código de visualização depois de definir o que todos os métodos significam:

Events.objects.approved()
  .for_tab(tab)
  .with_festivals(tab_params.festival_slugs)
  .is_free(tab_params.free)
  .is_outdoors(tab_params.outdoors)

e aqui está como eu defino os métodos:

class EventQuerySet(SearchableQuerySetMixin, models.QuerySet):
    def approved(self):
        return self.filter(approved_at__isnull=False)

    def future(self):
        today = timezone.localdate()
        return self.filter(end__gt=self._midnight(today))

    def with_tags(self, tags):
        if tags:
            return self.filter(tags__name__in=tags).distinct()
        return self

A sintaxe para definir os filtros não é minha favorita, mas passo a maior parte do tempo apenas usando os métodos, e parece super legível e agradável de usar, e isso me faz querer procurar outras bibliotecas de construtores de consultas no futuro. No passado eu pensava “Eu conheço SQL, quem precisa de um construtor de consultas?”, mas esse tipo de estrutura torna a leitura muito agradável.

Encontrei um exemplo de alguém que escreveu seu próprio pequeno construtor de consultas em Python que quero ler mais tarde para pensar se gostaria de usar uma versão mais minimalista dele.

os filtros de modelo são incríveis

Existem vários filtros de qualidade de vida disponíveis nos modelos do Django que são muito úteis para gerar HTML. Os que usei até agora são:

  • traduzir URLs de texto simples em links ou quebras de linha em
    ({{ event.description|urlize|linebreaksbr }} )
  • formatação de datas ({{ row.date|date:"M j" }})
  • json_scriptque pega um dicionário Python e o converte automaticamente em JSON e o insere no HTML como um

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Botão Voltar ao Topo