Django 01 - Hexlet Flashcards
Что представляет собой manage.py?
Скрипт с командами для управления проектом
Минимум для создания страницы
Маршрут. Определяет адрес конкретной страницы или набора страниц на сайте. Маршрут связывает эти адреса с конкретным обработчиком, который будет вызван при запросе этих страниц
Контроллер. Слой кода, в котором расположены обработчики страниц сайта. Они анализируют запрос и формируют ответ, который фреймворк отправляет пользователю
Шаблон. Специальный файл, который используется, чтобы формировать HTTP-ответ
Маршрут
хранятся в файле urls.py.
переменная urlpatterns — список маршрутов сайта.
Функция path(route, view)
Функция path(route, view)
Первым параметром она принимает адрес запрашиваемой страницы или паттерн, который описывает группу страниц.
Вторым параметром передается обработчик или встраиваемый urls.py другого приложения. Обработчики запросов в Django называют view — на жаргоне джангистов «вьюха».
Контроллер, функция render
Она формирует HTML на основе указанного шаблона и использует при рендеринге (составлении страницы) данные из словаря context.
Как соотносятся маршруты и конкретные адреса?
Один маршрут – много адресов
Что содержит шаблон?
Логику вывода и HTML
Как правильно определить маршрут /users
path('users/', views.users)
Что делает settings.INSTALLED_APPS
Этот список содержит перечень всех Django applications, которые подключены к текущему проекту. Встроенный загрузчик шаблонов (Template Loader) ищет их в поддиректориях с именем templates во всех подключенных приложениях.
Создание приложения
django-admin startapp <app_name>
Регистрация созданного приложения в apps.py
# hexlet_django_blog/article/apps.py class ArticleConfig(AppConfig): ... name = 'hexlet_django_blog.article' # <- изменяем эту строчку
Обязательно ли в приложении создавать urls.py?
По умолчанию в приложении не генерируется модуль urls.py. Дело в том, что приложение может и не быть настолько большим, чтобы потребовался отдельный набор правил маршрутизации. Такие небольшие приложения прописывают в urls.py уровнем выше.
Как соединить urls.py приложения и urls.py проекта?
Использовать include:path('articles/', include('hexlet_django_blog.article.urls')),
С этого момента все пути, которые начинаются с “articles/”, будут перенаправляться в hexlet_django_blog.article.urls
Что представляет собой приложение в Django?
Самостоятельное веб-приложение, которое можно переиспользовать
Пакет с модулями описания моделей и вьюх со своими шаблонами и роутингом
Какая команда создает новое приложение?
django-admin startapp app
Как подключить приложение к основному пакету?
- Задать имя приложения в файле apps.py
- Добавить имя приложения в список INSTALLED_APPS в файле настроек
Как загрузчик шаблонов ищет шаблоны?
Загрузчик учитывает положение приложения в списке settings.INSTALLED_APPS и загружает шаблоны соответственно.
На что влияет порядок подключений приложений?
С помощью управления порядком подключения приложений можно переопределять шаблоны одних приложений шаблонами из других
Какие шаблоны проекта стоит хранить в отдельной директории в корне проекта?
Все шаблоны проекта, которые используются только в нем.
Как следует поддерживать порядок в директории шаблонов проекта?
Использовать поддиректории и хорошие имена.
Куда нужно добавить директорию шаблонов проекта?
Директорию нужно добавить в settings.TEMPLATES.DIRS.
Где следует хранить шаблоны для приложений, которые планируется использовать повторно?
Внутри соответствующей директории templates нужно иметь поддиректорию с именем приложения и все шаблоны располагать в ней.
Как передавать данные в шаблон?
Данные передаются в шаблон с помощью контекста, который представляет собой словарь. Когда мы вызываем render(request, ‘template.html’, context={}), мы передаем этот самый словарь в качестве аргумента.
Можно ли хранить шаблоны приложений в директории самих приложений?
Да. Необходимо установить для параметра APP_DIRS значение True
Какие шаблонизаторы встроены в Django?
Jinja2
DjangoTemplates
Что допустимо делать в шаблоне?
Использовать циклы
Использовать условные конструкции
Пример for loop в шаблоне
{% for user in users %} <p>This is user {{ user.id }}</p> {% endfor %}
Как расширяются шаблоны?
{% extends "base.html" %}