Vamos explorar como tornar um aplicativo Django de demonstração acessível na internet, sem a necessidade de hospedá-lo em um serviço de deploy.
Configurar um ambiente de implantação de teste apenas para demonstrar seu aplicativo Django pode ser complicado. Especialmente se você precisa de uma URL temporária para mostrar a um cliente ou colega.
A melhor solução é utilizar uma ferramenta que exponha seu servidor local. Isso mesmo! Pessoas de qualquer lugar do mundo poderão ver o que está acontecendo em seu localhost.
Para isso, usaremos o Ngrok. Esta ferramenta permite gerar URLs públicas a partir das portas locais do seu computador, através da tecnologia de túneis.
Todo o código deste tutorial está disponível neste Repositório Github, para sua referência.
Requisitos Essenciais
É recomendável ter algum conhecimento prévio sobre os tópicos abordados, mas mesmo sem ele, você provavelmente conseguirá acompanhar este guia sem dificuldades.
Criando um Aplicativo Django
Para este tutorial, vamos detalhar o processo de criação de um projeto Django. Se você já tiver um projeto, pode pular esta seção.
Ambiente Virtual
Primeiramente, vamos criar um ambiente virtual Python.
- Abra o terminal do seu sistema (ou shell).
- Se abrir o terminal do sistema for complicado, use o terminal integrado do seu editor de código.
- Acesse Terminal>Novo terminal e um shell aparecerá na parte inferior da tela.
- Digite o comando abaixo para criar um ambiente virtual, usando a ferramenta integrada do Python.
python -m venv .venv
Este comando significa:
Python, crie um ambiente virtual (-m venv) nomeado “.venv”.
- Ao listar os arquivos do seu diretório, você deverá ver uma pasta chamada “.venv”.
$ ls -l drwxr-xr-x - daniel 30 abr 23:12 .venv # Outros arquivos ...
- Para ativar o ambiente virtual, utilize o comando source.
source .venv/bin/activate
- Se você tiver algum problema, consulte a tabela abaixo, extraída da documentação oficial do Python.
Plataforma | Shell | Comando para ativar ambiente virtual |
POSIX | bash/zsh | $ source <venv>/bin/activate |
fish | $ source <venv>/bin/activate.fish | |
csh/tcsh | $ source <venv>/bin/activate.csh | |
PowerShell Core | $ <venv>/bin/Activate.ps1 | |
Windows | cmd.exe | C:> <venv>\Scripts\activate.bat |
PowerShell | PS C:> <venv>\Scripts\Activate.ps1 |
Se o comando foi executado corretamente, o nome do ambiente virtual aparecerá no seu shell.
$ source .venv/bin/activate.fish (.venv) $
Instalando o Django
Com o ambiente virtual ativado, você pode instalar qualquer versão do Django. Para este tutorial, usaremos a versão mais recente.
$ pip install django Collecting django Using cached Django-3.2-py3-none-any.whl (7.9 MB) Collecting pytz Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB) Collecting asgiref<4,>=3.3.2 Using cached asgiref-3.3.4-py3-none-any.whl (22 kB) Collecting sqlparse>=0.2.2 Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB) Installing collected packages: pytz, asgiref, sqlparse, django Successfully installed asgiref-3.3.4 django-3.2 pytz-2021.1 sqlparse-0.4.1
Agora, criaremos a estrutura básica do projeto Django que será exposto.
$ django-admin startproject mytestingproject
Este comando cria um projeto Django chamado “mytestingproject”. Entre na pasta onde a estrutura do projeto foi criada e execute o servidor Django.
# Entrando na pasta do projeto (.venv)$ cd mytestingproject/ # Listando os arquivos dentro do projeto (.venv) $ ls mytestingproject manage.py
Agora que você está dentro da pasta do projeto, vamos executar o servidor Django.
(.venv) $python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 18 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. May 01, 2021 - 04:34:25 Django version 3.2, using settings 'mytestingproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
O Django informa que um servidor local está rodando no localhost (127.0.0.1) na porta padrão 8000.
Não se preocupe com as mensagens de aviso. Primeiro, vamos testar se tudo está funcionando no nosso servidor local. Abra o navegador e digite a seguinte URL:
http://localhost:8000/ # Lembre-se que localhost e 127.0.0.1 são equivalentes!
Se tudo estiver correto, você verá a página inicial padrão do Django.
Isso conclui a configuração do Django. Agora, vamos expor este projeto Django. Os métodos para expor um aplicativo Django também funcionarão com projetos mais complexos.
Expondo um Aplicativo Django com Ngrok
Como mencionado, o Ngrok é uma ferramenta que permite disponibilizar seu servidor local na internet. Primeiro, baixe o Ngrok no site oficial.
Após a instalação, vamos executar os comandos necessários.
Abra um novo shell, mantendo o terminal onde o servidor Django está sendo executado, e digite o seguinte comando:
$ ngrok help NAME: ngrok - tunnel local ports to public URLs and inspect traffic More commands ....
Este comando mostra os comandos disponíveis no Ngrok, confirmando que a instalação ocorreu corretamente.
Para criar uma URL que permita o acesso ao seu servidor, use o comando abaixo.
$ ngrok http 8000
# URL pública e segura para o servidor web na porta 8000
O argumento “http” cria uma URL que se conecta à porta 8000 do seu localhost.
Este é o resultado que você deverá ver:
ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Session Expires 1 hour, 59 minutes Update update available (version 2.3.39, Ctrl-U to update) Version 2.3.35 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://cac2165aa7f8.ngrok.io -> http://localhost:8000 Forwarding https://cac2165aa7f8.ngrok.io -> http://localhost:8000 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00
O Ngrok está encaminhando essa URL para seu localhost. A mágica acontece quando você acessa essa URL no seu navegador.
Ajustando o settings.py
O que aconteceu 😱?
Parece que o Django está retornando um erro devido à configuração DisallowedHost. Se você verificar os shells onde o servidor Django e a sessão Ngrok estão rodando, verá algumas mensagens de depuração.
# Mensagens do Django Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. Bad Request: / [01/May/2021 05:07:46] "GET / HTTP/1.1" 400 65196 Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. # Mensagens do Ngrok HTTP Requests ------------- GET /favicon.ico 400 Bad Request GET / 400 Bad Request
O Django exige que o domínio usado para conexão seja adicionado à variável de configuração ALLOWED_HOSTS. O problema é que o domínio gerado pelo Ngrok é longo e complexo.
Vamos modificar as configurações do Django para resolver este problema. Abra o arquivo settings.py, localizado na pasta do seu projeto.
# mytestingproject/settings.py # Linha 28 # Alterar de ALLOWED_HOSTS = [] # Para ALLOWED_HOSTS = ["*"]
Com a expressão “*”, estamos permitindo que qualquer host seja aceito. Recarregue a página no navegador para ver o resultado.
Tudo está funcionando corretamente agora! Se você criar novas funcionalidades e rotas para seu projeto, elas serão refletidas nesta URL pública.
Importante: Lembre-se de alterar o ALLOWED_HOSTS em um ambiente de produção, pois esta configuração é um risco de segurança.
Conclusão
Neste guia, você aprendeu como gerar uma URL para seu projeto Django, sem a necessidade de um deploy.
Você praticou como iniciar um projeto Django e como alterar o arquivo settings.py.
Finalmente, você aprendeu como usar o Ngrok para expor qualquer servidor local.
Agora, explore alguns frameworks populares em Python para criar APIs.