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.
últimas postagens
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
- Se você encontrar algum problema, consulte a tabela a seguir extraída do oficial documentação do python.
Plataforma
Casca
Comando para ativar ambiente virtual
POSIX
bash/zsh
$ source
peixe
$ source
csh/tcsh
$ source
Núcleo do PowerShell
$
janelas
cmd.exe
C:>
PowerShell
PS C:>
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.
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.
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.