Hvordan eksponerer man en Django Demo App til internettet med Ngrok?

Lad os lære, hvordan man eksponerer en Django-demo-app til internettet. Det uden at implementere det i en hostingtjeneste.

At konfigurere et iscenesættelsesimplementeringsmiljø bare for at vise en demo af din Django-app er forfærdeligt. Endnu mere, hvis du kun har brug for en URL i et par minutter, for at vise den til en klient eller holdkammerat.

Den bedste mulighed er at bruge et værktøj til at afsløre din nuværende lokale server. Nemlig! Folk over hele verden vil være i stand til at se, hvad der sker på din lokale vært.

Til det formål vil vi bruge Ngrok. Dette værktøj giver os mulighed for at oprette offentlige URL’er baseret på de lokale porte på vores computere. Alt dette takket være magien ved Tunneler.

Før du starter, vil al den kode, der arbejdes på denne tutorial, være tilgængelig i denne Github-depot.

Forudgående krav

Det anbefales at kende alle disse grundlæggende ting. Selvom det er sandsynligt, at du kan følge med i denne tutorial uden yderligere problemer.

Oprettelse af en Django-app

For at oprette en trin-for-trin tutorial, vil jeg forklare processen med at oprette et Django-projekt. Hvis du allerede har en, kan du springe dette afsnit over.

Virtuelt miljø

Først og fremmest, lad os skabe en Python virtuelt miljø.

  • Så åbn din systemterminal (eller skal).
  • Hvis du finder det for kompliceret at åbne din systemterminal, så prøv at bruge den indbyggede terminal i kodeeditoren.
  • Klik på Terminal>Ny terminal, og en shell skulle vises nederst på din skærm.
  • Skriv følgende kommando for at oprette et virtuelt miljø med det indbyggede Python-værktøj.
python -m venv .venv

Det betyder grundlæggende:

Hej Python, opret en kommando for virtuelt miljø (-m venv) med navnet .venv

  • Hvis du nu viser filerne i din nuværende mappe, skulle du se en .venv-mappe.
$ ls -l
drwxr-xr-x    - daniel 30 abr 23:12 .venv
# Other files ...
  • For at aktivere det virtuelle miljø kalder vi kildekommandoen.
source .venv/bin/activate
  • Hvis du finder nogen problemer, henvises til følgende tabel udtrukket fra embedsmanden python dokumentation.
  Sådan repareres CBS All Access, der ikke virker på Amazon Firestick

Platform
Skal
Kommando til at aktivere virtuelt 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

Hvis du nu har kørt den korrekte kommando, skal din shell have navnet på det virtuelle miljø i sig.

$ source .venv/bin/activate.fish

(.venv) $ 

Installer Django

Efter at have aktiveret dit virtuelle miljø, er du nu i stand til at installere den Django-version, du ønsker. I dette tilfælde er det et godt valg at installere den nyeste.

$ 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 er det tid til at skabe den grundlæggende projektstruktur for den Django-app, du vil eksponere.

$ django-admin startproject mytestingproject

Dette vil oprette et Django-projekt med navnet mytestingproject. Efter at have oprettet det, vil vi gerne gå ind i den mappe, hvor projektstrukturen er placeret. Så lad os cd ind i det og køre Django-serveren.

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

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

Nu hvor du er inde, lad os køre Django-serveren for at se, hvordan den ser ud.

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

Grundlæggende fortæller Django os, at en lokal server kører på vores localhost (127.0.0.1 peger altid på den), på standardporten, 8000.

  Hvor meget koster Netflix pr. måned?

Du skal ikke bekymre dig om fejlmeddelelsen. Lad os først kontrollere, at alt fungerer fint på vores lokale server. For at gøre det skal du gå til din webbrowser og indsætte denne retning:

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

Hvis alt fungerer fint, bør du se en smuk Django skabelon.

Det handler om vores Django-installation.

Lad os nu gå i gang med at afsløre dette Django-projekt. Hvis du arbejder på et mere komplekst projekt, vil følgende metoder til at afsløre Django-apps også fungere.

Eksponering af en Django-app med Ngrok

Som jeg sagde før, er Ngrok et af de værktøjer, der vil lade os lande vores lokale server på internettet. Så først og fremmest Download Ngrok fra den officielle hjemmeside.

Når du har installeret det, lad os fortsætte med de nødvendige kommandoer.

Åbn en anden shell, behold den terminal, din Django-server kører i øjeblikket, og skriv.

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

More commands ....

Dette vil give dig et hurtigt kig på de tilgængelige kommandoer, som Ngrok tilbyder, og vil også give dig, at installationsprocessen gik korrekt.

Lad os køre for at oprette en URL, hvor folk kan få adgang til vores server.

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

Vi kører http-argumentet for at oprette en URL, der forbinder til port 8000 på vores lokale vært.

Her er resultatet, du sandsynligvis vil 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 der står, videresender Ngrok den mærkelige og grimme URL til vores lokale vært. Men magien sker, når du rammer browseren med den URL, Ngrok gav dig.

  7 Directory Software til at oprette din egen niche Listings hjemmeside

Ændring af settings.py

Wow, hvad er der lige sket 😱?

Det ser ud til, at Django kaster en fejl på grund af en DisallowedHost-indstilling. Hvis du tjekker den shell, du kører Django-serveren i, og den med Ngrok-sessionen, får du nogle fejlretningsmeddelelser.

# 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 fortæller os, skal vi tilføje det domæne, vi forbinder til ALLOWED_HOSTS-konfigurationsvariablen. Men vi har et problem, og det er, at domænenavnet er for stort og forvirrende.

Så lad os ændre Django-indstillingerne lidt for at løse denne fejl. Åbn filen settings.py, der findes i projektmappen.

# mytestingproject/settings.py

# Line 28

# Change from
ALLOWED_HOSTS = []

# To

ALLOWED_HOSTS = ["*"]

Hvis du kender nogle regex, kan du sætte pris på, at vi sætter et jokertegn, hvor alle værterne får lov.

Genindlæs nu siden, og se resultatet.

Alt fungerer perfekt nu! Og hvis du begynder at oprette applikationer til projektet og indstille URL’er og visninger, vil alt blive afspejlet på den offentlige URL.

Bemærk: Glem ikke at ændre ALLOWED_HOSTS i produktionen, da det ville producere et stort sikkerhedshul.

Konklusioner

I denne tutorial lærte du, hvordan du opretter en demo-URL til dit Django-projekt uden at skulle installere det.

Du øvede dig i, hvordan du starter et Django-projekt og arbejder med filen settings.py i Django.

Endelig lærte du, hvordan du bruger Ngrok, og hvordan du afslører enhver lokal server med den.

Udforsk derefter nogle af de populære Python-frameworks til at bygge API.