Por que os programados devem aprender Django?

Desde o ano de 2018 idealizei uma solução web para o agronegócio. Foi então que na curiosidade realizei todo o processo de registro de marca no inpi, porém o projeto parou por aí.

Durante muito tempo estudei diversas tecnologias como: Laravel, Amplify da Amazon, Java Spring Boot, Flutter e NodeJs.

Com exceção do Flutter, as demais tecnologias são mais focadas no backend. A combinação mais próxima do projeto de desenvolver um painel interativo com as tecnologias que estudei foi o Amplify como solução backend e Flutter para frontend.

A possibilidade de utilizar o Amplify foi uma experiência positiva, pois estudei também as tecnologias da Amazon com o EC2, Amplify, RDS PostgreSQL e Amazon S3. Estas última duas tecnologias serão revisitadas neste artigo.

O Amplify apesar de ser prático e automatizar vários recursos eu continuei a busca pela tecnologia que me desse agilidade.

A evolução da tecnologia no desenvolvimento de software.

Comecei a programar por volta de 2005, naquela época utilizava o PHP como linguagem dinâmica e sempre optei por utilizar soluções de banco de dados como o MySQL.

Apesar de ter afinidade com a linguagem de programação PHP, naquela época tinha dificuldade em utilizar frameworks como o Zend e o Cake PHP. Eu percebo hoje que eu tinha na verdade era uma dificuldades em aplicar o paradigma de orientação a objetos, por isso eu sempre programava em estilo estrutural.

Como o meu foco na época era PHP em desenvolvimento perdi a oportunidade de enxergar outras soluções como o Django por exemplo que foi lançado na mesma época.

Meu foco de estudos então passou a ser banco de dados relacional e pratiquei bastante modelagem de dados.

Em outras experiências de projeto de software por volta dos anos de 2009, utilizei a tecnologia PHP como base para os projetos web, entretanto naquela época não havia necessidade de se criar tantos recursos quanto hoje em dia.

No decorrer do avanço da tecnologia e desenvolvimento de software, os requisitos de sistemas tornaram-se mais completos e complexos. Outro fator importante a ser observado nos dias de hoje é que a velocidade de entrega de projetos de software são essenciais.

Basicamente todos os sistemas já tem requisitos implícitos, como: autenticação, internacionalização, armazenamento de dados armazenamento de arquivos, envios de e-mails e envios de notificações. A nova tendência que que haja uma alta na segurança e criptografia de dados.

Nos dias atuais a disputa é por quem consegue inovar, principalmente na integração entre sistemas, além da velocidade do desenvolvimento e entrega da solução de software.

Por que utilizar o django em seu projeto de software?

O django é simplesmente fantástico. Ao retomar os estudos e utilizar a versão mais recente do framework pude ter uma experiência bem ágil para a prototipação e aplicar ideias extremamente complexas em uma velocidade antes inimaginável.

Em um projeto de sistema de Gestão de Obra, consegui resolver diversos problemas utilizando apenas os recursos do django na visão adminitrativa.

Este sistema dificilmente seria desenvolvimento na velocidade que foi se fosse utilizando outra tecnologia, levando em consideração que é um projeto web.

O django admin contém inúmeros recurso. Podemos aproveitar padrões de projetos para agilizar o desenvolvimento, além da estrutura padronizada e personalizável.

Voltando ao projeto do agronegócio não será possível utilizar a interface de admin e seus recursos do django admin na sua totalidade. Certamente irei aproveitar deste recurso para agilizar na construção do painel administrativo, onde irei realizar a manutenção dos dados do sistema.

Como disse acima, no projeto de gestão de obras eu construi totalmente utilizando a interface administrativa, entretanto neste projeto do agronegócio preciso de uma área administrativa para a manutenção do site, enquanto que outra área administrativa apenas para acesso dos visitantes, fornecedores e produtores rurais.

Sendo assim será necessário que eu crie as interfaces de login separadas e irei desenvolver um painel exclusivo para o portal do agricultor, fornecedor e outros acessos.

Essa diferença dos dois projetos trará desafios diferentes. Neste exemplo específico do agronegócio será bem mais difícil e exigirá mais tempo, devido à necessidade de criar novas telas.

Internationalization and Localization

Um maiores desafios do projeto do agronegócio será a internacionalização, mas não desafio técnico e sim de modelo de negócio, onde precisarei estudar principalmente os países que tem fatores religiosos e culturais bem diferente do nosso, além da língua dos países, algumas são bastante desafiadoras já que o nosso alfabeto não é nem um pouco semelhante..

Felizmente a parte técnica será bem trabalhada e desenvolvida, pois o django possui um recurso nativo de internacionalização, que pode ser visto neste link.

Organização do projeto em django

A organização do projeto em django é um fator positivo, pois podemos estruturar o projeto de forma que futuramente outras programadores podem se adaptar a ele. Se algum programador já é experiente em Django dificilmente ele terá dificuldade em continuar o projeto.

Utilizar as técnicas e padrões recomendadas do Django são fatores também positivos, pois o sistema implementa recursos avançados que muitas vezes não dominamos ou não conhecemos.

Um destes recursos e implementação acaba acontecendo de forma nativa, como por exemplo a mitigação de ataques conhecidos como: SQL injection, ataque de sessão entre outros.

Estes ataques consiste em hackers e especialistas de tecnologia da informação a extrair dados do sistema e em alguns casos invadir a infraestrutura de onde ele está hospedado.

Utilizar a estrutura recomendada pelo Django e aproveitar os fatores de segurança que ele já disponibiliza fará com que seu projeto se torne mais resiliente nos dias de hoje, onde o ambiente digital é bastante delicado.

Este é um exemplo simplificado da estrutura de arquivos do projeto django.

  • app
    • settings.py
  • geral
    • models.py
      • Cliente
      • Fornecedor
    • admin.py
      • Telas, Listas, Paginações, Filtros, Formulários e Etc.

Ao projetarmos um sistema em módulos podemos utilizar recursos de forma mais otimizada, uma vez que iremos economizar recursos de hardware, pois estaremos utilizando apenas o código necessário para cada atividade.

Dry (Don’t Repeat Yourself)

Aprenda agora django com um curso online.

Dry é uma acrônimo do inglês para não se repita. Isso significa que você deve sempre evitar que em seu projeto você reescreva códigos. A necessidade de utilizar a mesma funcionalidade desenvolvida em outras partes do sistema deve nos levar ao questionamento de como aproveitar o código em outras partes do sistema.

O Django nos dá infinitos recursos para o reaproveitamento de código. Ele também traz uma facilidade do entendimento e dessa necessidade devido à sua estrutura de organização.

É possível que pessoas menos experientes no framework possam adquirir essa habilidade de repensar o desenvolvimento de sistemas de forma mais qualitativa, aplicando padrões de projetos avançados, talvez até mesmo sem possuírem e este conhecimento, já que o aprendizado é intuitivo.

Armazenamento de arquivos.

O Django suporta diversas formas de armazenamento de arquivo do seu projeto, dentre elas estão: armazenamento local no servidor, armazenamento servidores de rede que utilizam protocolos de rede como o ftp, e também soluções de repositórios em nuvem como o Amazon S3.

Cada projeto de software tem sua característica específica, porém o Amazon S3 é uma das melhores alternativas.

Um dos pontos positivos do amazon S3 é o fato dele ser relativamente mais barato do que outras soluções de armazenamento, além de prover recursos como criptografia nativa, e também backup.

Outro ponto positivo que o Amazon S3 pode fornecer é a segurança já que toda a infraestrutura é mantida e administrada pela Amazon.

É possível também aproveitar de recursos de desempenho, já que a infraestrutura da Amazon realiza a distribuição dos arquivos de forma que, em projetos internacionais, como é o caso do meu projeto Agro, o próprio servidor da Amazon otimiza a entrega dos recursos.

É importante sempre avaliar o gerenciamento e as configurações de cada projeto, para manter o repositório de arquivos o mais seguro possível.

Onde você deve hospedar a sua aplicação django?

Veja como você pode aprender django.

Tudo dependerá da característica da aplicação. Aplicações que mesmo que sejam web a sua principal característica é que o acesso seja feito através de um ambiente interno e controlado, como é o caso de redes corporativas.

Aplicações como redes sociais por outro lado apresenta uma característica diferente. Este tipo de sistema é acessível pela internet por todo o mundo. E pensar na segurança da informação é um dos pontos principais.

Podem ser arquitetados diversos projetos de infraestrutura para prover uma aplicação web django, como por exemplo utilizar servidores próprios ou servidores em nuvem como da Amazon.

Entretanto soluções como Amazon exigem um nível de conhecimento técnico avançado em infraestrutura e devops, que em muitos casos os projetos de softwares não dispõe destes recursos.

Entretanto existem soluções também robustas e baratas que podem ser utilizadas com o objetivo de prover a disponibilidade do sistema, manter a segurança e também ser simples de fazer o deploy.

Cloud flare

Uma configuração que eu gosto de fazer é configurar o cloud flare para filtrar requisições maliciosas. De forma simples configuramos o website para direcionar os acessos para os servidores da Cloud Flare, em seguida os servidores da Cloud Flare realizam uma sequencia de análises e filtros que bloqueiam conexões mal intencionadas.

Também é possível utilizar o cloud flare como um firewall, e também criar regras para que a conexão do seu website seja bloqueada caso alguém tente acessar seu sistema de outro país. Este tipo de bloqueio é ideal para aplicações que sempre serão acessadas diretamente pelo Brasil.

Há formas de burlar o acesso utilizando proxys e VPN, mas já limitamos neste pequeno processo que diversas ferramentas automatizadas na internet tenham acesso e conhecimento dos seus sistemas.

Os planos pagos da Cloud Flare também contém recursos mais avançados que podem ser analisados em cada projeto.

Heroku

O heroku é uma plataforma como serviço, ou seja ela já disponibiliza formas de nos entregar um servidor web já preparado e configurado para rodar o Django de forma simples e eficiente.

A principal vantagem de se utilizar o Heroku é que a implantação do sistema é simples, uma vez que não há necessidade de grandes configurações, ficando sendo nossa responsabilidade apenas lidar com o desenvolvimento e envio do código para o servidor.

Dentre outras vantagens de se utilizar o heroku é que ele lista também um check list de boas práticas, que podemos aplicar em nosso projeto para deixá-lo mais mais seguro.

Banco de dados

O Django foi projetado para utilizar bancos de dados relacionais e geralmente o banco de dados utilizado é o postres.

Uma das alternativas para você configurar o banco de dados é subir ele em um servidor RDS da Amazon, que também irá prover recursos como backup e segurança de infraestrutura, é preciso apenas ter cuidado nas configurações e sempre que possível realizar as limitações de conexão apenas para o servidor onde está a aplicação web.

Entretanto é possível também utilizar soluções de bancos de dados do heroku, e esta opção é mais fácil de configurar, uma vez que a própria plataforma do Django já cria um banco de dados e configurar automaticamente uma vez que você sobe o projeto.

A plataforma da heroku utiliza a infraestrutura da Amazon, o que significa que de forma implícita utilizamos os benefícios de se utilizar os recursos da Amazon.

Um ponto importante a ser avaliado é o cuidado de fazer backup da aplicação e do banco de dados, independente da tecnologia e plataforma utilizada.

Conclusão

O DJANGO é um framework maduro que já perdura por mais de uma década. Ele é simples de utilizar e possui recursos que auxiliam no desenvolvimento de qualquer sistema nos dias de hoje. A

prender DJANGO é uma ótima alternativa para se capacitar. Caso tenha interesse eu indico este curso em python + django para aumentar suas habilidades.

Referências

https://www.treinaweb.com.br/blog/o-que-e-laravel

https://pt.m.wikipedia.org/wiki/Zend_Framework

https://en.m.wikipedia.org/wiki/Django_(web_framework)#:~:text=10%20External%20links-,History,before%20Simon%20Willison%27s%20internship%20ended.

https://www.devmedia.com.br/programacao-orientada-a-objetos-e-programacao-estruturada/32813