- Compartilhamento de conhecimento
- "Quem ensina aprende ao ensinar" Paulo Freire
$ cd hands_on
$ python3 manage.py check
$ python3 manage.py migrate
$ python3 manage.py test
Há um teste
Aprendizagem guiada por testes.
É importante entender algumas coisas do mundo python antes iniciar no django:
- Python Enhancement Proposal: se é necessário uma evolução no python saporra é feita por meio de uma pep, porém há peps de padrão de escrita de código, padrão para um webserver e etc.
- PIP python package index, gestor de depências do python
- Python é strong, dynamic typed;
- Python tem aspectos funcionais como first class function, lambdas;
- Python é orientada a objetos
- Python permite herança multipla
Usamos python3 nesta demonstração, principalmente pq eu quis estar aderente ao que de mais novo é utilizado e pra entender quais são as principais diferenças
- sendo elas, todas strings são unicode, neste exemplo não fica evidente, porém é um saco ter que controlar se a string é str ou unicode, isso gera grandes problemas ao lidar com regex leitura de arquivos texto e demais operações com string.
- facilidade no processamento concorrente/paralelo;
- processamento assíncrono;
Django é um framework web MVT model view template desenvolvido em python. Facilitar a publicação de conteúdo, bastante utilizado por jornais provedores de conteúdo, hj pelo insta, pinterest, globo.com
O que me impressiona:
- Perfeita aderência ao protocolo http com roteamento de urls parametrizados para acessar views.
- Componentização em um nível que induz os desenvolvedores à criar componentes que possam ser facilmentes incluídos em qualquer outro site django.
- Linha de comando pra tudo, pra testar, pra subir o site, pra fazer uma migrate e etc.
- Framework de Template
- ORM com Migrations
- Module de testes
- Tem uma baita comunidade ativa fazendo muitas coisas legais e pela facilidade de adoção fica massa demais incorporar libs de terceiros.
- Além de td isso temos webservers como tornado ready to event loop e processamento assíncrono.
O que me desagrada:
- Tem um belo settings de configuração do framework, parte chata não gosto nada sou mto mais fã de um padrão que o porfa sempre fala e que a M$ e o Ruby on rails tbm usa, fugiu a porra do nome(Porém eu não tenho uma sugestão melhor então fico na minha);
- Não ter a possibilidade de escrever o mesmo código para o client e server.
Com td isso vc pode fazer mta mandraquisse... e contruir mta coisa boua, coisas simples como este blog que vc tá lendo ou o instagram ou pinterest, além de uma porrada de portal e site de noticias.
Projeto: é o código fonte completo do site. Apps: é uma pasta na raiz do projeto, onde encontramos os models, templates e views de um projeto Packages: é uma pasta contendo o arquivo init.py, contendo uma coleção de modules Modules: é um arquivo .py, que pode conter classes ou functions puras.
<nome_do_projeto>/ <apps_um>/ template/ app_template.html views.py models.py <apps_um>/ template/ app_template.html views.py models.py static/ img/ css/ js/ manage.py
Views: as views são o elo entre um url roteada e o código que fará a geração do conteúdo que a url representa.
Permite construir arquivos html com {% notações %} que possibilita renderizar conteúdo sem que seja necessário escrever código complexo para escrever sequencias de html, por exemplo uma tabela.
- Podemos trocar a engine de template
Migrations: Escreva seus models e através dos comandos makemigrations e migrate. construa seu modelo baseado no código que vc escreveu, sem a necessidade de escrever código sql. Model: Modulo que permite escrever seus models, determinar relacionamentos como one-to-many,one-to-one e many-to-many; QuerySet: Módulo que traz um pacote de ferramentas para consulta de dados de um modelo;
- Auth_provider
- Viewset
- Serializers