Как открыть демонстрационное приложение Django в Интернете с помощью Ngrok?
Опубликовано: 2021-05-02Давайте узнаем, как разместить демонстрационное приложение Django в Интернете. Это без развертывания в службе хостинга.
Настраивать среду промежуточного развертывания только для демонстрации вашего приложения Django - это ужасно. Более того, если вам нужен URL-адрес всего на пару минут, чтобы показать его клиенту или товарищу по команде.
Лучшим вариантом является использование инструмента для открытия доступа к вашему текущему локальному серверу. Точно! Люди со всего мира смогут увидеть, что происходит на вашем локальном хосте.
Для этого воспользуемся Ngrok. Этот инструмент позволит нам создавать общедоступные URL-адреса на основе локальных портов наших компьютеров. И все это благодаря магии туннелей.
Перед запуском весь код, проработанный в этом руководстве, будет доступен в этом репозитории Github.
Предварительно требования
- Python 3.6+ установлен в вашей системе
- Небольшой опыт работы с интерфейсами командной строки
- Базовые знания Django
- Понимание скриптов Django-admin и manage.py
Рекомендуется знать все эти базовые вещи. Хотя, вероятно, вы сможете без проблем следовать этому руководству.
Создание приложения Django
Чтобы создать пошаговое руководство, я объясню процесс создания проекта Django. Если он у вас уже есть, вы можете пропустить этот раздел.
Виртуальная среда
Прежде всего, давайте создадим виртуальную среду 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 .venv/bin/activate- Если вы обнаружите какие-либо проблемы, обратитесь к следующей таблице, взятой из официальной документации Python.
| Платформа | Оболочка | Команда для активации виртуальной среды |
|---|---|---|
| POSIX | bash / zsh | $ source <venv> / bin / активировать |
| рыбы | $ source <venv> /bin/activate.fish | |
| csh / tcsh | $ source <venv> /bin/activate.csh | |
| Ядро PowerShell | $ <venv> /bin/Activate.ps1 | |
| Окна | cmd.exe | C: \> <venv> \ Scripts \ activate.bat |
| PowerShell | PS C: \> <venv> \ Scripts \ Activate.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 сообщает нам, что локальный сервер работает на нашем локальном хосте (127.0.0.1 всегда указывает на него) на порту по умолчанию 8000.

Не беспокойтесь о сообщении об ошибке. Во-первых, давайте проверим, все ли работает на нашем локальном сервере. Для этого перейдите в свой веб-браузер и вставьте это направление:
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 нашего локального хоста.
Вот результат, который вы, вероятно, получите.
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, к нашему localhost . Но волшебство случается, когда вы открываете браузер с URL-адресом, который вам дал Ngrok.

Изменение 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 в ALLOWED_HOSTS , так как это приведет к огромной дыре в безопасности.
Выводы
В этом руководстве вы узнали, как создать демонстрационный URL-адрес для вашего проекта Django без необходимости его развертывания.
Вы научились запускать проект Django и работать с файлом settings.py в Django.
Наконец, вы узнали, как использовать Ngrok и как открыть с его помощью любой локальный сервер.
Затем изучите некоторые из популярных фреймворков Python для создания API.
