Jak udostępnić aplikację demonstracyjną Django w Internecie za pomocą Ngrok?

Nauczmy się, jak udostępnić aplikację demonstracyjną Django w Internecie. To bez wdrażania go w usłudze hostingowej.

Konfigurowanie pomostowego środowiska wdrożeniowego tylko po to, aby pokazać wersję demonstracyjną aplikacji Django, jest okropne. Co więcej, jeśli potrzebujesz adresu URL tylko na kilka minut, aby pokazać go klientowi lub członkowi zespołu.

Najlepszą opcją jest użycie narzędzia do ujawnienia obecnego serwera lokalnego. Dokładnie! Ludzie z całego świata będą mogli zobaczyć, co dzieje się na twoim hoście lokalnym.

W tym celu skorzystamy Ngrok. To narzędzie pozwoli nam tworzyć publiczne adresy URL na podstawie lokalnych portów naszych komputerów. Wszystko to dzięki magii Tunele.

Przed rozpoczęciem cały kod, który pracował nad tym samouczkiem, będzie dostępny w this Repozytorium Githuba.

Wymagania wstępne

Zaleca się znać wszystkie te podstawowe rzeczy. Chociaż jest prawdopodobne, że możesz postępować zgodnie z tym samouczkiem, bez dalszych problemów.

Tworzenie aplikacji Django

Aby stworzyć samouczek krok po kroku, wyjaśnię proces tworzenia projektu Django. Jeśli już go masz, możesz pominąć tę sekcję.

Wirtualne środowisko

Przede wszystkim stwórzmy tzw Środowisko wirtualne Pythona.

  • Więc otwórz terminal systemowy (lub powłokę).
  • Jeśli otwarcie terminala systemowego wydaje ci się zbyt skomplikowane, spróbuj użyć wbudowanego terminala edytora kodu.
  • Kliknij Terminal> Nowy terminal, a u dołu ekranu powinna pojawić się powłoka.
  • Wpisz następujące polecenie, aby utworzyć środowisko wirtualne za pomocą wbudowanego narzędzia Python.
python -m venv .venv

Zasadniczo oznacza to:

Hej Python, utwórz polecenie środowiska wirtualnego (-m venv) o nazwie .venv

  • Teraz, jeśli wyświetlisz listę plików z bieżącego katalogu, powinieneś zobaczyć folder .venv.
$ ls -l
drwxr-xr-x    - daniel 30 abr 23:12 .venv
# Other files ...
  • Aby aktywować środowisko wirtualne, wywołujemy polecenie source.
source .venv/bin/activate
  • Jeśli znajdziesz jakieś problemy, zapoznaj się z poniższą tabelą zaczerpniętą z oficjalnego dokumentu dokumentacja Pythona.

Platforma
Powłoka
Polecenie aktywacji środowiska wirtualnego
POSIX
bash/zsh
$ źródło /bin/aktywuj

ryba
$ source /bin/activate.fish

csh/tcsh
$ source /bin/aktywuj.csh

Rdzeń PowerShella
$ /bin/Activate.ps1
Okna
cmd.exe
C:> Scriptsactivate.bat

PowerShell
PS C:> ScriptsActivate.ps1

Teraz, jeśli uruchomiłeś poprawne polecenie, twoja powłoka powinna zawierać nazwę środowiska wirtualnego.

$ source .venv/bin/activate.fish

(.venv) $ 

Zainstaluj Django

Po aktywacji środowiska wirtualnego możesz teraz zainstalować dowolną wersję Django. W takim przypadku dobrym wyborem jest zainstalowanie najnowszej wersji.

$ 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

Teraz nadszedł czas, aby utworzyć podstawową strukturę projektu aplikacji Django, którą chcesz udostępnić.

$ django-admin startproject mytestingproject

Spowoduje to utworzenie projektu Django o nazwie mytestingproject. Po utworzeniu chcemy, abyś chciał wejść do katalogu, w którym znajduje się struktura projektu. Wejdźmy więc w to i uruchommy serwer Django.

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

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

Teraz, gdy jesteś w środku, uruchommy serwer Django, aby zobaczyć, jak to wygląda.

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

Zasadniczo Django mówi nam, że lokalny serwer działa na naszym lokalnym hoście (127.0.0.1 zawsze na niego wskazuje), na domyślnym porcie 8000.

Nie przejmuj się komunikatem o błędzie. Najpierw sprawdźmy, czy wszystko działa poprawnie na naszym lokalnym serwerze. Aby to zrobić, przejdź do przeglądarki internetowej i wklej ten kierunek:

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

Jeśli wszystko działa dobrze, powinieneś zobaczyć piękny szablon Django.

To wszystko o naszej instalacji Django.

Przejdźmy teraz do ujawnienia tego projektu Django. Jeśli pracujesz nad bardziej złożonym projektem, zadziałają również następujące metody udostępniania aplikacji Django.

Ujawnianie aplikacji Django za pomocą Ngrok

Jak powiedziałem wcześniej, Ngrok jest jednym z narzędzi, które pozwolą nam umieścić nasz lokalny serwer w Internecie. Więc przede wszystkim Pobierz Ngroka z oficjalnej strony internetowej.

Po zainstalowaniu przejdźmy do potrzebnych poleceń.

Otwórz inną powłokę, zachowując terminal, na którym aktualnie działa serwer Django, i wpisz.

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

More commands ....

To da ci szybkie spojrzenie na dostępne polecenia oferowane przez Ngrok, a także zapewni, że proces instalacji przebiegł poprawnie.

Aby utworzyć adres URL, pod którym ludzie mogą uzyskać dostęp do naszego serwera, zacznijmy działać.

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

Uruchamiamy argument http, aby utworzyć adres URL, który połączy się z portem 8000 naszego hosta lokalnego.

Oto wynik, który prawdopodobnie uzyskasz.

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       

Jak mówi, Ngrok przekazuje ten dziwny i brzydki adres URL do naszego hosta lokalnego. Ale dzieje się magia, kiedy trafisz do przeglądarki z adresem URL, który dał ci Ngrok.

Zmiana ustawień.py

Wow, co się właśnie stało 😱?

Wygląda na to, że Django zgłasza błąd z powodu ustawienia DisallowedHost. Jeśli sprawdzisz powłokę, w której uruchamiasz serwer Django, i tę z sesją Ngrok, otrzymasz kilka komunikatów debugowania.

# 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                           
                                              

Jak mówi nam Django, musimy dodać domenę, z którą się łączymy, do zmiennej konfiguracyjnej ALLOWED_HOSTS. Ale mamy problem, a mianowicie nazwa domeny jest zbyt duża i myląca.

Zmieńmy więc trochę ustawienia Django, aby rozwiązać ten błąd. Otwórz plik settings.py znajdujący się w folderze projektu.

# mytestingproject/settings.py

# Line 28

# Change from
ALLOWED_HOSTS = []

# To

ALLOWED_HOSTS = ["*"]

Jeśli znasz jakieś wyrażenie regularne, możesz docenić, że ustawiamy symbol wieloznaczny, w którym wszystkie hosty będą dozwolone.

Teraz ponownie załaduj witrynę i zobacz wynik.

Wszystko działa teraz idealnie! A jeśli zaczniesz tworzyć aplikacje dla projektu i ustawiać adresy URL i widoki, wszystko zostanie odzwierciedlone w tym publicznym adresie URL.

Uwaga: nie zapomnij zmienić ALLOWED_HOSTS w środowisku produkcyjnym, ponieważ spowodowałoby to ogromną lukę w zabezpieczeniach.

Wnioski

W tym samouczku nauczyłeś się, jak utworzyć demonstracyjny adres URL dla swojego projektu Django bez konieczności wdrażania go.

Ćwiczyłeś, jak rozpocząć projekt Django i pracować z plikiem settings.py w Django.

W końcu nauczyłeś się, jak używać Ngroka i jak udostępniać za jego pomocą dowolny lokalny serwer.

Następnie zapoznaj się z niektórymi popularnymi platformami języka Python do tworzenia interfejsów API.