Как да изложите демонстрационно приложение на Django в интернет с Ngrok?

Нека научим как да изложим демо приложение на Django в интернет. Това, без да го разполагате в хостинг услуга.

Конфигурирането на среда за етапно внедряване само за показване на демонстрация на вашето приложение Django е ужасно. Още повече, ако имате нужда от URL само за няколко минути, за да го покажете на клиент или съотборник.

Най-добрият вариант е да използвате инструмент за излагане на текущия ви локален сървър. Точно! Хората по целия свят ще могат да видят какво се случва на вашия локален хост.

За целта ще използваме Нгрок. Този инструмент ще ни позволи да създаваме публични URL адреси въз основа на локалните портове на нашите компютри. Всичко това благодарение на магията на Тунели.

Преди да започнете, целият код, работен по този урок, ще бъде наличен в това Github хранилище.

Предварителни изисквания

Препоръчително е да знаете всички тези основни неща. Въпреки че е вероятно да следвате този урок без допълнителни проблеми.

Създаване на Django приложение

За да създам урок стъпка по стъпка, ще обясня процеса на създаване на Django проект. Ако вече имате такъв, можете да пропуснете този раздел.

Виртуална среда

Първо, нека създадем a Python виртуална среда.

  • Така че отворете вашия системен терминал (или обвивка).
  • Ако ви се струва твърде сложно да отворите системния терминал, опитайте да използвате вградения терминал на редактора на кодове.
  • Кликнете върху Терминал>Нов терминал и в долната част на екрана трябва да се появи обвивка.
  • Въведете следната команда, за да създадете виртуална среда с вградения инструмент на Python.
python -m venv .venv

Това основно означава:

Хей Python, създайте команда за виртуална среда (-m venv) с името .venv

  • Сега, ако изброите файловете на текущата си директория, трябва да видите папка .venv.
$ ls -l
drwxr-xr-x    - daniel 30 abr 23:12 .venv
# Other files ...
  • За да активираме виртуалната среда, извикваме командата source.
source .venv/bin/activate
  • Ако откриете някакъв проблем, моля, вижте следната таблица, извлечена от официалния документация на python.
  Как да зареждате странично приложения на Chromebook

Платформа
Черупка
Команда за активиране на виртуална среда
POSIX
bash/zsh
$ източник /bin/активиране

риба
$ източник /bin/activate.fish

csh/tcsh
$ източник /bin/activate.csh

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

PowerShell
PS C:> ScriptsActivate.ps1

Сега, ако сте изпълнили правилната команда, вашата обвивка трябва да има името на виртуалната среда в нея.

$ source .venv/bin/activate.fish

(.venv) $ 

Инсталирайте Django

След като активирате вашата виртуална среда, сега можете да инсталирате каквато Django версия искате. В този случай е добър избор да инсталирате най-новата.

$ 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

Сега е време да създадете основната структура на проекта на приложението Django, което искате да изложите.

$ django-admin startproject mytestingproject

Това ще създаде проект на Django с името mytestingproject. След като го създадете, ние искаме да искате да влезете в директорията, където се намира структурата на проекта. Така че нека влезем в него и стартираме Django сървъра.

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

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

Сега, когато сте вътре, нека стартираме Django сървъра, за да видим как изглежда.

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

По принцип Django ни казва, че локален сървър работи на нашия localhost (127.0.0.1 винаги сочи към него), на порта по подразбиране, 8000.

  Как да записвате аудио на iPhone и iPad

Не се притеснявайте за съобщението за грешка. Първо, нека проверим дали всичко работи добре на нашия локален сървър. За да направите това, отидете на вашия уеб браузър и поставете тази посока:

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

Ако всичко работи добре, трябва да видите красив шаблон на Django.

Това е всичко за нашата инсталация на Django.

Сега нека се захванем с излагането на този Django проект. Ако работите върху по-сложен проект, следните методи за излагане на Django приложения също ще работят.

Излагане на Django приложение с Ngrok

Както казах преди, Ngrok е един от инструментите, които ще ни позволят да поставим нашия локален сървър в интернет. Така че на първо място Изтеглете Ngrok от официалния сайт.

След като го инсталирате, нека продължим с необходимите команди.

Отворете друга обвивка, като запазите терминала, който вашият Django сървър работи в момента, и въведете.

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

More commands ....

Това ще ви даде бърз поглед върху наличните команди, които Ngrok предлага, и също ще гарантира, че процесът на инсталиране е преминал правилно.

За да създадем URL адрес, където хората да имат достъп до нашия сървър, нека стартираме.

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

Изпълняваме http аргумента, за да създадем URL, който ще се свърже с порт 8000 на нашия localhost.

Ето резултата, който вероятно ще получите.

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       

Както се казва, Ngrok препраща този странен и грозен URL адрес към нашия локален хост. Но магията се случва, когато натиснете браузъра с URL адреса, който Ngrok ви е дал.

  C срещу C++: разлики и прилики

Промяна на settings.py

Уау, какво се случи току-що 😱?

Изглежда Django извежда грешка поради настройка DisallowedHost. Ако проверите обвивката, в която изпълнявате Django сървъра, и тази със сесията Ngrok, ще получите някои съобщения за отстраняване на грешки.

# 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                           
                                              

Както Django ни казва, трябва да добавим домейна, който свързваме, към конфигурационната променлива ALLOWED_HOSTS. Но имаме проблем и той е, че името на домейна е твърде голямо и объркващо.

Така че нека променим малко настройките на Django, за да разрешим тази грешка. Отворете файла settings.py, който се намира в папката на проекта.

# mytestingproject/settings.py

# Line 28

# Change from
ALLOWED_HOSTS = []

# To

ALLOWED_HOSTS = ["*"]

Ако знаете някакъв регулярен израз, можете да оцените, че задаваме заместващ знак, където ще бъдат разрешени всички хостове.

Сега презаредете сайта и вижте резултата.

Вече всичко работи перфектно! И ако започнете да създавате приложения за проекта и да задавате URL адреси и изгледи, всичко ще бъде отразено на този публичен URL адрес.

Забележка: Не забравяйте да промените ALLOWED_HOSTS в производството, тъй като това ще създаде огромна дупка в сигурността.

Изводи

В този урок научихте как да създадете демо URL за вашия проект Django, без да е необходимо да го внедрявате.

Практикувахте как да стартирате Django проект и да работите с файла settings.py в Django.

Най-накрая научихте как да използвате Ngrok и как да изложите всеки локален сървър с него.

След това разгледайте някои от популярните рамки на Python за изграждане на API.