ZANIN блог
Контакты
Крути вниз
Фильтр по:
Категории
//Post title

Разработка сайта на Django - урок 01

06 Дек 2019Категория : Django

Разработка сайта на Django - урок 01

Решил поделиться своим опытом изучения фреймворка Django, и расписать полезные моменты, которые в статьях по обучению не попадаются, или попадаются, но надо прочитать штук 10-20 и выбрать из этого только полезные моменты. В статьях обычно стандартно делают пример блога с использованием тегов. Блог еще понятно, он часто нужен, да и его принцип разработки полезно понимать, но зачем теги, все равно без рекомендаций сеошника эти теги только мусорных страниц на сайте создадут, а вот категории и подкатегории, как бы не банально, создать новичку сложнее, а если еще необходимо создать древовидные категории, то есть не просто родительскую и дочернюю, а именно класс, чтобы можно было создать хоть 3, хоть 10 дочерних категорий в глубину, это тоже редко у кого попадается. И еще куча нюансов, которые опытные разработчики просто не описывают, так как это для них банальные моменты в разработке.

Вообщем самый первый момент, который не сразу доходит (хотя может это у меня так), это создание проекта и приложения. Застопорился в самом начале, после работы с PHP создание проекта и приложения не сразу дошло.

Команда:

django-admin startproject nameproject

По сути этой командой создается папка с именем, которое вы сами придумаете, она никак не влияет ни на название домена, ни на другие названия в вашем сайте, в ней просто будет содержаться структура ваших приложений. Также в этом моменте упоминается виртуальное окружение. Если образно, то можно провести аналогии: проект это дом, а виртуальное окружение, это комуникации (электричество, вода, газ, охрана и прочие дополнительные услуги). А вот теперь про пиложения.

Команда:

python manage.py startapp nameapp

Как объясняют, этой командой создается приложение. Но я вообще не сразу понял что это, так как еще работал с фреймворком Yii2, и там эти термины (проект и приложение употребляются немного по-другому). Приложение в Django проще сравнить с разделом сайта. Например, на сайте есть:

  • раздел блог - namesite.ru/blog
  • раздел каталога товаров - namesite.ru/catalog

Вот по сути эти разделы в Django и называются приложением, так как у каждого есть свой функционал, и они как модули (библиотеки) Python легко подключаются или отключаются от сайта. То есть, для начала вам надо будет продумать структуру своего сайта, а потом создавать приложения.

Еще обычно забывают описать в большей части статей, как добавить файл robots.txt, как настроить карту сайта (sitemap.xml), как сделать Description для страниц сайта. А это важные моменты для готового сайта, но их приходилось искать по кусочкам в разных статьях и книгах.

 

Начнем со структуры разрабатываемого сайта. Сделаем интернет-магазин и блог вместе. Использовать для разработки буду Python 3.7.4, Django 3.0, PyCharm, ну а вместо virtualenv буду использовать pipenv. Pipenv - это довольно новый инструмент для управления пакетами (или зависяимостями проекта). Тут в отличие от virtualenv (где есть файл requirements.txt, содержащий список всех установленных библиотек для проекта. Кстати, не всегда в проекте обнаруживается файл requirements.txt, так как разработчик по неопытности мог его не создать, а это прям не самая хорошая ситуация.), существует pipfile, в котором прописаны все зависимости проекта, а также pipfile.lock, который содержит версии и хэши зависимостей (его в ручную лучше не править).

(вдруг будет полезно: развернул на хостинге Django 3, перенес туда проект, который сделал на 2.2.7, и получил ошибку при загрузке библиотеки easy-thumbnails, оказалось в Django 3 не было файла six.py, не мог импортировать его из django.utils. Файл перенес из 2 версии, все заработало).

Структуру сделаем простой:

  • Главная страница
  • О компании
  • Каталог
  • Категория
  • Подкатегория
  • Товар
  • Корзина
  • Блог
  • Категория
  • Запись

 

 

Об установке Python можно прочитать много где, начнем с создания проекта в PyCharm. (Нужно чтобы уже был установлен Python.) IDE PyCharm в данном случае идеален для разработки (хотя для начала можно пробовать Atom или Eclipse).

 

Создание проекта Django в PyCharm - 1

Тут выбираем Location (папку, где будет храниться наш проект), потом выбираем New environment using - Pipenv (до этого я сам в основном использовал Virtualenv). А в Application name - можно вписать название приложения (catalog или blog, какой первый захотите), а можно научиться писать команды через терминал в PyCharm. Если впишите название первого приложения при создании всего проекта, то его не нужно будет подключать в файле settings.py, а если команду будете вводить вручную, то потом понадобится добавление приложения.

Создание проекта Django в PyCharm - 2

Далее начнем с создания главной страницы (ее кстати во многих статьях упускают, наверно она кажется довольно простой для создания, но на популярных PHP движках есть множетство подробных уроков по созданию сайта, а Django хоть и популярен, но почему-то освещен намного меньше).

Создание проекта Django в PyCharm - 3

Вводим комнаду  python manage.py startapp main

Создание проекта Django в PyCharm - 4

И мы получаем папку main с файлами. У меня они красного цвета, потому что у меня еще подключен Git в PyCharm, и еще не нажимал Commit

Создание проекта Django в PyCharm - 5

Если нажать Commit, то выбранный файл станет зеленым (если не сделать комментарий, а вообще серым цветом должно быть), как на скриншоте ниже

Создание проекта Django в PyCharm - 6

Теперь займемся настройками. В файле settings.py в папке нашего проекта необходимо внести несколько изменений. Папка проекта у меня названа booktime, как показано на скриншоте. Нам как раз понадобиться директива INSTALLED_APPS, в которую мы должны добавить свое созданное приложение main. 

Создание проекта Django в PyCharm - 7

Добавим строку 'main.apps.MainConfig' и не забываем запятую в конце списка. Запятая в данном случае - это стиль оформления в самом языке Python, связанный с конкатенацией строковых литералов. Поэтому лучше использовать запятую после каждого элемента в константе списка, словаря или множества, включая последний элемент. Также запятая требуется в конце одноэлементных кортежей, чтобы была возможность отличить кортеж от просто выражения в скобках.

Создание проекта Django в PyCharm - 8

Кстати, в части уроков показывают подключение своего приложеия по-другому: пишут просто название приложения. Но подключение таким способом 'main.apps.MainConfig' означает, что модуль настроек apps.py нашего приложения содержит конфигурационный класс MainConfig, который наследует класс AppConfig из модуля django.apps. И конфигурационный класс нашего приложения содержит набор атрибутов класса для некоторых настроек нашего приложения. Это имеет смысл показать чуть позже, когда в админке сайта уже будем добавлять какие-нибудь модели.

Базу данных пока не настраиваем, будем сначала использовать SQLite3. Перейдем чуть ниже к языковым настройкам, и изменим их на русский язык (тут у меня на скриншоте ошибка, нужно поставить просто 'ru', иначе при создании миграции будет ошибка).

Создание проекта Django в PyCharm - 9

Создание проекта Django в PyCharm - 10

Далее переходим ниже и добавляем настройки для работы со статическими файлами и медиафайлами. Прописываем следующее

STATIC_URL = '/static/'
STATIC_ROOT = 'static'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

Тут подробнее надо расписать, но логичнее разобрать эти настройки уже при переносе сайта на хостинг. 

Создание проекта Django в PyCharm - 10-1

Далее пишем команду python manage.py collectstatic и получаем папку static с собранными статическими файлами (пока что там файлы для админки, для наших будущих страниц еще не добавлены CSS и JS файлы, а также изображения для оформления шаблона).

Создание проекта Django в PyCharm - 11

В результате должно получиться такое.

Создание проекта Django в PyCharm - 12

После этого производим первую миграцию командой python manage.py migrate - она по сути производит добавление записей в базу данных. Первая миграция создает нужные таблицы в базе данных, далее, уже когда будем работать с моделями (в файлах models.py), то перед командой migrate будем делать команду python manage.py makemigrations, она проверяет и подготавливает миграцию и в случае ошибки укажет в какой модели допущена ошибка.

Создание проекта Django в PyCharm - 13

В результате получаем сообщения по списку миграций.

Создание проекта Django в PyCharm - 14

Далее надо создать пользователя для входа в админку сайта командой python manage.py createsuperuser

Создание проекта Django в PyCharm - 15

После этой команды появятся по очереди следующие строки: Имя пользователя, Адрес электронной почты, Пароль и Повторить пароль

Создание проекта Django в PyCharm - 16

Далее создаем 2 папки в папке templates, которая изначально создана в папке проекта самим PyCharm. Хотя конечно рекомендуется сначала во время разработки создавать в каждом приложении папку templates, и уже в ней создавать папку с именем самого приложения (в нашем бы случае получилось бы такое: main/templates/main/home.html). Но я создам так, потому что сайт небольшой, делаю один, никто другой не запутается, а потом на деплой уже все равно будет собираться все в одну папку.

Создание проекта Django в PyCharm - 17

А теперь приступим к созданию первой страницы. Так как верстка не основная тема сайта, то просто возьмем стили bootstrap, скачаем файлы и закинем их  нашу папку static, которую сначала создадим в папке (приложении) main. Bootstrap можно подключить и по-другому, но скачать файлы лучше, чтобы научиться подключать статические файлы к шаблону.

Создание проекта Django в PyCharm - 18

Создаем сначала один html-файл main.html в папке templates/main. Описывать, как создавать html я не стану, в интернете по html информации очень много, а вот чуть ниже обьясню, как подключать статические файлы к шаблону (статическими файлами в джанго называют CSS, JS и Изображения используемые для шаблона, а вот фото товаров, фото в статьях, это уже медиафайлы).

Создание проекта Django в PyCharm - 19

Далее переходим в файл urls.py нашего проекта (не приложения main, а всего проекта, там где лежит файл settings.py).

Создание проекта Django в PyCharm - 20

Прописываем следующее

path('admin/', admin.site.urls), - данная строка отвечает за обработку URL-адреса sitename.ru/admin и направляет на контроллер urls для приложения admin.
path('', TemplateView.as_view(template_name='main/main.html')), - данная строка обрабатывает адрес для главной страницы, то есть доменное имя, после которого ничего нет (sitename.ru), далее идет класс TemplateView, который рендерит наш шаблон напрямую, без перенаправления в контроллер нашего приложения main. Дальше в уроках мы подключим это по-другому, но такой способ иногда полезен, если вдруг в готовый проект надо быстро внедрить статическую страницу, например лендинг (посадочную страницу) под рекламу, всего на пару недель, поэтому делать специально приложение и подключать модели для такой страницы не особо нужно.

1 способ подключения шаблона с использованием класса TemplateView.

Создание проекта Django в PyCharm - 21

Но по сути, это просто небольшая уловка, чтобы быстро подключить шаблон, без написания функционала в файле views.py. Но так как у нас есть приложение main, которое и задумывалось для функционала главной страницы, то можно написать подключение шаблона другим способом (чуть ниже).

Теперь посмотрим, как подключить статические файлы к шаблону и посмотрим что получилось.

Создание проекта Django в PyCharm - 22

Запускаем в PyCharm наш проект, и теперь сайт можно будет открыть в браузере по адресу http://127.0.0.1:8000/

Можно конечно написать в терминале PyCharm команду на запуск сервера в ручную python manage.py runserver. И получаем страницу с Hello World

 

Создание проекта Django в PyCharm - 23

2 способ подключения шаблона с использованием класса TemplateView.

Заходим в приложение main, и в файле views.py этого приложения прописываем следующее:

from django.views.generic.base import TemplateView

class HomeView(TemplateView):
         template_name = 'main/main.html'

 

Далее возвращаемся в файл urls.py нашего проекта (не путать проект и приложение)

from django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView
from django.conf import settings
from django.conf.urls.static import static
from main.views import HomeView

urlpatterns = [
               path('admin/', admin.site.urls),
               path('about-us/', TemplateView.as_view(template_name='main/about.html')),
               path('', HomeView.as_view(), name='home-index'),
]
if settings.DEBUG:
               urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Тут мы строкой from main.views import HomeView делаем слудующее: из приложения main, из файла views.py импортируем класс HomeView. Класс HomeView это мой класс, с моим названием (вы можете назвать по-другому), которые наследует от класса TemplateView, а сам класс TemplateView наследуется от классов View, ContextMixin и TemplateResponseMixin. Если по функционалу, то класс TemplateView автоматически выполняет рендеринг шаблона и отправку ответа (response) при получении запроса (request) по методу GET.

Далее импортированный в urls.py класс HomeView мы подключаем методом as_view(), после этого прописываем имя name='home-index'. Это имя затем можем использовать в шаблоне, в качестве имении url (имени маршрута) на главную страницу. На скриншотах показываю, что должно в итоге получиться

 

Создание проекта Django в PyCharm - 24

Создание проекта Django в PyCharm - 25

Создание проекта Django в PyCharm - 26

3 способ подключения наверно один из самых простых для начала. В нашем приложении main необходимо создать файл urls.py, в нем пока ничего не пишем. Заходим в файл views.py нашего приложения, и пока что комментируем все, что у нас до этого было там написано.

Создание проекта Django в PyCharm - 27

И напишем строки 

from django.shortcuts import render

def homeindex(request):
       return render(request, 'main/main.html')

Если объяснять простыми словами, то мы создали функцию homeindex (название любое, лишь бы было понятно, для чего эта функция), эта функция принимает запрос request, а если запрос получен, то она выполняет то, что мы в ней прописали. В данном случае, она возвращает результат на запрос: return render, то есть при получении запроса, происходит рендеринг нашего шаблона, который указан. Теперь надо импортировать в файл urls.py нашего приложения main эту функцию из views.py.

Создание проекта Django в PyCharm - 28

Тут мы подключаем нашу функцию немного не так, как если бы подключали класс, надо просто не путать, что подключаем. Далее пишем снова имя маршрута, чтобы использовать это имя потом для ссылок в шаблоне. Смысл имени в том, что если мы будем писать просто ссылку в шаблоне в таком виде: /catalog/ или /contact/, то в случае каких либо изменений нам придется в ручную менять все эти ссылки в шаблонах, а при именованом маршруте мы просто можем изменить адрес в urls.py и все.

Также у нас прописана строка app_name = 'main' - это имя мы будем использовать в urls.py нашего проекта (не приложения, а проекта). На скриншоте показано, что мы инклудим из нашего приложения main файл urls.py с префиксом интернет-адреса.

Создание проекта Django в PyCharm - 29

Префикс интернет-адреса и имя маршрута используются в шаблоне следующим образом.

Создание проекта Django в PyCharm - 30

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

  • 687

Готовы заказать проект?

© ZANIN 2019 / All rights reserved.
Контакты
Close