Django 01 - Hexlet Flashcards

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
Q

Какие шаблонизаторы встроены в Django?

A

Jinja2
DjangoTemplates

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

Что допустимо делать в шаблоне?

A

Использовать циклы
Использовать условные конструкции

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

Пример for loop в шаблоне

A
{% for user in users %}
<p>This is user {{ user.id }}</p>
{% endfor %}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Как расширяются шаблоны?

A

{% extends "base.html" %}

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

Трехуровненый подход к наследованию шаблонов

A
  • Создание base.html шаблона, который содержит основной внешний вид сайта
  • Создание base_SECTIONNAME.html шаблонов для каждого раздела сайта, например, base_article.html, base_news.html. Эти шаблоны расширяют base.html и включают в себя стили для конкретных разделов
  • Создание отдельного шаблона для каждого типа страницы, например, новостной статьи или записи в блоге. Эти шаблоны расширяют соответствующий шаблон раздела
30
Q

Виды представлений в Django

A

Представления-функции — view functions
Представления-классы — class based views

31
Q

Регистрация class-based view

A

Регистрируется представление-класс с помощью метода класса as_view. Выглядит регистрация так:

urlpatterns = [

path(‘’, IndexView.as_view()),

32
Q

Какие объекты принимают представления-функции?

A

Объект класса HttpRequest

33
Q

От какого класса наследуются представления-классы?

A

От класса django.views.View

34
Q

Пример динамического маршрута

A

path('users/<int:user_id>/pets/<int:pet_id>/med_info/', med_info_view),

35
Q

Обратные маршруты или reverse

A

Чтобы была возможность для любого маршрута всегда получить правильный путь, нужно произвести операцию, обратную маршрутизации — у Django есть функции reverse и reverse_lazy. Они позволяют получить путь по имени маршрута. Поэтому маршруты, которые нужно обращать, необходимо поименовать (задать уникальное имя)

36
Q

Пример использования reverse

A

Когда маршрут поименован, можно получить путь вызовом вида reverse('pet_med_info', kwargs={'user_id': 42, 'pet_id': 101})

37
Q

reverse_lazy

A

Функция reverse_lazy нужна, когда путь нужно получить на этапе инициализации программы, например, при описании class based views

38
Q

Когда применять reverse и reverse_lazy?

A

reverse_lazy используем в атрибутах классов, а в теле вьюх и шаблонах — reverse. Последняя работает быстрее, но только с готовой картой маршрутов.

39
Q

Как подключить набор urlpatterns из приложения проекта?

A

С помощью функции include() из модуля django.urls

40
Q

Как генерируются имена таблиц?

A

Имена таблиц автоматически генерируются с помощью объединения имени приложения (article) и имени модели в нижнем регистре — article

41
Q

Отменить все миграции приложения

A

python manage.py migrate article zero

42
Q

За что отвечает ORM в приложении?

A

Отображение базы данных на сущности приложения
Бизнес-логику
Отображение сущностей приложения на базу данных

43
Q

Выберите верные утверждения про понятие “модель” в ORM

A

Модель связана с таблицей в базе данных
Модель начинает работать тогда, когда создана и выполнена миграция, которая описывает таблицу для этой модели
Mодель в MVC — это не то же самое, что и модель, как сущность ORM

44
Q

Как правильно выполнять любые изменения в базе данных?

A

Любое изменение — новая миграция

45
Q

В какой момент изменение модели зафиксируется в базе данных?

A

В момент вызова метода save()

46
Q

Как правильно удалить сущность из базы данных?

A

obj.delete()

47
Q

Получение переменной окружения

A
import os
SECRET_KEY = os.environ['SECRET_KEY']
48
Q

Минусы хранения переменных окружения

A

Переменные загружаются только из окружения
Необходимо обрабатывать исключения KeyError
Необходимо конвертировать типы вручную

49
Q

Альтернатива хранению переменных окружения

A

Для простоты конфигурации Django есть сторонняя библиотека python-dotenv. Она позволяет загружать переменные не только из окружения, но и из специального файла .env, который находится в корне проекта. Этот файл не хранится в репозитории

50
Q

Настройка dot-env

A
#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
Q

Частью чего являются механизм «переменные окружения»?

A

Операционной системы

52
Q

Создание суперпользователя

A

python manage.py createsuperuser

53
Q

Регистрация модели в админке

A
from django.contrib import admin
from .models import Article

admin.site.register(Article)
54
Q

Добавление поиска в админку

A
from .models import Article

class ArticleAdmin(admin.ModelAdmin):
    search_fields = ['name', 'body']

admin.site.register(Article, ArticleAdmin)
55
Q

Регистрация модели в админке с помощью декоратора

A
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    search_fields = ['name', 'body']
56
Q

Добавление отображаемых колонок и фильтров в админке

A
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('name', 'timestamp') # Перечисляем поля, отображаемые в таблице списка статей
    search_fields = ['name', 'body']
    list_filter = (('timestamp', DateFieldListFilter),) # Перечисляем поля для фильтрации
57
Q

Какой метод использовать предпочтительнее: get_object_or_404 или get?

A

get_object_or_404. В большинстве ситуаций сайт должен отдавать страницу 404, если что-то отсутствует. В первую очередь это касается страниц сущностей

58
Q

Может ли в качестве идентификатора в маршруте использоваться что-то, отличное от первичного ключа в базе данных?

A

Да. Фреймворку без разницы что там. Данные, которые передаются через URL, зависят только от программиста

59
Q

Получить заполненную модель, но не сохранять ее

A
comment = form.save(commit=False) # Получаем заполненную модель
comment.content = check_for_spam(form.data['content'])
comment.save()

В данном примере мы при помощи commit=False говорим Django, что данные пока сохранять не нужно, и получаем объект нашей модели. После дополнительной обработки модели ее необходимо сохранить с помощью вызова метода .save().

60
Q

Как Django работает с формами?

A

Через встроенные механизмы для генерации и обработки формы

61
Q

Как происходит генерация HTML-кода формы?

A

Экземпляр класс формы уже содержит HTML-код формы, достаточно его вывести в шаблоне как переменную

62
Q

Можно ли автоматически создать форму для модели?

A

Можно унаследовать класс формы от ModelForm и указать модель

63
Q

Как проверить данные формы?

A

Достаточно вызвать метод .is_valid() для автоматической проверки формы

64
Q

Как сохраняются данные формы, наследованные от ModelForm?

A

Вызвать метод .save()

65
Q

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

A

При возникновении ошибки при валидации внутри формы создается словарь error, который содержит ошибки

66
Q

Нужно ли создавать новый класс формы для обновления, если он уже имеется для создания?

A

Нет, можно повторно использовать класс формы для создания

67
Q

Как заполнить форму данными?

A

form = ArticleForm(instance=Article.objects.get(id=article_id))

68
Q

Как обновить данные модели?

A

Достаточно вызвать у обновленной формы .save()

69
Q

Зачем нужно подтверждение удаления?

A

Чтобы предотвратить случайное удаление данных пользователем или поисковой системой при анализе сайта

70
Q

Нужно ли определять отдельный путь для удаления данных?

A

Да. Это нужно делать для каждого действия