
Vamos ajudar os desenvolvedores a descobrir se a estrutura do Django é adequada para o próximo projeto. É provável - adequado.
Não se apegue a uma linguagem ou estrutura de programação específica apenas porque você a usou no projeto anterior ou simplesmente porque está familiarizada com ela. Então as coisas não estão feitas.
Antes de iniciar um novo projeto, você deve avaliar qual idioma ou estrutura é melhor para alcançar o resultado desejado. O que é mais importante para você? Segurança, velocidade de desenvolvimento, escalabilidade, versatilidade, suporte?
É melhor tomar uma decisão informada antes de começar o trabalho do que arrepender-se às pressas mais tarde (ou, pior, pendurar muletas no projeto no processo de implementação - devido ao fato de você não se importar com o apoio prévio).
Eu trabalhei com várias tecnologias por muitos anos, lidei com o desenvolvimento móvel e da web, e acredito que o Django oferece um conjunto tão completo de recursos que não são encontrados em nenhuma outra estrutura da web.
Entendo que esta é uma afirmação alta. Deixe-me justificar.
“O Django tem muitos sites que são usados mais ativamente, em particular o Instagram e o Pinterest. Até o Facebook usa o Django para muitos de seus utilitários. O Django nasceu em um ambiente de publicação, portanto, não é de surpreender que essa estrutura seja usada em sites como The Washington Post e Smithsonian Magazine. ” - Amit Ashvini , vice-presidente de marketing da Zibtek
Visão geral: quando usar o Django
Se pelo menos alguns dos pontos abaixo são sobre você (e não há pontos na lista com os quais você não concorda totalmente), o Django provavelmente será um bom ajuste para o seu projeto.
- Você precisa desenvolver um aplicativo Web ou API de back-end.
- Você precisa trabalhar rapidamente, implantar rapidamente e fazer alterações no projeto enquanto trabalha.
- Por padrão, o aplicativo deve ser protegido contra as vulnerabilidades e ataques mais comuns, em particular: CSRF, injeção de SQL, XSS, clickjacking etc.
- A qualquer momento, a escala pode ser necessária no aplicativo: aumentando e diminuindo.
- No futuro, você planeja integrar as mais recentes tecnologias, por exemplo, aprendizado de máquina.
- Você precisa usar uma estrutura confiável que esteja sendo desenvolvida ativamente, usada por muitas empresas importantes e sites líderes em todo o mundo.
- É necessário que o aplicativo da Web e o lado do servidor da API estejam na mesma base de código, consistente com a "fonte única de verdade" (princípio DRY)
- Você não deseja trabalhar diretamente com consultas ao banco de dados e precisa de suporte ao ORM.
- Você vai usar software livre.
- Se você ficar preso, precisará procurar uma solução por conta própria, portanto precisará de boa documentação e de uma comunidade de desenvolvedores responsiva.
Além dos fatores acima, você precisa considerar quais habilidades você (ou sua equipe) possui.
Se você é um desenvolvedor web e já sabe como a web funciona, trabalhar com o Django funcionará para você de maneira relativamente suave. Você precisa entender como o Django está estruturado, e algumas outras coisas, é claro, também - e considerar que você está pronto.
Sites em execução na estrutura do Django
A história do Django remonta cerca de 10 anos. Durante esse período, foi usado na produção em muitos sites importantes. Aqui estão alguns exemplos excelentes:
Engenharia do PinterestMozillaBitbucketUdemyA cebolaDisqusWashington PostNASASpotifyEngenharia do InstagramNational geographicO guardiãoJsfiddleVocê ainda está em dúvida se vale a pena gastar seu precioso tempo para praticar com o Django? Para começar, vamos discutir por que o Django NÃO pode se adequar ao seu projeto:
Quando não usar o Django
- Você está lidando com um aplicativo colossal e ele simplesmente não se encaixa em uma base de código. Talvez seja melhor dividir seu aplicativo em microsserviços. Cada um de seus níveis é mais bem tratado por uma equipe dedicada. Para cada caso de uso específico, outras tecnologias são adequadas. Em alguns desses cenários, o Django pode ser útil, mas seria impraticável desenvolver completamente esse aplicativo no Django (assim como em qualquer outra estrutura separada).
- Você precisa escrever um aplicativo simples no qual não precise trabalhar com um banco de dados, executar operações de arquivo ou fazer algo pelo menos um pouco complicado.
Os microframes são mais adequados para essas situações. Um dos microframes mais populares - o Flask, como o Django, está escrito em Python. Microframes semelhantes estão disponíveis em outras tecnologias, por exemplo. Slim em PHP, Apache Spark em Java, Express.js em Node.js, etc. - Você quer escrever tudo do zero e sabe o que está fazendo.
- Você ou seus colegas não estão familiarizados com o Django / Python e não têm tempo e recursos para desenvolver as habilidades necessárias.
A melhor solução neste último caso é trabalhar com o que você sabe melhor. Se você adotar uma nova tecnologia ou estrutura, as chances de estragar aumentam muitas vezes.
Se todas as opções acima não são sobre o seu projeto, é provável que o Django atenda a você.
Razões para usar o Django
A estrutura do Django é escrita em Python:
Eu sei que você sabe disso.
Portanto, aproveitarei esta oportunidade e enfatizarei algumas das principais vantagens do Django que ele herdou do Python. Eu serei breve.
Python é uma das linguagens de programação mais populares e de crescimento mais rápido do mundo.
Fontes:
Índice TIOBEAnálise de dados de Indeed.com Jobs por Coding DojoGithub octoverseAprender Python é realmente muito simples. Geralmente, os desenvolvedores modernos são os primeiros a aprender esse idioma específico.
O exposto acima não significa que esse idioma seja apenas para iniciantes. Python também é usado em tecnologia de ponta. O Python é usado ativamente na pilha tecnológica de muitas empresas gigantes, incluindo o Google.
O Python é ótimo para o desenvolvimento de ferramentas de raspagem da web.
Interage bem com outros idiomas.
O desenvolvimento do Python não significa que você será forçado a escrever tudo apenas em Python.
Você pode usar bibliotecas para muitas outras linguagens, incluindo C / C ++ / Java.
Python é portátil, fácil de ler.
O Python pode até rodar na JVM. Conheça o
Jython .
O Python é amplamente usado em tecnologias populares como Big Data e Machine Learning.
Você obtém acesso à enorme biblioteca PyPI.
Tudo incluído do Django
"Tudo incluído" significa que o Django está pronto para uso com a maioria das bibliotecas e ferramentas necessárias em situações práticas comuns. Vou listar: Django ORM, middleware, autenticação, bibliotecas HTTP, suporte a vários sites, i18n, Django Admin, mecanismo de modelo, etc. - e isso não é tudo. Nenhuma outra estrutura conhecida por mim fornece um suporte tão amplo de uma só vez.
Alguns consideram isso um "menos", enquanto outros consideram um "mais". Cada lado da lei é diferente à sua maneira e, em certa medida, concordo com ambas.
Isso é um sinal de menos, porque nessa situação a estrutura se transforma em um monólito.
Acredito que se você precisar desses recursos que levam à formação de um monólito, de uma forma ou de outra você terá que usar outra biblioteca (ou escrever você mesmo).
Por que, então, não usar uma ferramenta na qual tudo isso já está lá, testado em batalhas, opera nos maiores sites, é desenvolvido ativamente e recebe apoio da comunidade?
Se você não precisa da maioria dos recursos oferecidos pelo Django, é melhor ficar com algumas microframework.
Não reinvente a roda - você se lembra? Gaste seu tempo com o que é realmente importante e deixe o Django fazer o resto.
Django admin
Embora mencionei esse elemento na seção anterior, ele merece mais atenção. Em muitas estruturas, em particular no Laravel, Yii etc., foram feitas tentativas para simplificar o trabalho com o painel de administração. Consegui desenvolver muitos projetos em diferentes estruturas, mas nenhum deles pode ser comparado ao Django para facilitar o trabalho com o painel de administração.
Alguns acreditam que o Django Admin não é flexível o suficiente e, para ajustar qualquer parte dele às suas necessidades, você precisa fazer um grande esforço. No começo, trabalhando com o Django, eu estava inclinado a concordar com isso, mas com o tempo, depois de descobrir o quadro, fiquei convencido disso. Sim, existe uma curva de aprendizado própria, mas nem um segundo que você dedica a ela não será desperdiçado.
De fato, o Django Admin é muito bem estruturado. Em alguns dos meus projetos, usei o painel de administração do Django "como está" e, em outros, o substituí completamente por meus próprios modelos, que desenvolvi do zero. De qualquer forma, isso não levou mais tempo que o desenvolvimento com qualquer outra estrutura que eu conhecia.
A principal vantagem? Você obtém direitos de acesso e autenticação prontos para uso. Levaria semanas (ou pelo menos alguns dias) para desenvolver tudo isso do zero.
Princípio SECO (não repetir)
Conheço muitas estruturas cujos proponentes afirmam que realmente cumprem o princípio "SECO". Eu trabalhei com muitas dessas estruturas, mas em nenhuma delas o princípio de "DRY" é implementado como deveria.
Infelizmente, na maioria das estruturas, o princípio "SECO" simplesmente não recebe atenção suficiente. Na minha opinião, se você estiver escrevendo um aplicativo que pretende atualizar regularmente (o que pode ser dito sobre a maioria dos aplicativos modernos), siga o princípio DRY para evitar problemas.
Portanto, no Laravel, você deve escrever a validação para cada procedimento separadamente. A situação é a mesma com a maioria das outras estruturas. Para tornar seu código compatível com o princípio DRY, você precisa trabalhar duro. É difícil acompanhar isso, especialmente se você trabalha em equipe.
Por sua vez, a estrutura do Django é projetada de tal maneira que violar o princípio DRY geralmente sai apenas de propósito.
Isso não deveria ser, certo? Considere um exemplo.
Veja como o Django trabalha com validação e migração de banco de dados
Crie a classe
Model
com os campos obrigatórios. Indicamos todas as validações e restrições adicionais necessárias.
As migrações são geradas por um único comando da CLI: `python manage.py makemigrations`.
As alterações são feitas no banco de dados com um único comando da CLI: `python manage.py migrate`.
Validações e restrições são verificadas automaticamente durante cada operação CRUD - seja um Django Admin ou um Django REST Framework. Você não precisa escrever validações novamente.
A mesma classe de modelo é usada para gerar visualizações CRUD do Django Admin. Não é necessário HTML / CSS personalizado.
Compare essas condições com qualquer outra estrutura - e, eu acho, você nunca seria capaz de fazer algo assim apenas nas seguintes linhas de código:
class Employee(models.Model): name = models.CharField(max_length=127) email = models.EmailField(null=True, blank=True) created_at = models.DateTimeField(blank=True, null=True, auto_now_add=True) updated_at = models.DateTimeField(blank=True, null=True, auto_now=True)
Não se trata apenas de "não repetir". Essa abordagem evita erros no futuro. Todos nós nos encontramos em situações nas quais trocamos algo em um lugar e esquecemos de substituir em outro lugar - e isso ficou claro somente depois que muitos usuários começaram a ter problemas.
No Django, retornando ao código acima, se você precisar substituir os campos
`max_length`
por outra coisa - faça-o aqui. A alteração será aplicada automaticamente à validação de todas as rotas e ao banco de dados.
Mapeamento Relacional de Objetos no Django
O Django fornece um mecanismo ORM pronto para uso completo.
Trabalhei com muitas ferramentas ORM em várias tecnologias, incluindo Eloquent, greenDAO, Yii AR, etc. Em todas elas, as solicitações mais simples são processadas muito bem, mas mais cedo ou mais tarde tive que escrever certas solicitações do zero, pois o mecanismo ORM não conseguia lidar com um caso prático específico.
Com o Django ORM, ainda não estive nessas situações. Funcionou tão bem que você pode esquecer que está trabalhando com consultas ao banco de dados. É exatamente isso que deve ser o mapeamento objeto-relacional. A seguir, alguns exemplos do Django ORM:
# 5 , rank = 10 age <= 30 top_young_employees = Employee.objects.filter(rank=10, age__lte=30)[:5] # employee = Employee.objects.create(name='John Doe', age=35, country='IN') # print(employee.name)
Desenvolvimento rápido
Os criadores de quase qualquer estrutura da Web gostam de se gabar disso e, talvez, estejam todos realmente certos - dependendo do significado que damos à palavra "rápido".
É verdade que, com o Django, algumas coisas são feitas de maneira hilariante e rápida. Você já viu a facilidade com que conseguimos determinar a interface do usuário do administrador, a tabela do banco de dados e a validação.
Era apenas a ponta do iceberg.
Em princípio, o desenvolvimento rápido não é um recurso em si, mas apenas uma conseqüência orgânica do Django DRY, ORM, o mecanismo de modelo e a filosofia abrangente.
Segurança do Framework Django
Vamos admitir, às vezes os desenvolvedores são preguiçosos. Eu tenho tanta certeza. De tempos em tempos procrastino, adiando a solução para tarefas críticas. É aqui que várias vulnerabilidades podem surgir.
Eu gosto especialmente do fato de o Django não fazer indulgências de segurança para acelerar o ritmo do desenvolvimento. Os recursos de segurança são ativados por padrão, portanto, não importa se você é preguiçoso ou não.
Código aberto, excelente documentação, enorme comunidade, etc.
Como o Django é uma estrutura de código aberto e incrivelmente popular, uma comunidade responsiva se formou em torno dela. Eu acho que você está ciente das vantagens do software livre - e, portanto, todas elas são inerentes ao Django.
A documentação oficial do Django é mais que suficiente para qualquer desenvolvedor. Se você ficar preso, não é difícil encontrar uma solução.
Você já deve ter a impressão de que o Django criou muitas de suas próprias bibliotecas, portanto, poderá se surpreender que não exista uma biblioteca especial para testes aqui. Não, não pense que a estrutura do Django não suporta testes - suporta, mesmo assim. Só que, seguindo o princípio "Não repita", não faria sentido desenvolver uma biblioteca para teste quando uma excelente biblioteca desse tipo já estiver no próprio Python. Django interage bem com ela. Além disso, combina muito bem com bibliotecas de terceiros, como o pytest.
Estado atual do Django e outras estruturas populares
Então, tentei ao máximo possível destacar os problemas que encontrei ao trabalhar com outras estruturas e comparar essas estruturas com o Django. Depois de trabalhar com o Yii, CodeIgniter, WordPress, CS-Cart, Laravel, etc., cheguei à conclusão de que o Django é muito melhor do que qualquer um deles.
No entanto, esta é apenas a minha opinião.
Se você gosta de estatísticas, aqui está o estudo anual Stack Overflow, onde o Django está entre os frameworks mais populares e procurados:
Estruturas, bibliotecas e ferramentasEstruturas, bibliotecas e ferramentas mais queridas, temidas e desejadasAlém da experiência acima com PHP, também desenvolvi aplicativos Android em Java, aplicativos clientes em React.js. Em todos esses casos, passei bastante tempo refatorando a base de código, procurando a melhor arquitetura, depois de alguns meses vinculando problemas de escalabilidade e retomando a refatoração.
Reescrevi recentemente do Laravel para o Django um aplicativo que eu produzia há mais de um ano. Consegui implantar uma nova base de código em menos de 10 dias, escrevendo a quantidade mínima de código para isso (digo o mesmo: a complexidade diminui!) Na direção oposta, essa operação levaria definitivamente mais de um mês.
Se você tentar comparar diretamente outras estruturas com o Django, isso não fornecerá nada.
O monitoramento de desempenho pode mostrar que a estrutura Java é mais rápida que o Django. Você pode ser bom em PHP, portanto, é possível que o desenvolvimento de seu aplicativo no Django seja mais rápido do que com a estrutura familiar do PHP. No caso de uma aplicação muito simples, configurar o Django pode parecer um pouco tedioso para você - é claro, é muito mais fácil escrever um arquivo com scripts. Os resultados da pesquisa podem variar de acordo com o público em que foram realizados.
No entanto, aqui não estamos apenas discutindo estruturas relacionadas a outras tecnologias. Mesmo se você estiver familiarizado com o Python, poderá achar a microframework do Flask mais conveniente e desejável. Teremos que pensar em qual parar.
Meu conselho é simplesmente não compará-los.
Conclusão
Na minha opinião, o Django conseguiu equilibrar perfeitamente desempenho, arquitetura, complexidade de desenvolvimento, segurança e escalabilidade.
Se você está começando a escrever um projeto do zero, eu recomendo tentar fazê-lo com o Django.