python manage.py runserver

Django — как пользоваться: начало

Привет всем! Сегодня мы познакомимся с темой, которая звучит как: Django — как пользоваться: начало 🙂

Собственно, рассказывать о том, что такое Django не буду (пришли вы сюда по поисковому запросу, а значит искали не просто так от скуки 🙂 ). Подробности как всегда в Wikipedia, или на сайте проекта.

Предыстория этой записи проста — нужно начинать работать с Django, но гора прочитанных статей и текстов ясности не добавила. Наткнулся на потрясающее видео, автор которых весьма просто и доходчиво объяснил азы работы с Django, но проблема — он рассматривал старую версию. Прошло время, версия обновилась, и бОльшая часть материала устарела, и с бОльшей частью аспектов работы с Django пришлось разбираться самостоятельно.

В этой записи я попробую поделиться мыслями по поводу установки, запуска, и создания простого двухстраничного сайта на локальной машине с помощью Django. Присоединяйтесь, будет весело 🙂

Итак, начнем с установки. Как всегда — установить библиотеку можно двумя путями либо через pip, либо через PyCharm.
Установка через pip (используется командная строка): pip install django
Установка через PyCharm:
FileSetting for projectProject interpreter — кнопочка Плюс (выделена красным):
установка Django в PyCharm

и в открывшемся окошке вводим название библиотеки Django:
установка Django в PyCharm - 2

после чего устанавливаем библиотеку:
установка Django в PyCharm - 3

С установкой разобрались, начинаем творить 🙂
Самое интересное, что бОльшую часть работы в Django делается с помощью командной строки. А значит — открываем ее: cmd

Теперь переходим в папку, в которой будем разворачивать сайт. В моем случае это будет папка на диске С под названием DjangoProject. Переходим в нее:
Запуск Django в Windows

Теперь нам нужно произвести начальную установку Django в эту папку. Для этого используем команду: django-admin startproject name_project, где name_project — имя вашего проекта (сайта). В моем случае это будет TestSite, а значит команда для начальной установки будет выглядеть следующим образом:
django-admin startproject TestSite
django-admin startproject name_project

После отработки команды в нашей папке для проектов появится еще одна папка, которая будет иметь название вашего проекта:
Django новый проект

внутри которой будет папка с именем проекта (внутри будут еще несколько файлов, о которых мы поговорим чуть позднее), и файл manage.py:
Django новый проект-2

Именно из этой точки начинаем создание базы данных для сайта. Для этого используем команду python manage.py migrate, запускать которую нужно в папке, содержащей файл manage.py:
python manage.py migrate

Как видно — итогом выполнения команды является файл с названием db.sqlite3, который является базой данных нашего сайта.

Основные подготовительные работы — закончены. Что бы убедиться в том, что установка прошла успешно запускаем встроенный в Django веб-сервер. Для этого используем команду python manage.py runserver:
python manage.py runserver

после чего открываем в браузере адрес: 127.0.0.1:8000. Если вы видите нечто подобное:
python manage.py runserver

— поздравляю, вы только что успешно установили Django, создали проект (каркас сайта), создали базу сайта 🙂 Кстати, вы наверняка заметили, что все запросы к сайту отображаются в командной строке, в которой вы ранее запустили веб-сервер 🙂 Но это так — лирическое отступление. Выключаем веб-сервер с помощью Ctrl+C, и…

Переходим к созданию страниц в нашем сайте. Как и договаривались — мы создадим две страницы:
— главная
— контакты

Для начала уточню, что с точки зрения логики Django — каждая страница сайта является отдельной аппликацией. Создаются они очень просто — с помощью команды python manage.py startapp name_page, где name_page — название вашей страницы:
python manage.py startapp page (Главная страница)
python manage.py startapp page2 (страница Контакты)
python manage.py startapp

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

Теперь нужно показать нашему Django-сайту, что у него добавились две страницы. Для этого в любом редакторе (я использую Notepad ++) открываем файл settings.py и находим раздел INSTALLED_APPS. По-умолчанию он выглядит приблизительно как-то так:

  1. INSTALLED_APPS = [
  2.     'django.contrib.admin',
  3.     'django.contrib.auth',
  4.     'django.contrib.contenttypes',
  5.     'django.contrib.sessions',
  6.     'django.contrib.messages',
  7.     'django.contrib.staticfiles',
  8. ]

Добавляем в него пункты ‘page’ и ‘page2’, что бы файл принял такой вид (с помощью внесения этих записей мы говорим Django — у тебя добавились две страницы! Не забывай об этом!):

  1. INSTALLED_APPS = [
  2.     'django.contrib.admin',
  3.     'django.contrib.auth',
  4.     'django.contrib.contenttypes',
  5.     'django.contrib.sessions',
  6.     'django.contrib.messages',
  7.     'django.contrib.staticfiles',
  8.  
  9.     #MyWebPage
  10.     'page',
  11.     'page2',
  12. ]

Важно: не забываем о запятых 😉

Напоминание о новых страницах добавили, теперь корректируем файл с названием urls.py (этот файл фактически является адресной книгой для Django — заглядывая в эти записи движок понимает, какую ссылку по какому адресу искать. По умолчанию файл выглядит вот так:

  1. """TestSite URL Configuration
  2.  
  3. The `urlpatterns` list routes URLs to views. For more information please see:
  4.     https://docs.djangoproject.com/en/2.1/topics/http/urls/
  5. Examples:
  6. Function views
  7.     1. Add an import:  from my_app import views
  8.     2. Add a URL to urlpatterns:  path('', views.home, name='home')
  9. Class-based views
  10.     1. Add an import:  from other_app.views import Home
  11.     2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
  12. Including another URLconf
  13.     1. Import the include() function: from django.urls import include, path
  14.     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
  15. """
  16. from django.contrib import admin
  17. from django.urls import path
  18.  
  19. urlpatterns = [
  20.     path('admin/', admin.site.urls),
  21. ]

как видно — кроме страницы admin, доступной по адресу: http://127.0.0.1:8000/admin (не забывайте включить веб-сервер (если ранее вы его выключили), для этого используем команду: python manage.py runserver) — ничего в структуре сайта не имеется. Исправим эту ситуацию, и внесем следующие изменения в разделе urlpatterns и добавим библиотеку include, что бы файл принял следующий вид:

  1. from django.contrib import admin
  2. from django.urls import path, include
  3.  
  4. urlpatterns = [
  5.     path('admin/', admin.site.urls),
  6.     path('', include('page.urls')),
  7.     path('page2/', include('page2.urls')),
  8. ]

Что произошло? Мы только что объяснили, что в случае запроса адреса в стиле: НашСайт/ (тут мы пропустили название страницы, что бы она считалась главной) мы заглядываем в папку page, находим там файлик urls и выполняем инструкции внутри него. А если же запрос будет адресован на НашСайт/page2 — система должна найти папку Page2, файл urls и обработать инструкции внутри этого файла.

Теперь начинается самое интересное — в наших папках Page и Page2 создаем файлики с названием urls.py, внутри которых будет следующий текст:

  1. from django.urls import path
  2. from . import views
  3.  
  4. urlpatterns = [
  5.     path('', views.index, name='index'),
  6. ]

Если перевести на человеческий язык все, что мы только что добавили в файлы urls.py можно — все можно описать как: подключаем библиотеку Django и path, а потом начинаем показывать все, что указано в файле views.py

Для примера — модифицируем содержимое файла views.py в папке page, что бы он принял следующий вид:

  1. from django.http import HttpResponse
  2.  
  3. def index(request):
  4.     return HttpResponse('<h2>Hello, world. You\'re at the page 1.</h2>')

И аналогично изменим файл views.py в папке page2, что бы он принял вид:

  1. from django.http import HttpResponse
  2.  
  3. def index(request):
  4.     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 считается главной, открывающейся «по-умолчанию»):
Django page 1

а если мы изменим адрес на такой: http://127.0.0.1:8000/page2 — то мы увидим содержимое второй страницы:
Django page 2

На сегодня — все. Спасибо за вниманием 🙂 В следующей записи мы узнаем, как выводить на Django содержимое html-файла.

И да — в случае возникновения вопросов пишите в Telegram — иконка на него видна в правом нижнем углу 😉