Привет всем! Сегодня мы познакомимся с темой, которая звучит как: 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 — иконка на него видна в правом нижнем углу 😉