Городской портал города Оленегорск


Как добавить карты в проекты Django Web App с помощью Mapbox

  1. Наши инструменты
  2. Установка зависимостей
  3. Строим наш проект Джанго
  4. Добавление карт с помощью Mapbox
  5. Настройка карты
  6. Что дальше?

Создание интерактивных карт в Джанго веб-приложение может показаться пугающим, если вы не знаете, с чего начать, но это проще, чем вы думаете, если вы используете инструмент разработчика, такой как MapBox ,

В этой статье мы создадим простой проект Django с одним приложением и добавим интерактивную карту, подобную той, которую вы видите ниже, на веб-страницу, которую Django отображает с помощью Карты Mapbox API ,

Наши инструменты

Python 3 Настоятельно рекомендуется для этого руководства, поскольку Python 2 больше не будет поддерживаться с 1 января 2020 года. Python 3.6.5 чтобы был использован для создания этого урока. Мы также будем использовать следующее зависимости приложения построить наше приложение:

Если вам нужна помощь в получении вашего среда разработки настроен перед запуском этого кода, посмотрите на это руководство по настройке Python 3 и Django в Ubuntu 16.04 LTS ,

Код этого блога также доступен на GitHub в каталог maps-django-mapbox репозитория blog-code-examples , Возьмите код и используйте его для своих собственных целей, поскольку он предоставляется по лицензии MIT с открытым исходным кодом.

Установка зависимостей

Запустите проект Django, создав новый виртуальная среда используя следующую команду. Я рекомендую использовать отдельный каталог, например ~ / venvs / (тильда - это ярлык для домашнего каталога вашего пользователя), чтобы вы всегда знали, где находятся все ваши virtualenvs.

python3 -m venv djangomaps

Активируйте virtualenv с помощью сценария активации оболочки:

Исходный djangomaps / bin / activ

Командная строка изменится после активации virtualenv:

Помните, что вы должны активировать свой virtualenv в каждом новом окне терминала, где вы хотите использовать зависимости в virtualenv.

Теперь мы можем установить Джанго пакет в активированную, но в остальном пустую virtualenv.

pip install django == 2.0.5

Найдите следующий вывод, чтобы подтвердить правильность установки Django из PyPI.

Загрузка https://files.pythonhosted.org/packages/23/91/2245462e57798e9251de87c88b2b8f996d10ddcb68206a8a020561ef7bd3/Django-2.0.5-py3-none-any.whl (7.1MB) 100% | ████████ █████████████████████ | 7.1MB 231kB / s Сбор pytz (из django == 2.0.5) с использованием кэшированного https://files.pythonhosted.org/packages/dc/83/15f7833b70d3e067ca91467ca245bae0f6fe56ddc7451aa0dc5606b120f2wh-p2 .pyp. собраны пакеты: pytz, django Успешно установлен django-2.0.5 pytz-2018.4

Зависимость Django готова к работе, и теперь мы можем создать наш проект и добавить несколько удивительных карт в приложение.

Строим наш проект Джанго

Мы можем использовать Джанго django-admin.py инструмент для создания стандартной структуры кода, чтобы начать наш проект. Перейдите в каталог, где вы разрабатываете свои приложения. Например, я обычно использую / Users / matt / devel / py /. Затем выполните следующую команду, чтобы запустить проект Django с именем djmaps:

django-admin.py startproject djmaps

Команда django-admin.py создаст каталог с именем djmaps вместе с несколькими подкаталогами, с которыми вам следует ознакомиться, если вы ранее работали с Django.

Поменяйте каталоги в новый проект.

Создайте новое приложение Django в djmaps.

python manage.py startapp maps

Django создаст новую папку с именем maps для проекта. Мы должны обновить URL-адреса, чтобы приложение было доступно, прежде чем мы напишем наш код views.py.

Откройте djmaps / djmaps / urls.py. Добавьте выделенные строки, чтобы URL-адреса проверяли приложение карт на соответствие URL-адресов.

"" "(комментарии)" "" из django.conf.urls импорт включает в себя из django.contrib администратор импорта из django.urls путь импорта urlpatterns = [путь ('', include ('maps.urls')), путь (' admin / ', admin. site. urls),]

Сохраните djmaps / djmaps / urls.py и откройте djmaps / djmaps / settings.py. Добавьте приложение maps в settings.py, вставив выделенную строку:

# Определение приложения INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib .staticfiles ',' maps ',]

Убедитесь, что вы изменили значения по умолчанию DEBUG и SECRET_KEY в settings.py, прежде чем развертывать любой код в рабочей среде. Защитите свое приложение должным образом с информацией из Django контрольный список развертывания производства чтобы вы не добавляли свой проект в список взломанных приложений в сети.

Сохраните и закройте файл settings.py.

Затем перейдите в каталог djmaps / maps. Создайте новый файл с именем urls.py, который будет содержать маршруты для приложения карт.

Добавьте эти строки в пустой файл djmaps / maps / urls.py.

из django.conf.urls импортировать URL из. импортировать представления urlpatterns = [url (r '', views. default_map, name = "default"),]

Сохраните djmaps / maps / urls.py и откройте djmaps / maps / views.py и добавьте следующие две выделенные строки. Вы можете оставить шаблонный комментарий или удалить его.

из django.shortcuts import render def default_map (request): вернуть render (request, 'default.html', {})

Затем создайте каталог для ваших файлов шаблонов с именем templates в каталоге приложения djmaps / maps.

Создайте новый файл с именем default.html в djmaps / maps / templates, который содержит следующее Джанго шаблон разметки.

<! DOCTYPE html> <html> <head> <title> Интерактивные карты для веб-приложений Django </ title> </ head> <body> <h1> Карта времени! </ h1> </ body> </ html>

Мы можем проверить эту статическую страницу, чтобы убедиться, что весь наш код корректен, а затем мы будем использовать Mapbox для встраивания настраиваемой карты в страницу. Перейдите в базовый каталог вашего проекта Django, где находится файл manage.py. Выполните сервер разработки с помощью следующей команды:

python manage.py runserver

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

Выполнение системных проверок ... Системная проверка не выявила никаких проблем (0 отключено). У вас есть 14 не примененных миграций. Ваш проект может не работать должным образом, пока вы не примените миграции для приложений: admin, auth, contenttypes, session. Запустите «python manage.py migrate», чтобы применить их. 21 мая 2018 - 12:47:54 Django версии 2.0.5 с использованием настроек 'djmaps.settings' Запуск сервера разработки по адресу http://127.0.0.1:8000/ Завершите работу сервера с помощью CONTROL-C.

Откройте веб-браузер и перейдите на localhost: 8000.

Откройте веб-браузер и перейдите на localhost: 8000

Наш код работает, но мальчик - это простая HTML-страница. Давайте сделаем волшебство, добавив JavaScript в шаблон для генерации карт.

Добавление карт с помощью Mapbox

Голова к mapbox.com в вашем веб-браузере для доступа к домашней странице Mapbox.

Нажмите «Начать» или «Начать бесплатно» (текст зависит от того, есть ли у вас учетная запись в Mapbox).

Зарегистрируйте новую бесплатную учетную запись разработчика или войдите в существующую учетную запись.

Нажмите «JS Web» вариант.

Выберите «Использовать Mapbox CDN» для способа установки. На следующих двух экранах показан код, который вы должны добавить в файл шаблона djmaps / maps / templates / default.html. Код будет выглядеть следующим образом, но вам необходимо заменить строку mapboxgl.accessToken собственным токеном доступа.

<! DOCTYPE html> <html> <head> <title> Интерактивные карты для веб-приложений Django </ title> <script src = 'https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox -gl.js '> </ script> <link href =' https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.css 'rel =' stylesheet '/> </ head> <body> <h1> Карта времени! </ h1> <div id = 'map' width = "100%" style = 'height: 400px'> </ div> <script> mapboxgl. accessToken = {{mapbox_access_token}}; var map = new mapboxgl. Карта ({контейнер: 'карта', стиль: 'mapbox: // styles / mapbox /reets-v10'}); </ script> </ body> </ html>

Снова откройте djmaps / maps / views.py, чтобы обновить параметры, переданные в шаблон Django.

из django.shortcuts import render def default_map (request): # TODO: переместить этот токен в настройки Django из переменной среды #, найденной в настройках учетной записи Mapbox, и получить инструкции по началу работы # см. https://www.mapbox.com/account/ в разделе «Маркеры доступа» mapbox_access_token = 'pk.my_mapbox_access_token' возвратный рендер (запрос, default.html, {'mapbox_access_token': mapbox_access_token})

Токен доступа к Mapbox должен действительно храниться в файле настроек Django, поэтому мы оставили примечание «TODO», чтобы обработать его в качестве будущего шага.

Теперь мы можем попробовать нашу веб-страницу снова. Обновите localhost: 8000 в вашем веб-браузере.

Обновите localhost: 8000 в вашем веб-браузере

Милая, у нас есть живая интерактивная карта! Это довольно странная мысль о том, как уменьшить масштаб изображения всего мира. Время настроить карту, используя несколько параметров JavaScript.

Настройка карты

Мы можем изменить карту, изменив параметры стиля, уровня масштабирования, местоположения и многих других атрибутов.

Мы начнем с изменения местоположения, в котором находится первоначальная карта, а также уровня масштабирования.

Снова откройте djmaps / maps / templates / default.html и измените первые выделенные строки, чтобы они заканчивались запятыми, и добавьте две новые выделенные строки, показанные ниже.

<! DOCTYPE html> <html> <head> <title> Интерактивные карты для веб-приложений Django </ title> <script src = 'https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox -gl.js '> </ script> <link href =' https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.css 'rel =' stylesheet '/> </ head> <body> <h1> Карта времени! </ h1> <div id = 'map' width = "100%" style = 'height: 400px'> </ div> <script> mapboxgl. accessToken = {{mapbox_access_token}}; var map = new mapboxgl. Карта ({контейнер: 'карта', стиль: 'mapbox: // styles / mapbox / roads-v10', центр: [- 77.03, 38.91], масштаб: 9}); </ script> </ body> </ html>

Первое число, -77.03, для центрального массива - это долгота, а второе число, 38.91, - это широта. Уровень масштабирования 9 намного ближе к городу, чем по умолчанию, которым был весь мир на уровне 0. Все значения настройки перечислены в Документация по Mapbox GL JS API ,

Теперь обновите страницу по адресу localhost: 8000, чтобы перезагрузить нашу карту.

Теперь обновите страницу по адресу localhost: 8000, чтобы перезагрузить нашу карту

Круто, теперь мы сфокусированы на Вашингтоне, округ Колумбия, и все еще можем перемещаться, чтобы увидеть больше карты. Давайте сделаем пару других изменений в нашей карте, прежде чем закончить.

Снова вернитесь в djmaps / maps / templates / default.html и измените выделенную строку для ключа стиля на значение mapbox: // styles / mapbox / satellite-street-v10. Это изменит вид от абстрактного стиля карты до данных спутникового изображения. Обновите масштаб: 9, чтобы в конце строки была запятая, и добавьте подшипник: 180 в качестве последней пары ключ-значение в конфигурации.

<! DOCTYPE html> <html> <head> <title> Интерактивные карты для веб-приложений Django </ title> <script src = 'https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox -gl.js '> </ script> <link href =' https://api.mapbox.com/mapbox-gl-js/v0.44.2/mapbox-gl.css 'rel =' stylesheet '/> </ head> <body> <h1> Карта времени! </ h1> <div id = 'map' width = "100%" style = 'height: 400px'> </ div> <script> mapboxgl. accessToken = {{mapbox_access_token}}; var map = new mapboxgl. Карта ({контейнер: 'карта', стиль: 'mapbox: // styles / mapbox / satellite-roads-v10', центр: [- 77.03, 38.91], масштаб: 9, подшипник: 180}); </ script> </ body> </ html>

Сохраните шаблон и обновите localhost: 8000.

Карта теперь дает вид со спутника с наложением улиц, но она также ... "вверх ногами"! По крайней мере, карта перевернута по сравнению с тем, как нарисовано большинство карт, благодаря значению подшипника: 180, которое изменило поворот этой карты.

Неплохо для нескольких строк JavaScript в нашем приложении Django. Не забудьте проверить Документация по Mapbox GL JS API для исчерпывающего списка параметров, которые вы можете настроить.

Что дальше?

Мы только что узнали, как добавлять интерактивные карты на основе JavaScript в наши Джанго веб-приложения, а также изменить внешний вид карт. Затем попробуйте некоторые другие API, предоставляемые Mapbox, включая:

Вопросы? Дайте мне знать через билет на выпуск GitHub в репозитории полного стека Python , в Твиттере @fullstackpython или же @mattmakai ,

Видите ли вы опечатку, проблему синтаксиса или формулировку, которая сбивает с толку в этом блоге? вилка источник этой страницы на GitHub и отправить запрос на получение с исправлением или подать заявку на GitHub ,

Что дальше?

Новости

Рыбалка в Териберке
На марте туда пожалуй под закрытие дороги, становилось снять номер в мотельчике на Очередном шоссе. Галопом вылетели из строя, успели как раз к слову движения колонны. С уловкой в общем било, один-единственный

Футболка рыбалка
Главная   /  Мой блог ← Футболки логотипом armin van buuren   |  В начало  |  Футболка the pirate bay → Качественные футболка рыбалка |

Клевое место рыбалка
Мы предлагаем рыбалку и отдых в уникальном месте Москвы, национальном парке "Лосиный остров"! Нижний пруд Очищенная береговая территория идеально подходит для ловли на удочку, штекер и удобного

Светлые горы рыбалка
«Светлые горы» в Подмосковье - одно из мест, где москвичи, да и гости, могут провести время в свое удовольствие и одновременно с пользой. База расположена неподалеку от столицы. Не нужно далеко

Рыбалка на пахре
По моим наблюдениям, как двадцать лет назад, так и сейчас Пахра вполне способна одарить рыболова хорошим уловом плотвы и подлещика, а если особо повезет, то и знаменитым пахринским карасем, который тянет

Рыбалка в савельево
Ленинградское шоссе проходит по живописным местам. К ним относятся водные просторы в Карелии, живописные заводи в Завидово. Однако поехать туда, чтобы порыбачить, может не каждый. Это связано со значительной

Рыбалка на селигере
На озере Селигер рыбачить будет интересно всем, кто не любит халявы. То есть любящих платные пруды просим пройти мимо. Так как здесь ловля рыбы зависит от времени года, погоды, времени суток, умения ловить

Рыбалка в карелии
Республики Карелия находится в северо-западной части страны, климат довольно мягкий, с большим количеством осадков. Характерно, что зима вступает в свои права рано, она, как правило, снежная, но без сильных

Русская рыбалка 3
Игра русская рыбалка 3 - это последняя официальная версия игры, в которой есть одиночный режим. За эту игру не надо платить никаких денег – она абсолютно бесплатна, просто скачиваете ее себе на компьютер

Триал русская рыбалка
триал русская рыбалка Уважаемые рыбаки и гости, фото отчёт за 31.08.2017 года, было произведено зарыбление водоема карпом, общим весом 700 кг, навеска 0.7-1 кг. Всем успехов.

                                                                                                                                               ОЛЕНЕГОРСК 2010 - 2014                                                                                                 

создание сайта - Старт Икс