Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Физическая модель базы данных
База данных разработана на SQLite 3
class Category(models.Model): """Категории""" name = models.CharField("Категория", max_length=150) description = models.TextField("Описание") url = models.SlugField(max_length=160, unique=True) def __str__(self): return self.name class Meta: verbose_name = "Категория" verbose_name_plural = "Категории"
class Actor(models.Model): """Актеры""" name = models.CharField("Имя", max_length=100) age = models.PositiveSmallIntegerField("Возраст", default=0) description = models.TextField("Описание") image = models.ImageField("Изображение", upload_to="actors/") def __str__(self): return self.name def get_absolute_url(self): return reverse('actor_detail', kwargs={"slug": self.name}) class Meta: verbose_name = "Актер" verbose_name_plural = "Актеры"
class Director(models.Model): """Режиссеры""" name = models.CharField("Имя", max_length=100) age = models.PositiveSmallIntegerField("Возраст", default=0) description = models.TextField("Описание") image = models.ImageField("Изображение", upload_to="directors/") def __str__(self): return self.name def get_absolute_url(self): return reverse('director_detail', kwargs={"slug": self.name}) class Meta: verbose_name = "Режиссер" verbose_name_plural = "Режиссеры"
class Genre(models.Model): """Жанры""" name = models.CharField("Имя", max_length=100) description = models.TextField("Описание") url = models.SlugField(max_length=160, unique=True) def __str__(self): return self.name class Meta: verbose_name = "Жанр" verbose_name_plural = "Жанры"
class Movie(models.Model): """Фильм""" title = models.CharField("Название", max_length=100) tagline = models.CharField("Слоган", max_length=100, default='') description = models.TextField("Описание") poster = models.ImageField("Постер", upload_to="movies/") year = models.PositiveSmallIntegerField("Дата выхода", default=2021) country = models.CharField("Страна", max_length=30) directors = models.ManyToManyField(Director, verbose_name="режиссер", related_name="film_director") actors = models.ManyToManyField(Actor, verbose_name="актеры", related_name="film_actor") genres = models.ManyToManyField(Genre, verbose_name="жанры") world_premiere = models.DateField("Примьера в мире", default=date.today) budget = models.PositiveIntegerField("Бюджет", default=0, help_text="указывать сумму в долларах") fees_in_usa = models.PositiveIntegerField("Сборы в США", default=0, help_text="указывать сумму в долларах") fess_in_world = models.PositiveIntegerField("Сборы в мире", default=0, help_text="указывать сумму в долларах") category = models.ForeignKey(Category, verbose_name="Категория", on_delete=models.SET_NULL, null=True) url = models.SlugField(max_length=130, unique=True) draft = models.BooleanField("Черновик", default=False) def __str__(self): return self.title
def get_absolute_url(self): return reverse("movie_detail", kwargs={"slug": self.url}) def get_review(self): return self.reviews_set.filter(parent__isnull=True) class Meta: verbose_name = "Фильм" verbose_name_plural = "Фильмы"
class MovieShots(models.Model): """Кадры из фильма""" title = models.CharField("Заголовок", max_length=100) description = models.TextField("Описание") image = models.ImageField("Изображение", upload_to="movie_shots/") movie = models.ForeignKey(Movie, verbose_name="Фильм", on_delete=models.CASCADE) def __str__(self): return self.title class Meta: verbose_name = "Кадр из фильма" verbose_name_plural = "Кадры из фильма"
class RatingStar(models.Model): """Звезда рейтинга""" value = models.SmallIntegerField("Значение", default=1) def __str__(self): return f'{self.value}' class Meta: verbose_name = "Звезда рейтинга" verbose_name_plural = "Звезды рейтинга" ordering = ["-value"]
class Rating(models.Model): """Рейтинг""" ip = models.CharField("IP адрес", max_length=15) star = models.ForeignKey(RatingStar, on_delete=models.CASCADE, verbose_name="звезда") movie = models.ForeignKey(Movie, on_delete=models.CASCADE, verbose_name="фильм") def __str__(self): return f"{self.star} - {self.movie}" class Meta: verbose_name = "Рейтинг" verbose_name_plural = "Рейтинги"
class Reviews(models.Model): """Отзывы""" email = models.EmailField() name = models.CharField("Имя", max_length=100) text = models.TextField("Сообщение", max_length=5000) parent = models.ForeignKey('self', verbose_name="Родитель", on_delete=models.SET_NULL, blank=True, null=True) movie = models.ForeignKey(Movie, verbose_name="фильм", on_delete=models.CASCADE) def __str__(self): return f"{self.name} - {self.movie}" class Meta: verbose_name = "Отзыв" verbose_name_plural = "Отзывы" Описание программы
Физическая структура
Данный курсовой проект имеет следующую физическую структуру, что изображено на рисунке 4.1.
Рисунок 4.1 – Физическая структура проекта
Папка movies включает в себя следующие формы: 1) admin – отвечает за панель администратора. 2) apps – отвечает за основные настройки. 3) forms – отображение и добавление рейтинга и отзыва к фильму 4) models – создание базы данных 5) urls – создание url путей 6) views – содержит представление жанров, вывод полного описания фильма, вывод всех фильмов, вывод отзыва и рейтинга, вывод актеров и режиссеров, фильтрацию фильмов, поиск.
Логическая структура
Классы Category, Actor, Director, Genre, Movie, MovieShots, RatingStar, Rating, Reviews содержат метод __str__(self), для вывода данных. Класс Actor, Director, Movie содержат метод get_absolut_url(), для корректного отображения ссылки. Класс Movie содержит метод get_review(), для добавления и вывода отзывов Особенности интерфейса При открытии приложения пользователю отображается главная форма. На данной форме расположены последние добавленные фильмы, фильтрация, поиск, изображённые на рисунке 4.2.
Рисунок 4.2 – Главная форма При выборе фильтров, пользователю выводится результат фильтрации, изображено на рисунке 4.3.
Рисунок 4.3 – Результат фильтрации
При нажатии на кнопку «Поиск», если поле поиска заполнено – пользователю выводятся фильмы с похожим названием, изображено на рисунке 4.4. Рисунок 4.4 – Фильмы с похожим названием
При нажатии на пункт «Отправить», пользователь отправляет свой отзыв к фильму, изображено на рисунке 4.5.
Рисунок 4.5 – Отправка отзыва
|
||||||
Последнее изменение этой страницы: 2021-05-12; просмотров: 69; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.174.174 (0.011 с.) |