Como expor um aplicativo de demonstração do Django à Internet com o Ngrok?

Vamos aprender como expor um aplicativo de demonstração Django para a internet. Isso, sem implantá-lo em um serviço de hospedagem.

Configurar um ambiente de implantação de teste apenas para mostrar uma demonstração do seu aplicativo Django é horrível. Ainda mais, se você só precisa de um URL por alguns minutos, para mostrá-lo a um cliente ou colega de equipe.

A melhor opção é usar uma ferramenta para expor seu servidor local atual. Exatamente! Pessoas de todo o mundo poderão ver o que está acontecendo em seu localhost.

Para tanto, usaremos Ngrok. Esta ferramenta nos permitirá criar URLs públicos com base nas portas locais de nossos computadores. Tudo isso graças à magia de túneis.

Antes de iniciar todo o código trabalhado neste tutorial, estará disponível neste Repositório Github.

Pré requisitos

É recomendável saber todas essas coisas básicas. Embora seja provável que você possa acompanhar este tutorial, sem maiores problemas.

Criando um aplicativo Django

Para criar um tutorial passo a passo, explicarei o processo de criação de um projeto Django. Se você já tiver um, pode pular esta seção.

ambiente virtual

Primeiro de tudo, vamos criar um ambiente virtual Python.

  • Portanto, abra o terminal do sistema (ou shell).
  • Se você achar muito complicado abrir o terminal do sistema, tente usar o terminal integrado do editor de código.
  • Clique em Terminal>Novo terminal e um shell deve aparecer na parte inferior da tela.
  • Digite o seguinte comando para criar um ambiente virtual, com a ferramenta Python integrada.
python -m venv .venv

Basicamente significa:

Hey Python, crie um comando de ambiente virtual (-m venv) com o nome de .venv

  • Agora, se você listar os arquivos do seu diretório atual, deverá ver uma pasta .venv.
$ ls -l
drwxr-xr-x    - daniel 30 abr 23:12 .venv
# Other files ...
  • Para ativar o ambiente virtual, chamamos o comando source.
source .venv/bin/activate
  Como excluir filmes do Vudu

Plataforma
Casca
Comando para ativar ambiente virtual
POSIX
bash/zsh
$ source /bin/activate

peixe
$ source /bin/activate.fish

csh/tcsh
$ source /bin/activate.csh

Núcleo do PowerShell
$ /bin/Activate.ps1
janelas
cmd.exe
C:> Scriptsactivate.bat

PowerShell
PS C:> ScriptsActivate.ps1

Agora, se você executou o comando correto, seu shell deve conter o nome do ambiente virtual.

$ source .venv/bin/activate.fish

(.venv) $ 

Instalar o Django

Depois de ativar seu ambiente virtual, agora você pode instalar qualquer versão do Django que desejar. Nesse caso, é uma boa escolha instalar 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 é hora de criar a estrutura básica do projeto do aplicativo Django que você deseja expor.

$ django-admin startproject mytestingproject

Isso criará um projeto Django com o nome de mytestingproject. Depois de criá-lo, queremos que você entre no diretório onde a estrutura do projeto está localizada. Então, vamos fazer o cd nele e rodar o servidor Django.

# Enter to the project directory
(.venv)$ cd mytestingproject/

# Listing the files inside the project
(.venv) $ ls
mytestingproject  manage.py 

Agora que você está dentro, vamos rodar o servidor Django para ver como ele se parece.

 (.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.

Basicamente, o Django está nos dizendo que um servidor local está rodando em nosso localhost (127.0.0.1 sempre aponta para ele), na porta padrão, 8000.

  Como ver postagens ocultas no Reddit

Não se preocupe com a mensagem de erro. Primeiro, vamos verificar se tudo está funcionando bem em nosso servidor local. Para fazer isso, vá para o seu navegador e cole esta direção:

http://localhost:8000/
# Do you note that localhost and 127.0.0.1 are the same?

Se tudo estiver funcionando bem, você deverá ver um belo modelo do Django.

Isso é tudo sobre a nossa instalação do Django.

Agora vamos expor este projeto Django. Se você estiver trabalhando em um projeto mais complexo, os seguintes métodos de exposição de aplicativos Django também funcionarão.

Expondo um aplicativo Django com Ngrok

Como eu disse antes, o Ngrok é uma das ferramentas que nos permitirá colocar nosso servidor local na Internet. Então antes de tudo Baixar NgrokName do site oficial.

Uma vez instalado, vamos prosseguir com os comandos necessários.

Abra outro shell, mantendo o terminal que seu servidor Django está rodando no momento, e digite.

$  ngrok help
NAME:
   ngrok - tunnel local ports to public URLs and inspect traffic

More commands ....

Isso lhe dará uma visão rápida dos comandos disponíveis que o Ngrok oferece e também garantirá que o processo de instalação tenha ocorrido corretamente.

Para criar uma URL onde as pessoas possam acessar nosso servidor, vamos executar.

    $ ngrok http 8000 
# secure public URL for port 8000 web server

Estamos executando o argumento http, para criar uma URL que se conectará à porta 8000 do nosso localhost.

Aqui está o resultado que você provavelmente obterá.

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       

Como diz, Ngrok está encaminhando aquela URL estranha e feia para nosso localhost. Mas a mágica acontece quando você acessa o navegador com o URL que Ngrok forneceu.

  Como alterar as configurações de formato padrão do Google Docs

Alterando configurações.py

Nossa, o que acabou de acontecer 😱?

Parece que o Django está lançando um erro por causa de uma configuração DisallowedHost. Se você verificar o shell em que está executando o servidor Django e aquele com a sessão Ngrok, receberá algumas mensagens de depuração.

# Django messages
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.

# Ngrok messages
HTTP Requests                                                            
-------------                                                            
                                                                         
GET /favicon.ico               400 Bad Request                           
GET /                          400 Bad Request                           
                                              

Como o Django está nos dizendo, devemos adicionar o domínio que estamos conectando à variável de configuração ALLOWED_HOSTS. Mas temos um problema, e é que o nome de domínio é muito grande e confuso.

Então vamos mudar um pouco as configurações do Django, para resolver esse erro. Abra o arquivo settings.py localizado na pasta do projeto.

# mytestingproject/settings.py

# Line 28

# Change from
ALLOWED_HOSTS = []

# To

ALLOWED_HOSTS = ["*"]

Se você conhece alguma regex, pode perceber que estamos definindo um curinga, onde todos os hosts serão permitidos.

Agora recarregue o site e veja o resultado.

Tudo está funcionando perfeitamente agora! E se você começar a criar aplicativos para o projeto e definir URLs e visualizações, tudo será refletido nesse URL público.

Nota: Não se esqueça de alterar ALLOWED_HOSTS na produção, pois isso produziria uma enorme falha de segurança.

Conclusões

Neste tutorial, você aprendeu como criar uma URL de demonstração para seu projeto Django, sem a necessidade de implantá-la.

Você praticou como iniciar um projeto Django e trabalhar com o arquivo settings.py no Django.

Por fim, você aprendeu como usar o Ngrok e como expor qualquer servidor local com ele.

Em seguida, explore algumas das estruturas populares do Python para criar APIs.