Hvordan eksponere en Django Demo-app for Internett med Ngrok?

La oss lære hvordan du eksponerer en Django-demo-app for internett. Det, uten å distribuere det i en vertstjeneste.

Det er forferdelig å konfigurere et iscenesettelsesdistribusjonsmiljø bare for å vise en demo av Django-appen din. Enda mer, hvis du bare trenger en URL i et par minutter, for å vise den til en klient eller lagkamerat.

Det beste alternativet er å bruke et verktøy for å avsløre din nåværende lokale server. Nøyaktig! Folk over hele verden vil kunne se hva som skjer på din lokale vert.

Til det formålet vil vi bruke Ngrok. Dette verktøyet lar oss lage offentlige URL-er basert på de lokale portene på datamaskinene våre. Alt dette takket være magien til Tunneler.

Før du starter, vil all koden som ble jobbet med denne opplæringen være tilgjengelig i denne Github-depot.

Forhåndskrav

Det anbefales å vite alle disse grunnleggende tingene. Selv om det er sannsynlig at du kan følge med på denne opplæringen, uten ytterligere problemer.

Opprette en Django-app

For å lage en trinn-for-trinn-veiledning, vil jeg forklare prosessen med å lage et Django-prosjekt. Hvis du allerede har en, kan du hoppe over denne delen.

Virtuelt miljø

Først av alt, la oss lage en Python virtuelt miljø.

  • Så åpne opp systemterminalen (eller skallet).
  • Hvis du synes det er for komplisert å åpne systemterminalen, prøv å bruke den innebygde terminalen til koderedigeringsprogrammet.
  • Klikk på Terminal>Ny terminal, og et skall skal vises nederst på skjermen.
  • Skriv inn følgende kommando for å lage et virtuelt miljø, med det innebygde Python-verktøyet.
python -m venv .venv

Det betyr i utgangspunktet:

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

  • Nå hvis du viser filene i din nåværende katalog, bør du se en .venv-mappe.
$ ls -l
drwxr-xr-x    - daniel 30 abr 23:12 .venv
# Other files ...
  • For å aktivere det virtuelle miljøet kaller vi kildekommandoen.
source .venv/bin/activate
  • Hvis du finner noen problemer, vennligst se følgende tabell hentet fra tjenestemannen python dokumentasjon.
  Hvordan (og hvorfor) starte Microsoft Word fra ledeteksten

Plattform
Shell
Kommando for å aktivere virtuelt miljø
POSIX
bash/zsh
$ kilde /bin/activate

fisk
$ kilde /bin/activate.fish

csh/tcsh
$ kilde /bin/activate.csh

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

Kraftskall
PS C:> ScriptsActivate.ps1

Nå hvis du har kjørt riktig kommando, skal skallet ditt ha navnet på det virtuelle miljøet i seg.

$ source .venv/bin/activate.fish

(.venv) $ 

Installer Django

Etter å ha aktivert det virtuelle miljøet ditt, kan du nå installere hvilken Django-versjon du vil. I dette tilfellet er det et godt valg å 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

Nå er det på tide å lage den grunnleggende prosjektstrukturen til Django-appen du vil avsløre.

$ django-admin startproject mytestingproject

Dette vil lage et Django-prosjekt med navnet mytestingproject. Etter å ha opprettet det vil du gå inn i katalogen der prosjektstrukturen er plassert. Så la oss cd inn i den og kjøre Django-serveren.

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

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

Nå som du er inne, la oss kjøre Django-serveren for å se hvordan 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 utgangspunktet forteller Django oss at en lokal server kjører på vår lokale vert (127.0.0.1 peker alltid på den), på standardporten, 8000.

  Hvordan beregne tidsforskjell i Python

Ikke bekymre deg for feilmeldingen. Først, la oss sjekke at alt fungerer bra på vår lokale server. For å gjøre det, gå til nettleseren din og lim inn denne retningen:

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

Hvis alt fungerer bra, bør du se en vakker Django-mal.

Det handler om Django-installasjonen vår.

La oss nå begynne å avsløre dette Django-prosjektet. Hvis du jobber med et mer komplekst prosjekt, vil følgende metoder for å eksponere Django-apper også fungere.

Eksponering av en Django-app med Ngrok

Som jeg sa før, er Ngrok et av verktøyene som lar oss lande vår lokale server på internett. Så først og fremst Last ned Ngrok fra den offisielle nettsiden.

Når du har installert den, la oss fortsette med de nødvendige kommandoene.

Åpne et annet skall, behold terminalen som Django-serveren din kjører for øyeblikket, og skriv.

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

More commands ....

Dette vil gi deg en rask titt på de tilgjengelige kommandoene som Ngrok tilbyr, og vil også gi deg at installasjonsprosessen gikk riktig.

For å lage en URL der folk kan få tilgang til serveren vår, la oss kjøre.

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

Vi kjører http-argumentet for å lage en URL som vil koble til port 8000 til vår lokale vert.

Her er resultatet du sannsynligvis 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 det står, videresender Ngrok den rare og stygge URL-en til vår lokale vert. Men magien skjer når du trykker på nettleseren med nettadressen Ngrok ga deg.

  9 World of Warcraft (WOW) private servere å bli med

Endre settings.py

Wow, hva skjedde akkurat 😱?

Det ser ut til at Django gir en feil på grunn av en DisallowedHost-innstilling. Hvis du sjekker skallet du kjører Django-serveren i, og det med Ngrok-økten, får du noen feilsøkingsmeldinger.

# 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 forteller oss, må vi legge til domenet vi kobler til ALLOWED_HOSTS konfigurasjonsvariabelen. Men vi har et problem, og det er at domenenavnet er for stort og forvirrende.

Så la oss endre litt på Django-innstillingene for å løse denne feilen. Åpne filen settings.py som ligger i prosjektmappen.

# mytestingproject/settings.py

# Line 28

# Change from
ALLOWED_HOSTS = []

# To

ALLOWED_HOSTS = ["*"]

Hvis du kjenner noen regex, kan du sette pris på at vi setter et jokertegn, der alle vertene blir tillatt.

Last inn siden på nytt og se resultatet.

Alt fungerer perfekt nå! Og hvis du begynner å lage applikasjoner for prosjektet og angi URL-er og visninger, vil alt gjenspeiles på den offentlige URL-en.

Merk: Ikke glem å endre ALLOWED_HOSTS i produksjonen, siden det vil produsere et stort sikkerhetshull.

Konklusjoner

I denne opplæringen lærte du hvordan du oppretter en demo-URL for Django-prosjektet ditt uten å måtte distribuere det.

Du øvde på hvordan du starter et Django-prosjekt og jobber med filen settings.py i Django.

Til slutt lærte du hvordan du bruker Ngrok, og hvordan du avslører en lokal server med den.

Deretter kan du utforske noen av de populære Python-rammeverkene for å bygge API.