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.
Innehållsförteckning
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
fisk
$ source
csh/tcsh
$ source
PowerShell Core
$
Windows
cmd.exe
C:>
PowerShell
PS C:>
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.