Django 01 - Hexlet Flashcards

(70 cards)

1
Q

Что представляет собой manage.py?

A

Скрипт с командами для управления проектом

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Минимум для создания страницы

A

Маршрут. Определяет адрес конкретной страницы или набора страниц на сайте. Маршрут связывает эти адреса с конкретным обработчиком, который будет вызван при запросе этих страниц
Контроллер. Слой кода, в котором расположены обработчики страниц сайта. Они анализируют запрос и формируют ответ, который фреймворк отправляет пользователю
Шаблон. Специальный файл, который используется, чтобы формировать HTTP-ответ

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Маршрут

A

хранятся в файле urls.py.
переменная urlpatterns — список маршрутов сайта.
Функция path(route, view)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Функция path(route, view)

A

Первым параметром она принимает адрес запрашиваемой страницы или паттерн, который описывает группу страниц.
Вторым параметром передается обработчик или встраиваемый urls.py другого приложения. Обработчики запросов в Django называют view — на жаргоне джангистов «вьюха».

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Контроллер, функция render

A

Она формирует HTML на основе указанного шаблона и использует при рендеринге (составлении страницы) данные из словаря context.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Как соотносятся маршруты и конкретные адреса?

A

Один маршрут – много адресов

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что содержит шаблон?

A

Логику вывода и HTML

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Как правильно определить маршрут /users

A

path('users/', views.users)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что делает settings.INSTALLED_APPS

A

Этот список содержит перечень всех Django applications, которые подключены к текущему проекту. Встроенный загрузчик шаблонов (Template Loader) ищет их в поддиректориях с именем templates во всех подключенных приложениях.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Создание приложения

A

django-admin startapp <app_name>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Регистрация созданного приложения в apps.py

A
# hexlet_django_blog/article/apps.py
class ArticleConfig(AppConfig):
    ...
    name = 'hexlet_django_blog.article'  # <- изменяем эту строчку
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Обязательно ли в приложении создавать urls.py?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как соединить urls.py приложения и urls.py проекта?

A

Использовать include:
path('articles/', include('hexlet_django_blog.article.urls')),
С этого момента все пути, которые начинаются с “articles/”, будут перенаправляться в hexlet_django_blog.article.urls

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что представляет собой приложение в Django?

A

Самостоятельное веб-приложение, которое можно переиспользовать
Пакет с модулями описания моделей и вьюх со своими шаблонами и роутингом

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Какая команда создает новое приложение?

A

django-admin startapp app

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Как подключить приложение к основному пакету?

A
  • Задать имя приложения в файле apps.py
  • Добавить имя приложения в список INSTALLED_APPS в файле настроек
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Как загрузчик шаблонов ищет шаблоны?

A

Загрузчик учитывает положение приложения в списке settings.INSTALLED_APPS и загружает шаблоны соответственно.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

На что влияет порядок подключений приложений?

A

С помощью управления порядком подключения приложений можно переопределять шаблоны одних приложений шаблонами из других

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Какие шаблоны проекта стоит хранить в отдельной директории в корне проекта?

A

Все шаблоны проекта, которые используются только в нем.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Как следует поддерживать порядок в директории шаблонов проекта?

A

Использовать поддиректории и хорошие имена.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Куда нужно добавить директорию шаблонов проекта?

A

Директорию нужно добавить в settings.TEMPLATES.DIRS.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Где следует хранить шаблоны для приложений, которые планируется использовать повторно?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Как передавать данные в шаблон?

A

Данные передаются в шаблон с помощью контекста, который представляет собой словарь. Когда мы вызываем render(request, ‘template.html’, context={}), мы передаем этот самый словарь в качестве аргумента.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Можно ли хранить шаблоны приложений в директории самих приложений?

A

Да. Необходимо установить для параметра APP_DIRS значение True

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Какие шаблонизаторы встроены в Django?
Jinja2 DjangoTemplates
26
Что допустимо делать в шаблоне?
Использовать циклы Использовать условные конструкции
27
Пример for loop в шаблоне
``` {% for user in users %}

This is user {{ user.id }}

{% endfor %} ```
28
Как расширяются шаблоны?
`{% extends "base.html" %}`
29
Трехуровненый подход к наследованию шаблонов
* Создание base.html шаблона, который содержит основной внешний вид сайта * Создание base_SECTIONNAME.html шаблонов для каждого раздела сайта, например, base_article.html, base_news.html. Эти шаблоны расширяют base.html и включают в себя стили для конкретных разделов * Создание отдельного шаблона для каждого типа страницы, например, новостной статьи или записи в блоге. Эти шаблоны расширяют соответствующий шаблон раздела
30
Виды представлений в Django
Представления-функции — view functions Представления-классы — class based views
31
Регистрация class-based view
Регистрируется представление-класс с помощью метода класса as_view. Выглядит регистрация так: urlpatterns = [ ... path('', IndexView.as_view()), ...
32
Какие объекты принимают представления-функции?
Объект класса HttpRequest
33
От какого класса наследуются представления-классы?
От класса django.views.View
34
Пример динамического маршрута
`path('users//pets//med_info/', med_info_view),`
35
Обратные маршруты или reverse
Чтобы была возможность для любого маршрута всегда получить правильный путь, нужно произвести операцию, обратную маршрутизации — у Django есть функции reverse и reverse_lazy. Они позволяют получить путь по имени маршрута. Поэтому маршруты, которые нужно обращать, необходимо поименовать (задать уникальное имя)
36
Пример использования reverse
Когда маршрут поименован, можно получить путь вызовом вида `reverse('pet_med_info', kwargs={'user_id': 42, 'pet_id': 101})`
37
reverse_lazy
Функция reverse_lazy нужна, когда путь нужно получить на этапе инициализации программы, например, при описании class based views
38
Когда применять reverse и reverse_lazy?
reverse_lazy используем в атрибутах классов, а в теле вьюх и шаблонах — reverse. Последняя работает быстрее, но только с готовой картой маршрутов.
39
Как подключить набор urlpatterns из приложения проекта?
С помощью функции include() из модуля django.urls
40
Как генерируются имена таблиц?
Имена таблиц автоматически генерируются с помощью объединения имени приложения (article) и имени модели в нижнем регистре — article
41
Отменить все миграции приложения
`python manage.py migrate article zero`
42
За что отвечает ORM в приложении?
Отображение базы данных на сущности приложения Бизнес-логику Отображение сущностей приложения на базу данных
43
Выберите верные утверждения про понятие "модель" в ORM
Модель связана с таблицей в базе данных Модель начинает работать тогда, когда создана и выполнена миграция, которая описывает таблицу для этой модели Mодель в MVC — это не то же самое, что и модель, как сущность ORM
44
Как правильно выполнять любые изменения в базе данных?
Любое изменение — новая миграция
45
В какой момент изменение модели зафиксируется в базе данных?
В момент вызова метода save()
46
Как правильно удалить сущность из базы данных?
obj.delete()
47
Получение переменной окружения
``` import os SECRET_KEY = os.environ['SECRET_KEY'] ```
48
Минусы хранения переменных окружения
Переменные загружаются только из окружения Необходимо обрабатывать исключения KeyError Необходимо конвертировать типы вручную
49
Альтернатива хранению переменных окружения
Для простоты конфигурации Django есть сторонняя библиотека python-dotenv. Она позволяет загружать переменные не только из окружения, но и из специального файла .env, который находится в корне проекта. Этот файл не хранится в репозитории
50
Настройка dot-env
``` #settings.py from dotenv import load_dotenv # Импортируем environ load_dotenv() # Загрузка переменных окружения из файла .env --- import os SECRET_KEY = os.getenv('SECRET_KEY') DEBUG = os.getenv('DEBUG', False) ```
51
Частью чего являются механизм «переменные окружения»?
Операционной системы
52
Создание суперпользователя
`python manage.py createsuperuser`
53
Регистрация модели в админке
``` from django.contrib import admin from .models import Article admin.site.register(Article) ```
54
Добавление поиска в админку
``` from .models import Article class ArticleAdmin(admin.ModelAdmin): search_fields = ['name', 'body'] admin.site.register(Article, ArticleAdmin) ```
55
Регистрация модели в админке с помощью декоратора
``` from .models import Article @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): search_fields = ['name', 'body'] ```
56
Добавление отображаемых колонок и фильтров в админке
``` @admin.register(Article) class ArticleAdmin(admin.ModelAdmin): list_display = ('name', 'timestamp') # Перечисляем поля, отображаемые в таблице списка статей search_fields = ['name', 'body'] list_filter = (('timestamp', DateFieldListFilter),) # Перечисляем поля для фильтрации ```
57
Какой метод использовать предпочтительнее: get_object_or_404 или get?
get_object_or_404. В большинстве ситуаций сайт должен отдавать страницу 404, если что-то отсутствует. В первую очередь это касается страниц сущностей
58
Может ли в качестве идентификатора в маршруте использоваться что-то, отличное от первичного ключа в базе данных?
Да. Фреймворку без разницы что там. Данные, которые передаются через URL, зависят только от программиста
59
Получить заполненную модель, но не сохранять ее
``` comment = form.save(commit=False) # Получаем заполненную модель comment.content = check_for_spam(form.data['content']) comment.save() ``` В данном примере мы при помощи commit=False говорим Django, что данные пока сохранять не нужно, и получаем объект нашей модели. После дополнительной обработки модели ее необходимо сохранить с помощью вызова метода .save().
60
Как Django работает с формами?
Через встроенные механизмы для генерации и обработки формы
61
Как происходит генерация HTML-кода формы?
Экземпляр класс формы уже содержит HTML-код формы, достаточно его вывести в шаблоне как переменную
62
Можно ли автоматически создать форму для модели?
Можно унаследовать класс формы от ModelForm и указать модель
63
Как проверить данные формы?
Достаточно вызвать метод .is_valid() для автоматической проверки формы
64
Как сохраняются данные формы, наследованные от ModelForm?
Вызвать метод .save()
65
Как узнать возникшие ошибки при валидации?
При возникновении ошибки при валидации внутри формы создается словарь error, который содержит ошибки
66
Нужно ли создавать новый класс формы для обновления, если он уже имеется для создания?
Нет, можно повторно использовать класс формы для создания
67
Как заполнить форму данными?
`form = ArticleForm(instance=Article.objects.get(id=article_id))`
68
Как обновить данные модели?
Достаточно вызвать у обновленной формы .save()
69
Зачем нужно подтверждение удаления?
Чтобы предотвратить случайное удаление данных пользователем или поисковой системой при анализе сайта
70
Нужно ли определять отдельный путь для удаления данных?
Да. Это нужно делать для каждого действия