Привет всем! Сегодня мы познакомимся с темой, которая звучит как: Django — как пользоваться: начало 🙂
Собственно, рассказывать о том, что такое Django не буду (пришли вы сюда по поисковому запросу, а значит искали не просто так от скуки 🙂 ). Подробности как всегда в Wikipedia, или на сайте проекта.
Предыстория этой записи проста — нужно начинать работать с Django, но гора прочитанных статей и текстов ясности не добавила. Наткнулся на потрясающее видео, автор которых весьма просто и доходчиво объяснил азы работы с Django, но проблема — он рассматривал старую версию. Прошло время, версия обновилась, и бОльшая часть материала устарела, и с бОльшей частью аспектов работы с Django пришлось разбираться самостоятельно.
В этой записи я попробую поделиться мыслями по поводу установки, запуска, и создания простого двухстраничного сайта на локальной машине с помощью Django. Присоединяйтесь, будет весело 🙂
Итак, начнем с установки. Как всегда — установить библиотеку можно двумя путями либо через pip, либо через PyCharm.
Установка через pip (используется командная строка): pip install django
Установка через PyCharm:
File — Setting for project — Project interpreter — кнопочка Плюс (выделена красным):
и в открывшемся окошке вводим название библиотеки Django:
после чего устанавливаем библиотеку:
ВАЖНО: никакого ярлыка Django у вас на рабочем столе или в меню ПУСК не появится. Следуйте дальнейшим инструкциям 🙂 (данный комментарий написан под влиянием вопроса, который был получен с помощью Telegram от одного из читателей блога)
С установкой разобрались, начинаем творить 🙂
Самое интересное, что бОльшую часть работы в Django делается с помощью командной строки. А значит — открываем ее: cmd
Теперь переходим в папку, в которой будем разворачивать сайт. В моем случае это будет папка на диске С под названием DjangoProject. Переходим в нее:
Теперь нам нужно произвести начальную установку Django в эту папку. Для этого используем команду: django-admin startproject name_project, где name_project — имя вашего проекта (сайта). В моем случае это будет TestSite, а значит команда для начальной установки будет выглядеть следующим образом:
django-admin startproject TestSite
После отработки команды в нашей папке для проектов появится еще одна папка, которая будет иметь название вашего проекта:
внутри которой будет папка с именем проекта (внутри будут еще несколько файлов, о которых мы поговорим чуть позднее), и файл manage.py:
Именно из этой точки начинаем создание базы данных для сайта. Для этого используем команду python manage.py migrate, запускать которую нужно в папке, содержащей файл manage.py:
Как видно — итогом выполнения команды является файл с названием db.sqlite3, который является базой данных нашего сайта.
Основные подготовительные работы — закончены. Что бы убедиться в том, что установка прошла успешно запускаем встроенный в Django веб-сервер. Для этого используем команду python manage.py runserver:
после чего открываем в браузере адрес: 127.0.0.1:8000. Если вы видите нечто подобное:
- поздравляю, вы только что успешно установили Django, создали проект (каркас сайта), создали базу сайта 🙂 Кстати, вы наверняка заметили, что все запросы к сайту отображаются в командной строке, в которой вы ранее запустили веб-сервер 🙂 Но это так — лирическое отступление. Выключаем веб-сервер с помощью Ctrl+C, и…
Переходим к созданию страниц в нашем сайте. Как и договаривались — мы создадим две страницы:
— главная
— контакты
Для начала уточню, что с точки зрения логики Django — каждая страница сайта является отдельной аппликацией. Создаются они очень просто — с помощью команды python manage.py startapp name_page, где name_page — название вашей страницы:
python manage.py startapp page (Главная страница)
python manage.py startapp page2 (страница Контакты)
Как видно из скрина — у нас в папке проекта добавились еще две папки с именами наших страниц. Внутри каждой из папок — некоторое количество файлов, о которых мы поговорим чуть ниже.
Теперь нужно показать нашему Django-сайту, что у него добавились две страницы. Для этого в любом редакторе (я использую Notepad ++) открываем файл settings.py и находим раздел INSTALLED_APPS. По-умолчанию он выглядит приблизительно как-то так:
-
INSTALLED_APPS = [
-
'django.contrib.admin',
-
'django.contrib.auth',
-
'django.contrib.contenttypes',
-
'django.contrib.sessions',
-
'django.contrib.messages',
-
'django.contrib.staticfiles',
-
]
Добавляем в него пункты ‘page’ и ‘page2’, что бы файл принял такой вид (с помощью внесения этих записей мы говорим Django — у тебя добавились две страницы! Не забывай об этом!):
-
INSTALLED_APPS = [
-
'django.contrib.admin',
-
'django.contrib.auth',
-
'django.contrib.contenttypes',
-
'django.contrib.sessions',
-
'django.contrib.messages',
-
'django.contrib.staticfiles',
-
-
#MyWebPage
-
'page',
-
'page2',
-
]
Важно: не забываем о запятых 😉
Напоминание о новых страницах добавили, теперь корректируем файл с названием urls.py (этот файл фактически является адресной книгой для Django — заглядывая в эти записи движок понимает, какую ссылку по какому адресу искать. По умолчанию файл выглядит вот так:
-
"""TestSite URL Configuration
-
-
The `urlpatterns` list routes URLs to views. For more information please see:
-
https://docs.djangoproject.com/en/2.1/topics/http/urls/
-
Examples:
-
Function views
-
1. Add an import: from my_app import views
-
2. Add a URL to urlpatterns: path('', views.home, name='home')
-
Class-based views
-
1. Add an import: from other_app.views import Home
-
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
-
Including another URLconf
-
1. Import the include() function: from django.urls import include, path
-
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
-
"""
-
from django.contrib import admin
-
from django.urls import path
-
-
urlpatterns = [
-
path('admin/', admin.site.urls),
-
]
как видно — кроме страницы admin, доступной по адресу: http://127.0.0.1:8000/admin (не забывайте включить веб-сервер (если ранее вы его выключили), для этого используем команду: python manage.py runserver) — ничего в структуре сайта не имеется. Исправим эту ситуацию, и внесем следующие изменения в разделе urlpatterns и добавим библиотеку include, что бы файл принял следующий вид:
-
from django.contrib import admin
-
from django.urls import path, include
-
-
urlpatterns = [
-
path('admin/', admin.site.urls),
-
path('', include('page.urls')),
-
path('page2/', include('page2.urls')),
-
]
Что произошло? Мы только что объяснили, что в случае запроса адреса в стиле: НашСайт/ (тут мы пропустили название страницы, что бы она считалась главной) мы заглядываем в папку page, находим там файлик urls и выполняем инструкции внутри него. А если же запрос будет адресован на НашСайт/page2 — система должна найти папку Page2, файл urls и обработать инструкции внутри этого файла.
Теперь начинается самое интересное — в наших папках Page и Page2 создаем файлики с названием urls.py, внутри которых будет следующий текст:
-
from django.urls import path
-
from . import views
-
-
urlpatterns = [
-
path('', views.index, name='index'),
-
]
Если перевести на человеческий язык все, что мы только что добавили в файлы urls.py можно — все можно описать как: подключаем библиотеку Django и path, а потом начинаем показывать все, что указано в файле views.py
Для примера — модифицируем содержимое файла views.py в папке page, что бы он принял следующий вид:
-
from django.http import HttpResponse
-
-
def index(request):
-
return HttpResponse('<h2>Hello, world. You\'re at the page 1.</h2>')
И аналогично изменим файл views.py в папке page2, что бы он принял вид:
-
from django.http import HttpResponse
-
-
def index(request):
-
return HttpResponse('<h2>Hello, world. You\'re at the page 2.</h2>')
Сохраняем все изменения, и … если мы запустим веб-сервер (напоминаю: python manage.py runserver) и зайдем на адрес http://127.0.0.1:8000 — наш сайт уже будет показывать содержимое первой страницы (напоминаю, что согласно нашим настройкам в файле urls.py, расположенном в каталоге проекта страница с названием Page считается главной, открывающейся «по-умолчанию»):
а если мы изменим адрес на такой: http://127.0.0.1:8000/page2 — то мы увидим содержимое второй страницы:
На сегодня — все. Спасибо за вниманием 🙂 В следующей записи мы узнаем, как выводить на Django содержимое html-файла.
И да — в случае возникновения вопросов пишите в Telegram — иконка на него видна в правом нижнем углу 😉