Hur exponerar man en Django Demo-app för internet med Ngrok?

Låt oss lära oss hur man exponerar en Django-demoapp för internet. Det utan att distribuera det i en värdtjänst.

Att konfigurera en iscensättningsmiljö bara för att visa en demo av din Django-app är hemskt. Ännu mer, om du bara behöver en URL för ett par minuter, för att visa den för en kund eller lagkamrat.

Det bästa alternativet är att använda ett verktyg för att exponera din nuvarande lokala server. Exakt! Människor över hela världen kommer att kunna se vad som händer på din lokala värd.

För det ändamålet kommer vi att använda Ngrok. Detta verktyg gör det möjligt för oss att skapa offentliga webbadresser baserat på de lokala portarna på våra datorer. Allt detta tack vare magin i Tunnlar.

Innan du startar kommer all kod som arbetade med den här handledningen att finnas tillgänglig i denna Github-förvaret.

Förkrav

Det rekommenderas att känna till alla dessa grundläggande saker. Även om det är troligt att du kan följa den här handledningen utan ytterligare problem.

Skapa en Django-app

För att skapa en steg-för-steg-handledning kommer jag att förklara processen för att skapa ett Django-projekt. Om du redan har en kan du hoppa över det här avsnittet.

Virtuell miljö

Först av allt, låt oss skapa en Python virtuell miljö.

  • Så öppna upp din systemterminal (eller skal).
  • Om du tycker att det är för komplicerat att öppna din systemterminal, försök att använda kodredigerarens inbyggda terminal.
  • Klicka på Terminal>Ny terminal, och ett skal bör visas längst ner på skärmen.
  • Skriv följande kommando för att skapa en virtuell miljö, med det inbyggda Python-verktyget.
python -m venv .venv

Det betyder i princip:

Hej Python, skapa ett kommando för virtuell miljö (-m venv) med namnet .venv

  • Om du nu listar filerna i din nuvarande katalog bör du se en .venv-mapp.
$ ls -l
drwxr-xr-x    - daniel 30 abr 23:12 .venv
# Other files ...
  • För att aktivera den virtuella miljön anropar vi källkommandot.
source .venv/bin/activate
  • Om du hittar några problem, vänligen se följande tabell utdragen från tjänstemannen python dokumentation.

Plattform
Skal
Kommando för att aktivera virtuell miljö
POSIX
bash/zsh
$ source /bin/activate

fisk
$ source /bin/activate.fish

csh/tcsh
$ source /bin/activate.csh

PowerShell Core
$ /bin/Activate.ps1
Windows
cmd.exe
C:> Scriptsactivate.bat

PowerShell
PS C:> ScriptsActivate.ps1

Om du nu har kört rätt kommando, bör ditt skal ha namnet på den virtuella miljön i sig.

$ source .venv/bin/activate.fish

(.venv) $ 

Installera Django

Efter att ha aktiverat din virtuella miljö kan du nu installera vilken Django-version du vill. I det här fallet är det ett bra val att installera den senaste.

$ 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

Nu är det dags att skapa den grundläggande projektstrukturen för Django-appen du vill exponera.

$ django-admin startproject mytestingproject

Detta kommer att skapa ett Django-projekt med namnet mytestingproject. Efter att ha skapat den vill vi att du vill gå in i katalogen där projektstrukturen finns. Så låt oss cd in i den och kör Django-servern.

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

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

Nu när du är inne, låt oss köra Django-servern för att se hur den ser ut.

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

I grund och botten berättar Django för oss att en lokal server körs på vår lokala värd (127.0.0.1 pekar alltid på den), på standardporten, 8000.

Oroa dig inte för felmeddelandet. Låt oss först kontrollera att allt fungerar bra på vår lokala server. För att göra det, gå till din webbläsare och klistra in den här riktningen:

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

Om allt fungerar bra bör du se en vacker Django-mall.

Det handlar om vår Django-installation.

Låt oss nu börja exponera detta Django-projekt. Om du arbetar med ett mer komplext projekt kommer följande metoder att exponera Django-appar också att fungera.

Exponera en Django-app med Ngrok

Som jag sa tidigare är Ngrok ett av verktygen som låter oss landa vår lokala server på internet. Så först och främst Ladda ner Ngrok från den officiella webbplatsen.

När du har installerat det, låt oss fortsätta med de nödvändiga kommandona.

Öppna ett annat skal, behåll terminalen som din Django-server körs för närvarande och skriv.

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

More commands ....

Detta kommer att ge dig en snabb titt på de tillgängliga kommandon som Ngrok erbjuder, och kommer också att garantera att installationsprocessen gick korrekt.

För att skapa en URL där folk kan komma åt vår server, låt oss köra.

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

Vi kör http-argumentet för att skapa en URL som kommer att ansluta till port 8000 på vår lokala värd.

Här är resultatet du förmodligen kommer att få.

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       

Som det står, vidarebefordrar Ngrok den där konstiga och fula webbadressen till vår lokala värd. Men magin händer när du trycker på webbläsaren med URL:en Ngrok gav dig.

Ändra settings.py

Wow, vad hände just 😱?

Det verkar som att Django ger ett fel på grund av en DisallowedHost-inställning. Om du kontrollerar skalet du kör Django-servern i, och det med Ngrok-sessionen, får du några felsökningsmeddelanden.

# 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                           
                                              

Som Django säger till oss måste vi lägga till domänen vi ansluter till ALLOWED_HOSTS konfigurationsvariabeln. Men vi har ett problem, och det är att domännamnet är för stort och förvirrande.

Så låt oss ändra lite på Django-inställningarna för att lösa detta fel. Öppna filen settings.py som finns i projektmappen.

# mytestingproject/settings.py

# Line 28

# Change from
ALLOWED_HOSTS = []

# To

ALLOWED_HOSTS = ["*"]

Om du känner till några regex kan du uppskatta att vi ställer in ett jokertecken, där alla värdar kommer att tillåtas.

Ladda nu om webbplatsen och se resultatet.

Allt fungerar perfekt nu! Och om du börjar skapa applikationer för projektet och ställa in webbadresser och vyer, kommer allt att återspeglas på den offentliga webbadressen.

Obs: Glöm inte att ändra ALLOWED_HOSTS i produktionen, eftersom det skulle skapa ett stort säkerhetshål.

Slutsatser

I den här handledningen lärde du dig hur du skapar en demo-URL för ditt Django-projekt utan att behöva distribuera den.

Du övade på hur du startar ett Django-projekt och arbetar med filen settings.py i Django.

Slutligen lärde du dig hur man använder Ngrok och hur man exponerar en lokal server med den.

Utforska sedan några av de populära Python-ramverken för att bygga API.