Разделы презентаций


Web- программирование Лекция 7. Django

Содержание

MVC (MTV)Model-View-Controller (MVC, «Модель-Представление-Контроллер», «Модель-Вид-Контроллер») — схема разделения данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может

Слайды и текст этой презентации

Слайд 1Web-программирование Лекция 7. Django.
асист. каф. 308 Трутнева Надежда Владимировна
тел: 8-926-880-12-76
почта: ntrutn@gmail.com

Web-программирование Лекция 7. Django.асист. каф. 308 Трутнева Надежда Владимировнател: 8-926-880-12-76почта: ntrutn@gmail.com

Слайд 2MVC (MTV)
Model-View-Controller (MVC, «Модель-Представление-Контроллер», «Модель-Вид-Контроллер») — схема разделения данных приложения,

пользовательского интерфейса и управляющей логики на три отдельных компонента: модель,

представление и контроллер — таким образом, что модификация каждого компонента может осуществляться независимо.

Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя свое состояние.
Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели.
Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений
MVC (MTV)Model-View-Controller (MVC, «Модель-Представление-Контроллер», «Модель-Вид-Контроллер») — схема разделения данных приложения, пользовательского интерфейса и управляющей логики на три

Слайд 3Модели
Название таблицы, myapp_person, автоматически создано с метаданных модели и может быть

переопределено.
Поле id добавлено автоматически, но его также можно переопределить.
CREATE TABLE SQL в

этом примере соответствует синтаксису PostgreSQL, но стоит учесть что Django использует синтаксис SQL соответственно настройкам базы данных в файле настроек.

МоделиНазвание таблицы, myapp_person, автоматически создано с метаданных модели и может быть переопределено. Поле id добавлено автоматически, но его также можно

Слайд 4Модели
Самая важная часть модели – и единственная обязательная – это

список полей таблицы базы данных которые она представляет. Поля определены

атрибутами класса. Нельзя использовать имена конфликтующие с API моделей, такие как clean, save или delete.

МоделиСамая важная часть модели – и единственная обязательная – это список полей таблицы базы данных которые она

Слайд 5Параметры поля
null
Field.null
При True Django сохранит пустое значение как NULL в базе данных. Значение по

умолчанию – False.

blank
Field.blank
При True поле может быть пустым. Значение по умолчанию – False.
Заметим что

этот параметр отличается от null. Null указывается для базы данных, в то время как Blank – для проверки данных. При blank=True, проверка данных в форме позволит сохранять пустое значение в поле. При blank=False поле будет обязательным.

choices
Field.choices
Итератор (например, список или кортеж) двухэлементных кортежей(например, [(A, B), (A, B) ...]), который будет использоваться как варианты значений для поля. Если этот параметр указан, в форме будет использоваться select для этого поля.
Первый элемент каждого кортежа – это значение, которое будет сохранено в базе данных. Второй элемент – название, которое будет отображаться для пользователей. 



Параметры поляnullField.nullПри True Django сохранит пустое значение как NULL в базе данных. Значение по умолчанию – False.blankField.blankПри True поле может быть пустым. Значение по

Слайд 6Параметры поля

Параметры поля

Слайд 7Параметры поля

Параметры поля

Слайд 8Параметры поля
error_messages
Field.error_messages
error_messages позволяет переопределить сообщения ошибок возвращаемых полем. Используйте словарь с

ключами соответствующими необходимым ошибкам.
Ключи ошибок такие: null, blank, invalid, invalid_choice, unique и ``unique_for_date`. 

primary_key
Field.primary_key
При True это поле будет первичным ключом.
Если

вы не укажите primary_key=True для какого-либо поля в модели, Django самостоятельно добавит AutoField для хранения первичного ключа, вы не обязаны указывать primary_key=True, если не хотите переопределить первичный ключ по умолчанию.
primary_key=True подразумевает null=False и unique=True. Модель может содержать только один первичный ключ.
Первичный ключ доступен только для чтения. Если вы поменяете значение для существующего объекта и сохраните его, будет создан новый объект.

unique
Field.unique
При True значение поля должно быть уникальным.
Этот параметр учитывается при сохранении в базу данных и при проверке данных в модели. Если вы попытаетесь сохранить повторное значение в поле с unique, будет вызвана ошибка django.db.IntegrityError методом save().
Этот параметр можно использовать для любого типа поля кроме ManyToManyField, OneToOneField и FileField.


Параметры поляerror_messagesField.error_messageserror_messages позволяет переопределить сообщения ошибок возвращаемых полем. Используйте словарь с ключами соответствующими необходимым ошибкам.Ключи ошибок такие: null, blank, invalid, invalid_choice, unique и ``unique_for_date`. primary_keyField.primary_keyПри True это поле

Слайд 9Типы полей
AutoField
class AutoField(**options)
Автоинкрементное поле IntegerField. Используется для хранения ID. Скорее всего вам

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

к модели.

BigIntegerField
class BigIntegerField(**options)
64-битное целочисленное, аналогично IntegerField но позволяет хранить числа от -9223372036854775808 до 9223372036854775807. Форма будет использовать TextInput для отображения.

BinaryField
class BinaryField(**options)
Поля для хранения бинарных данных. Принимает значение типа bytes. Это поле имеет ограниченный функционал. Например, QuerySet нельзя фильтровать по значению BinaryField.

BooleanField
class BooleanField(**options)
Поле хранящее значение true/false.
Виджет по умолчанию для этого поля CheckboxInput.
Если вам нужен параметр null, используйте поле NullBooleanField.
Значение по умолчанию для BooleanField None, если Field.default не указан.

CharField
class CharField(max_length=None, **options)
Строковое поле для хранения коротких или длинных строк.
Для большого количества текстовой информации используйте TextField.
Виджет по умолчанию для этого поля TextInput.
CharField принимает один дополнительный аргумент:CharField.max_length
Максимальная длинна(в символах) этого поля. max_length используется для проверки данных на уровне базы данных и форм Django.



Типы полейAutoFieldclass AutoField(**options)Автоинкрементное поле IntegerField. Используется для хранения ID. Скорее всего вам не придется использовать это поле, первичный ключ

Слайд 10Типы полей
DateField
class DateField(auto_now=False, auto_now_add=False, **options)

Дата, представленная в виде объекта datetime.date Python. Принимает несколько дополнительных параметров:

DateField.auto_now
Значение

поля будет автоматически установлено в текущую дату при каждом сохранении

объекта. Полезно для хранения времени последнего изменения. Заметим, что текущее время будет использовано всегда; это не просто значение по умолчанию, которое вы можете переопределить.

DateField.auto_now_add
Значение поля будет автоматически установлено в текущую дату при создании(первом сохранении) объекта. Полезно для хранения времени создания. Заметим, что текущее время будет использовано всегда; это не просто значение по-умолчанию, которое вы можете переопределить. По этому, даже если вы укажите значение для этого поля, оно будет проигнорировано. Если вы хотите изменять значения этого поля, используйте следующее вместо auto_now_add=True:
Для DateField: default=date.today - из datetime.date.today()
Для DateTimeField: default=timezone.now - из django.utils.timezone.now()

В форме поле будет представлено как :class:`~django.forms.TextInput с JavaScript календарем, и кнопкой “Сегодня”. Содержит дополнительную ошибку invalid_date.

Опции auto_now_add, auto_now и default взаимоисключающие. Использование их вместе вызовет ошибку.
Типы полейDateFieldclass DateField(auto_now=False, auto_now_add=False, **options)Дата, представленная в виде объекта datetime.date Python. Принимает несколько дополнительных параметров:DateField.auto_nowЗначение поля будет автоматически установлено в текущую дату

Слайд 11Типы полей
EmailField
class EmailField(max_length=254, **options)
Поле CharField для хранения правильного email-адреса. Использует EmailValidator для проверки значения.

FloatField
class FloatField(**options)
Число с плавающей

точкой представленное объектом float.
Виджет по умолчанию в форме для этого поля

- NumberInput, если localize равен False, иначе TextInput.

ImageField
class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)
Наследует все атрибуты и методы поля FileField, но также проверяет является ли загруженный файл изображением.
В дополнение к атрибутам поля FileField ImageField содержит также height и width.
Для определения этих аргументов ImageField принимает дополнительные аргументы:

ImageField.height_field
Имя поля, которому автоматически будет присвоено значение высоты изображения при каждом сохранении объекта.

ImageField.width_field
Имя поля, которому автоматически будет присвоено значение ширины изображения при каждом сохранении объекта.

Требуется библиотека Pillow (для работы с изображениями).

По-умолчанию, экземпляр ImageField создается как колонка varchar в базе данных. Как и с другими полями вы можете изменить максимальную длину используя аргумент max_length.
Виджет форма для этого поля - ClearableFileInput.




Типы полейEmailFieldclass EmailField(max_length=254, **options)Поле CharField для хранения правильного email-адреса. Использует EmailValidator для проверки значения.FloatFieldclass FloatField(**options)Число с плавающей точкой представленное объектом float.Виджет по умолчанию в форме

Слайд 12Типы полей
GenericIPAddressField¶
class GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)
Адрес IPv4 или IPv6 в виде строки (например, 192.0.2.30 или 2a02:42fe::4). Форма

использует виджет TextInput.
Преобразование адреса IPv6 происходит в соответствии с RFC 4291#section-2.2 раздел 2.2,

включая рекомендации по форматированию IPv4 в параграфа 3 этого раздела, таких как ::ffff:192.0.2.0.
Например, 2001:0::0:01 будет преобразован 2001::1, а ::ffff:0a0a:0a0a в ::ffff:10.10.10.10. Все символы будут преобразованы в нижний регистр.

GenericIPAddressField.protocol
Определяет формат IP адреса. Принимает значение 'both' (по умолчанию), 'IPv4' или 'IPv6'. Значение не чувствительно регистру.

GenericIPAddressField.unpack_ipv4
Преобразует адрес IPv4. Если эта опция установлена, адрес ::ffff::192.0.2.1 будет преобразован в 192.0.2.1. По-умолчанию отключена. Может быть использовано, если protocolустановлен в 'both'.
Если вы разрешили пустые значение, необходимо также разрешить null т.к. пустые значения сохраняются как null.

URLField
class URLField(max_length=200, **options)
Поле CharField для URL.
Виджет по умолчанию для этого поля TextInput.
Как подкласс CharField URLField принимает необязательный аргумент max_length. Если вы не укажите max_length, будет использовано значение – 200.

Типы полейGenericIPAddressField¶class GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)Адрес IPv4 или IPv6 в виде строки (например, 192.0.2.30 или 2a02:42fe::4). Форма использует виджет TextInput.Преобразование адреса IPv6 происходит в соответствии

Слайд 13Типы полей
UUIDField
class UUIDField(**options)
Поля для сохранения UUID. Использует класс Python UUID. Для PostgreSQL

используется тип uuid, иначе char(32).
UUID является хорошей альтернативой AutoField с primary_key.

База данных не сгенерирует

UUID за вас, по этому следует использовать default:

import uuid
from django.db import models

class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # other fields

Обратите внимание, указана функция (без скобок) в default, а не объект UUID.




Типы полейUUIDFieldclass UUIDField(**options)Поля для сохранения UUID. Использует класс Python UUID. Для PostgreSQL используется тип uuid, иначе char(32).UUID является хорошей альтернативой AutoField с primary_key. База

Слайд 14Виды связей между таблицами
1. «Один-к-одному» - любому экземпляру сущности А соответствует только

один экземпляр сущности В, и наоборот.

У любого конкретного ученика может

быть только одна характеристика, и эта характеристика относится к единственному ученику.

Виды связей между таблицами1. «Один-к-одному» - любому экземпляру сущности А соответствует только один экземпляр сущности В, и наоборот.У любого

Слайд 15Виды связей между таблицами
2.  «Один-ко-многим» - любому экземпляру сущности А соответствует 0,

1 или несколько экземпляров сущности В, но любому экземпляру сущности

В соответствует только один экземпляр сущности А.

Ученику ставят много оценок; поставленная оценка принадлежит только одному ученику.
Виды связей между таблицами2.  «Один-ко-многим» - любому экземпляру сущности А соответствует 0, 1 или несколько экземпляров сущности В, но

Слайд 16Виды связей между таблицами
3. «Многие-к-одному» - любому экземпляру сущности А соответствует только

один экземпляр сущности В, но любому экземпляру сущности В соответствует

0, 1 или несколько экземпляров сущности А.

Преподаватель работает только в одном кабинете, однако рабочий кабинет может быть закреплен за несколькими преподавателями.

Какая же разница между связями «один-ко-многим» и «многие-к-одному»? Такая же, как между фразами «портфель ученика» и «ученик портфеля». То есть важно, кто во взаимоотношении двух объектов главный - ученик или портфель. Суть отношений двух объектов отражается в имени связи.
Виды связей между таблицами3. «Многие-к-одному» - любому экземпляру сущности А соответствует только один экземпляр сущности В, но любому экземпляру

Слайд 17Виды связей между таблицами
4.  «Многие-ко-многим» - любому экземпляру сущности А соответствует 0,

1 или несколько экземпляров сущности В, и любому экземпляру сущности

В соответствует 0, 1 или несколько экземпляров сущности А.

Ученик Иванов учится у нескольких преподавателей. И каждый преподаватель работает со многими учениками.
Виды связей между таблицами4.  «Многие-ко-многим» - любому экземпляру сущности А соответствует 0, 1 или несколько экземпляров сущности В, и

Слайд 18Поля отношений

Поля отношений

Слайд 19Поля отношений

Поля отношений

Слайд 20Поля отношений
Связь один-к-одному

Для определения связи один-к-одному используется OneToOneField. Вы используете его

так же, как и другие типы Field: добавляя как атрибут в

модель.
Чаще всего связь одни-к-одному используется для первичного ключа для модели, которая “расширяет” другую модель.
Для OneToOneField необходимо указать обязательный позиционный аргумент: класс связанной модели.
Например, вам необходима база данных “строений”, обычным дело будет добавить адрес, номер телефона и др. в базу данных. После, если вы захотите дополнить базу данных строений ресторанами, вместо того, чтобы повторять поля в модели Restaurant, вы можете добавить в модель Restaurant поле OneToOneField связанное с Place (т.к. ресторан “это” строение; вы можете использовать наследование моделей, которое на самом деле работает через связь один-к-одному).
Так же как и для ForeignKey, вы можете использовать рекурсивную связь и связь на себя.
Поля отношенийСвязь один-к-одномуДля определения связи один-к-одному используется OneToOneField. Вы используете его так же, как и другие типы Field: добавляя

Слайд 21Ограничения при выборе названия поля

Ограничения при выборе названия поля

Слайд 22Методы модели
__str__() (Python 3)
“Волшебный метод” Python, который возвращает unicode “представление” объекта.

Это то, что Python и Django используют для отображения объекта

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

__unicode__() (Python 2)
Python 2 аналог __str__().

Методы модели__str__() (Python 3)“Волшебный метод” Python, который возвращает unicode “представление” объекта. Это то, что Python и Django используют

Слайд 23Переопределение методов модели

Переопределение методов модели

Слайд 24Наследование моделей
Наследование моделей в Django работает почти так же, как

и наследование классов в Python, но следует соблюдать правила, описанные

выше. Это означает, что базовый класс должен наследоваться от django.db.models.Model.

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

Существует три вида наследования моделей в Django.

1. Чаще всего вы будете использовать родительскую модель для хранения общих полей, чтобы не добавлять их в каждую дочернюю модель. Если вы не собираетесь использовать его как независимую модель – Абстрактные модели то, что вам нужно.

2. Если родительская модель независимая(возможно, из другого приложения) и должна храниться в отдельной таблице, Multi-table наследование то, что вам нужно.

3. Если же вы хотите переопределить поведение модели на уровне Python, не меняя структуры базы данных, вы можете использовать Proxy-модели.

Наследование моделейНаследование моделей в Django работает почти так же, как и наследование классов в Python, но следует

Слайд 25Выполнение запросов

Выполнение запросов

Слайд 26Выполнение запросов

Выполнение запросов

Слайд 27Выполнение запросов

Выполнение запросов

Слайд 28Выполнение запросов

Выполнение запросов

Слайд 29Выполнение запросов

Выполнение запросов

Слайд 30Выполнение запросов

Выполнение запросов

Слайд 31Выполнение запросов

Выполнение запросов

Слайд 32Выполнение запросов

Выполнение запросов

Слайд 33Спасибо за внимание !
ВОПРОСЫ???

Спасибо за внимание !ВОПРОСЫ???

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика