Нека научим как да изложим демо приложение на 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.
Платформа
Черупка
Команда за активиране на виртуална среда
POSIX
bash/zsh
$ източник
риба
$ източник
csh/tcsh
$ източник
PowerShell Core
$
Windows
cmd.exe
C:>
PowerShell
PS C:>
Сега, ако сте изпълнили правилната команда, вашата обвивка трябва да има името на виртуалната среда в нея.
$ 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.
Не се притеснявайте за съобщението за грешка. Първо, нека проверим дали всичко работи добре на нашия локален сървър. За да направите това, отидете на вашия уеб браузър и поставете тази посока:
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 ви е дал.
Промяна на 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.