Exemplo em Django – parte 1

django-1_abertura

Desde a publicação da primeira parte do (recém corrigido) exemplo em Rails que eu estava com vontade de fazer também um exemplo com usando o Django. E foi assim que surgiu a “Agenda de Eventos”, um exemplo simples mas funcional de, claro, uma agendinha para se registrar eventos diários!

Nesta primeira parte um pouco de teoria e, claro, a configuração do ambiente e os passos necessários para a instalação do framework.

O modelo MVC MTV

O Django é um framework para desenvolvimento de aplicações web escrito em Python e que trabalha, tal como o Rails, com a arquitetura MVC — o acrônimo de Modelo × Visão × Controlador ou Model × View × Controller — e que, de acordo com a Wikipedia, consiste em:

(…) um padrão de arquitetura de software (design pattern) que separa a representação da informação da interação do usuário com ele. O modelo (model) consiste nos dados da aplicação, regras de negócios, lógica e funções. Uma visão (view) pode ser qualquer saída de representação dos dados, como uma tabela ou um diagrama. (…) O controlador (controller) faz a mediação da entrada, convertendo-a em comandos para o modelo ou visão.

A “pequena” diferença é que nele esta arquitetura é chamada de MTV — que é acrônimo para Model × Template × View e que se poderia traduzir como Modelo × Gabarito × Visão — onde Template e View correspondem, respectivamente, aos componentes View e Controller da arquitetura MVC. Assim como no Rails, o Django também acrescenta uma camada de roteamento que se encarrega de identificar as URL recebidas e direcioná-las às visões correspondentes.

Juntando todos eles, a “pilha” de uma aplicação seria algo mais ou menos assim:

django-1_modelo_mtvu

Sim, é a mesma figura utilizada no exemplo em Rails com a diferença no nome das camadas — e nas cores também! 😀

Instalando o Django

Antes de efetivamente começar, é bom criar um ambiente de desenvolvimento separado do restante do sistema para aplicação e que neste caso significa utilizar o Virtualenv.

$ mkdir -p ~/Projetos/django
$ cd ~/Projetos/django
$ virtualenv --python=$( which python3 ) py3
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
...
Installing setuptools, pkg_resources, pip, wheel...done.
$ source py3/bin/activate

Será utilizada o Python 3.x e também a versão mais atual da série 2.0.0 do  Django.

$ pip install 'django>=2.0.0'
Collecting django
  Downloading Django-2.0.3-py3-none-any.whl (7.1MB)
    100% |████████████████████████████████| 7.1MB 113kB/s 
Collecting pytz (from django)
  Downloading pytz-2018.3-py2.py3-none-any.whl (509kB)
    100% |████████████████████████████████| 512kB 238kB/s 
Installing collected packages: pytz, django
Successfully installed django-2.0.3 pytz-2018.3

E por enquanto isto é tudo o que precisará ser instalado por aqui.

Projeto × Aplicação

Dentro do Django existem os conceitos de projeto e de aplicação. O primeiro está relacionado com o programa como um todo enquanto e o outro faz relação a uma determinada funcionalidade — como se fosse um módulo. Assim é possível tanto compartilhar um mesmo conjunto de objetos, métodos, arquivos etc… entra as aplicações de um projeto como também utilizar determinada aplicação em outros projetos distintos.

Criando um projeto

Para criar um novo projeto em Django use:

$ django-admin startproject Agenda

Este comando criará um novo diretório, o “Agenda” e colocará dentro dele os arquivos necessários do novo projeto.

Criando uma aplicação

Dentro do diretório que contém o novo projeto, o “Agenda”, crie uma nova aplicação com:

$ cd Agenda
$ ./manage.py startapp events

Assim como o comando anterior ele criará um novo diretório e colocará alguns novos arquivos lá dentro — inclusive alguns com o mesmo nome daqueles criados para o projeto.

Adicionando a aplicação ao projeto

Para que a nova aplicação passe a integrar o projeto é necessário editar o arquivo “./Agenda/Agenda/settings.py” e acrescentá-la no começo da lista INSTALLED_APPS.

...
INSTALLED_APPS = [
    'events',
    'django.contrib.admin',
    'django.contrib.auth',
    ...
]
...

Aliás esta é uma boa oportunidade para dizer que o Django já inclui módulos para autenticação de usuários e também de administração do conteúdo.

Um primeiro teste

O Django também tem implementado um servidor HTTP para ser utilizado durante a fase de desenvolvimento. É possível iniciá-lo com o comando:

$ ./manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work
properly until you apply the migrations for app(s): admin, auth,
contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

March 25, 2018 - 19:54:46
Django version 2.0.3, using settings 'Agenda.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

A mensagem sobre as migrações pendentes no banco de dados é normal e será corrigida posteriormente — mas nada impede de ser feito agora.

Ele pode ser acessado diretamente em 127.0.0.1:8000 e para interromper sua execução, pressione «Control»+«C».

Fim desta parte

E antes de encerrar, inicializar um novo repositório Git.

$ git init
Initialized empty Git repository in /home/.../django/Agenda/.git/

Criar um arquivo “.gitignore”:

$ cat >.gitignore <<EOT
*__pycache__
py3
*.swp
db.sqlite3
EOT

Daí adicionar os arquivos até agora e fazer o primeiro commit.

$ git add --all
$ git commit -m "primeiro commit"

E pronto! Na próxima parte será a vez de definir o modelo de dados, como inserir e recuperar as informações nele e também como configurar a interface de administração do Django para ajudar um pouco algumas tarefas.

Até!

Anúncios

9 comentários sobre “Exemplo em Django – parte 1

  1. falhou no pip install ‘django>=2.0.0′

    Exception:
    Traceback(most recent call last):
    File “/home/carlos/Projetos/django/py3/lib/…’ line 215, in main status = self.run(option, args)
    …
    PermissionError: [Erno 13] Permissão negada:  ‘/home/carlos/…..

    Curtir

  2. Obrigado. Vou aguardar a continuação e reiniciar. Por favor pode me responder se vale a pena ter o vagrant no ubuntu?

    Curtir

  3. Eu concordo plenamente que o vagrant facilita e melhora o uso do virtual box. Minha dúvida: quero “brincar” com ruby, python, gostaria, php… vale a pena ter um box pra cada um ? Sei que o vagrantfile é uma “mão não roda”, mas a performance não fica comprometida ? (Claro, depende da máquina. ..) O docker não criaria os ambientes direto, dispensando o vagrant? Obrigado

    Curtir

    • Uma máquina virtual por hipervisor sempre degradará um pouco a performance, eu uso o VirtualBox no Vagrant por pura inércia mas ele suporta outras soluções. O Docker é uma solução mais recomendada para aplicações (binários, aplicações web como escritas em Django, Laravel, Rails etc, API etc) e não para “fazer SSH”. Uma solução que justa as coisas é o LXC pois você cria máquinas completas, como no VirtualBox, mas usando a mesma tecnologia de contêineres do Docker.

      Curtir

  4. Pingback: Exemplo em Django – parte 2 | giovannireisnunes

Os comentários estão desativados.