Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

«Разработка сайта кинотеатра «A CINEMA»»

Содержание

Введение

Техническое задание и выбор средств реализации. 5

1.1 Техническое задание. 5

1.2 Средства реализации. 5

2. Описание модулей серверной части программы и их взаимодействие. 8

3. Описание структуры базы данных и ее функций. 11

4. Описание структуры клиентской части. 13

4.1 Описание интерфейса «Обычный пользователь». 13

4.2 Описание интерфейса «Администратор». 18

4.3 Инструкция пользователя. 20

Заключение

Список использованной литературы 23

Введение

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

В данной работе будет создан сайт кинотеатра, на котором посетители сайта смогут посмотреть время сеанса или зарегистрироваться. Для выполнения поставленных работы необходимо:

- разработать страницы сайта на основе HTML кода;

- спроектировать таблицы стилей CSS для применения их на страницах сайта;

- создать базу данных для сайта на основе SQLite3;

- создать код Python (Django framework) для работы с данными.

Техническое задание и выбор средств реализации.

1.1 Техническое задание.

Необходимо разработать сайт «кинотеатр». Сайт должен быть выполнен, соблюдая следующие правила:

1) Общее количество разделов сайта должно быть не менее шести.

2) язык разметки сайта – HTML;

3) безошибочная работа, отображение в браузерах: InternetExplorer, MozillaFirefox, Opera (Chrome, Safari);

4) наличие страницы "Карта сайта";

5) все страницы сайта должны быть наполнены осмысленной информацией;

Задачи сайта кинотеатр:

- Дата выхода;

- информация о сеансах;

- цена билета;

- информация о кинотеатре;

1.2 Средства реализации.

Выбор средств был прост это коды html, css, python(Django framework). Базой данных служит файлы с данными.

HTML (HyperText Markup Language) — язык разметки (маркировки) гипертекста. Гипертекст своим развитием обязан интернету, хоть и создавался он совсем не для того. HTML дает возможность производить переход от одной части текста к другой, и, что замечательно, эти части могут храниться на совершенно разных компьютерах.

HTML не стоит путать с языками программирования, он создан специально для разметки Web-страниц. Именно язык разметки дает браузеру необходимые инструкции о том, как отображать тексты и другие элементы страницы на мониторе. Важно заметить, что не только различные браузеры, но и различные их версии могут по-разному воспринимать и отображать на экране код.

CSS (Cascading Style Sheets) — язык таблиц стилей, который позволяет прикреплять стиль (например, шрифты и цвет) к структурированным документам (например, документам HTML и приложениям XML). Обычно CSS-стили используются для создания и изменения стиля элементов веб-страниц и пользовательских интерфейсов, написанных на языках HTML и XHTML, но также могут быть применены к любому виду XML-документа, в том числе XML, SVG и XUL. Отделяя стиль представления документов от содержимого документов, CSS упрощает создание веб-страниц и обслуживание сайтов. CSS поддерживает таблицы стилей для конкретных носителей, поэтому авторы могут адаптировать представление своих документов к визуальным браузерам, слуховым устройствам, принтерам, брайлевским устройствам, карманным устройствам и т.д.

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

Python — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

Python поддерживает структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное программирование. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений, высокоуровневые структуры данных. Поддерживается разбиение программ на модули, которые, в свою очередь, могут объединяться в пакеты.

Django — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC. Проект поддерживается организацией Django Software Foundation.

Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий этого фреймворка от некоторых других (например, Ruby on Rails). Один из основных принципов фреймворка — DRY (англ. Don't repeat yourself)

Также, в отличие от других фреймворков, обработчики URL в Django конфигурируются явно при помощи регулярных выражений.

Для работы с базой данных Django использует собственный ORM, в котором модель данных описывается классами Python, и по ней генерируется схема базы данных.

.

Описание модулей серверной части программы и их взаимодействие.

В работе с северной частью проведено с использованием python c SQLite. Работа с БД осуществляется при помощи следующими командой который отображает информацию на странице сайта c БД SQLite. Большинство функции в python берет на себя фреймворк Django. В Django встроена аутентификация, авторизация и регистрация пользователя, а также админ панель.

Взаимодействие с БД SQLite:

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

}

}

Система регистрации в Django осуществляется следующим образом:

def register(request):

if request.method == 'POST':

form = RegistrationForm(request.POST)

if form.is_valid():

form.save()

return redirect('/')

else:

form = RegistrationForm()

return render(request, 'register.html', {'form': form})

После этого нужно создать форму, где нужно указать поля для регистрации в виде:

class RegistrationForm(UserCreationForm):

email = forms.EmailField(required=True)

class Meta:

model = User

fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')

def save(self, commit=True):

user = super(RegistrationForm, self).save(commit=False)

user.firstname = self.cleaned_data['first_name']

user.last_name = self.cleaned_data['last_name']

user.email = self.cleaned_data['email']

if commit:

user.save()

return user

При помощи Django проводится проверка пользователей. Дальнейший код проводит проверку логинов и паролей.

Пример проверки логинов и паролей:

def signin (request):

username = request.POST['username']

password = request.POST['password']

user = authenticate(request, username=username, password=password)

if user is not None:

login(request, user)

return render(request, 'signin.html')

После входа идет проверка на права доступа. Панель администратора в Django встроенный. Чтобы активировать панель администратора нужно написать следующий код:

from django.contrib import admin

from django.urls import path, include

urlpatterns = [

path('admin/', admin.site.urls),

]

Описание структуры базы данных и ее функций.

База данных в работе является табличную структуру. В базе данных присутствуют таблицы «main_moviepremiere», «main_movie», «main_movie_picture», «main_movieimages», «main_news» рис. 3.1

Рис. 3.1 Взаимосвязь базы данных с сайтом.

В БД SQLite сохраняются данные пользователей. При регистрации они нужны для в хода в систему пользователей. Каждый новый пользовать добавляется с новой строки. В таб. 3.1 краткое пояснение.

Таблица 3.1

Сохранения данных пользователей в базу данных

Наименования

Расшифровка

Разрешения символов

Username

Логин (имя пользователя)

Все символы

Password

Пароль логина

Все символы

Email

Электронный почтовый адрес

Email@mail.com

First Name

Имя пользователя

Все буквы

Last Name

Фамилия пользователя

Все буквы

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

Описание структуры клиентской части.

4.1 Описание интерфейса «Обычный пользователь».

Для посетителей сайта есть доступ на сайт с осмотром информации по кинотеатру рис. 4.1.

Рис. 4.1 главная страница сайта

Для посетителей есть возможность зарегистрироваться рис. 4.2. Если уже зарегистрированы, то можно войти на сайт рис. 4.3. В разделе «О нас» можно узнать историю кинотеатра рис. 4.4.

На сайте также присутствуют и информация об сеансах, информация о ценах рис. 4.5 и также можно узнать о кинотеатре «A CINEMA» ее место нахождением на карте рис. 4.6. Страница событий с информацией о фильмах и акции рис. 4.7.

Рис. 4.2 Регистрации новых пользователей.

Рис. 4.3 Вход пользователей.

Рис. 4.4 О нас.

Рис. 4.5 Страница «Расписание» с расписанием сеанса

Рис. 4.6 Страница «Контакты» с контактами кинотеатра.

Рис. 4.7 Страница «Событие» с информацией о фильмах и акции

4.2 Описание интерфейса «Администратор».

Для администратора есть отдельный панель рис. 4.8 где администратор может изменить записи на странице рис. 4.9, а после сохранить изменения тем самым изменив их на сайте.

Рис. 4.8 Панель «Администратор»

Рис.4.9 Форма редактирования «Панель администратора»

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

Для посетителей сайта можно использовать меню для поиска нужной информации:

«Релизы» -главная страница информации о фильмах в прокате;

«Расписание» -расписание о сеансах, цены, дата и время показа фильмов;

«Событие» -информации о новых фильмах и акции;

«Контакты» - информация о кинотеатре со схемой проезда и контактные номера для сотрудничества;

«Вход» - вход для пользователей или регистрация новых пользователей.

«Регистрация» - регистрация новых пользователей.

«О нас» - история основания кинотеатра.

Заключение

При написании данного курсового проекта были проанализированы существующие языки и редакторы создания сайта, рассмотрены источники по теме работы, разработан сайт по теме кинотеатры, а также разработано руководство пользователя. Разработанный сайт предоставляет пользователю возможности найти информацию о фильмах, сеансах, узнать цены. Таким образом, цель работы достигнута, поставленные задачи выполнены.

. Оценивая проделанную работу, можно сделать следующие выводы:

- сайт предоставляет пользователям наиболее нужную ему информацию, а именно возможность ознакомиться со сеансом кинофильмов;

- реализована навигация с помощью меню по страницам сайта;

Для реализации сайта были использованы следующие средства:

– язык разметки гипертекста html и css;

– язык программирования python;

– Django фреймворк;

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

  1. Доусон М. Программируем на Python. – СПб.: Питер, 2014. – 416 с.
  2. Лутц М. Изучаем Python, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 1280 с.
  3. Лутц М. Программирование на Python, том I, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 992 с.
  4. Лутц М. Программирование на Python, том II, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 992 с.
  5. Прохоренок Н.А. Python 3 и PyQt. Разработка приложений. – СПб.: БХВ-Петербург, 2012. – 704 с.
  6. Вабищевич П. Н. Численные методы. Вычислительный практикум. – – 320 c.
  7. Пилгрим Марк. Погружение в Python 3 (Dive into Python 3 на русском)
  8. Прохоренок Н.А. Самое необходимое. — СПб.: БХВ-Петербург, 2011. — 416 с.
  9. Хахаев И.А. Практикум по алгоритмизации и программированию на Python. – М.: Альт Линукс, 2010. — 126 с. (Библиотека ALT Linux).
  10. Чаплыгин А.Н. Учимся программировать вместе с питоном.
  11. Мейер, Б. Инструменты, алгоритмы и структуры данных / Б. Мейер. - 2-е изд., испр. - М. : Национальный Открытый Университет «ИНТУИТ», 2016. Allen Downey – ThinkPython+Kart[Python_3.2]
  12. https://www.djangoproject.com/
  13. https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django
  14. https://developer.mozilla.org/en-US/docs/Web/HTML
  15. https://html5book.ru/

Приложения

Код html

Base.html:

{% load static %}

<!DOCTYPE html>

<html>

<head>

{% block head %}

{% endblock %}

<meta charset="UTF-8">

<title>Releases</title>

<link rel="stylesheet" href="{% static 'css/base-style.css' %}">

</head>

<body>

<header>

<a href="{% url 'release' %}" class="logo-1"><h1 class="logo">A CINEMA</h1></a>

{% if user.is_authenticated %}

<ul>

<li><a href="{% url 'release' %}">Релизы</a></li>

<li><a href="{% url 'schedule' %}">Расписание</a></li>

<li><a href="{% url 'news' %}">Событие</a></li>

<li><a href="{% url 'contacts' %}">Контакты</a></li>

<a href="{% url 'profile' %}"><button class="register-but">Профиль</button></a>

<a href="{% url 'logout'%}"><button class="signin-but"> Выйти </button></a>

</ul>

{% else %}

<ul>

<li><a href="{% url 'release' %}">Релизы</a></li>

<li><a href="{% url 'schedule' %}">Расписание</a></li>

<li><a href="{% url 'news' %}">Событие</a></li>

<li><a href="{% url 'contacts' %}">Контакты</a></li>

<a href="{% url 'register' %}"><button class="register-but">Регистрация</button></a>

<a href="{% url 'login' %}"><button class="signin-but"> Войти </button></a>

</ul>

{% endif %}

</header>

<!-- <main> -->

{% block body %}

{% endblock %}

<!-- </main> -->

<footer>

<div class="flex-footer">

<p class="footer-logo">A CINEMA</p>

<div class="links">

<a href="{% url 'about_us' %}" class="footer"><p class="footer-link">О Нас</p></a>

<a href="{% url 'ads' %}" class="footer"><p class="footer-link">Реклама</p></a>

<a href="{% url 'jobs' %}" class="footer"><p class="footer-link">Вакансии</p></a>

<a href="{% url 'contacts' %}" class="footer"><p class="footer-link">Контакты</p></a>

</div>

<div class="social-media">

<p class="footer-link">Следите за новостями любимого кинотеатра</p>

<img class="logos" src="{% static 'images/instagram(1).png' %}" alt="">

<img class="logos" src="{% static 'images/vk.png' %}" alt="">

<img class="logos" src="{% static 'images/twitter.png' %}" alt="">

<img src="{% static 'images/facebook(1).png' %}" alt="" class="logos">

<p class="author">Создание и разработка сайта — Ali Karanfil</p>

</div>

</div>

</footer>

</body>

</html>

main-page.html:

{% extends 'base.html' %}

{% load static %}

{% block head %}

<link rel="stylesheet" href="{% static 'css/style-main-page.css' %}">

{% endblock %}

{% block body %}

<main>

<h1 class="movies">фильмы</h1>

<div class="list-movie">

{% for m in movies %}

<div class="flex-movies">

<a href="{% url 'movie' m.movie_name %}"> <img src="{{ m.poster.url }}" alt="" class="first-movie-image"></a>

</div>

{% endfor %}

</div>

<!--<div class="mailing-list">-->

<!--<form action="">-->

<!--<p class="text-mailing-list">Присоединяйтесь к списку рассылки, чтобы оставаться с нами</p>-->

<!--<input class="input-mail" type="text" name="mail">-->

<!--<input class="mailing-button" type="button" value="Отправить"> -->

<!--</form>-->

<!--</div>-->

</main>

{% endblock %}

News.html:

{% extends 'base.html' %}
{% load static %}
{% block head %}
<link rel="stylesheet" href="{% static 'css/style-news.css' %}">
{% endblock %}
{% block body %}
<main class="news">
<h1 class="news-header">Событие</h1>
{% for n in news %}
<div class="news-1">
<div class="part-1">
<img src="{{ n.image.url }}" alt="" class="news-image-1">
</div>
<div class="part-2">
<h5 class="little-header">Событие</h5><hr class="line-1">
<h2 class="news-info">{{ n.title }}</h2>
<hr class="line-2">
<p class="news-text">{{ n.info }}</p>
<a href="{% url 'news_detail' n.title %}"><button class="button-details">Подробнее</button></a>
</div>
</div>
{% endfor %}


</main>

{% endblock %}

News-detail.html:

{% extends 'base.html' %}
{% load static %}

{% block head %}
<link rel="stylesheet" href="{% static 'css/style-news_detail.css' %}">
{% endblock %}

{% block body %}
<!--{% if detail %}-->
<main>

<h1 class="title">{{ detail.title }}</h1>
<hr>
<p class="text-detail">{{ detail.main_text }}</p>

</main>
<!--{% endif %}-->
{% endblock %}

Profile.html:

{% extends 'base.html' %}
{% load static %}
{% block head %}
<link rel="stylesheet" href="{% static 'css/style-profile.css' %}">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
{% endblock %}

{% block body %}
<main>
<div class="container">
<h1>Профиль</h1>
<p>Имя пользователя: {{ user }}</p>
<p>Имя: {{ user.first_name }}</p>
<p>Фамилия: {{ user.last_name }}</p>
<p>Почта: {{ user.email }}</p>
</div>
</main>
{% endblock %}

Register.html:

{% extends 'base.html' %}
{% load static %}

{% block head %}
<link rel="stylesheet" href="{% static 'css/style-register.css' %}">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
{% endblock %}

{% block body %}
<main>
<form method="POST" class="container">
<h1 class="header-little">Создать Аккаунт</h1>
{% csrf_token %}

{{ form.as_p }}

<input type="submit" class="save-button" value="Сохранить">


</form>

</main>
{% endblock %}

Signin.html:

{% extends 'base.html' %}

{% load static %}

{% block head %}

<link rel="stylesheet" href="{% static 'css/style-signin.css' %}">

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

{% endblock %}

{% block body %}

<main>

<div class="signin">

<h1 class="login-text">Войти</h1>

<form action="" class="container" method="POST">

{% csrf_token %}

{{ form.as_p }}

<input class="btn btn-dark" type="submit" value="Войти">

</form>

</div>

</main>

{% endblock %}

Schedule.html:

{% extends 'base.html' %}
{% load static %}
{% block head %}
<link rel="stylesheet" href="{% static 'css/style-schedule.css' %}">
{% endblock %}

{% block body %}
<main class="schedule-main">
<h1 class="schedule">Расписание</h1>

</div>
<hr>
<div class="schedule-movies">
{% for movie in movies %}
<div class="movie-1">
<a href="{% url 'movie' movie.movie_name %}"> <img src="{{ movie.poster.url }}" alt="" class="poster"></a>
<div class="movies-1-1">
<a class="movie-name-link" href="{% url 'movie' movie.movie_name %}"> <h3 class="movie-name">{{ movie.movie_name }}</h3></a>
<p class="genre">{{ movie.age }} {{ movie.genre }} </p>

<ul class="when">
{% for premiere in premieres %}
<li class="quality">{{ premiere.quality }}</li>

<li class="times"><p class="time">{{ premiere.date | date:"D d M Y" }}</p> <p>от {{ premiere.cost }}р.</p></li>
<!--<li class="times"><p class="time">15:30</p> <p>от 350р.</p></li>-->
<!--<li class="times"><p class="time">15:30</p> <p>от 350р.</p></li>-->

{% endfor %}
</ul>
</div>
</div>
{% endfor %}

</div>

</main>

{% endblock %}

movie.html:

{% extends 'base.html' %}
{% load static %}
{% load embed_video_tags %}
{% block head %}
<link rel="stylesheet" href="{% static 'css/style-movie.css' %}">
{% endblock %}

{% block body %}
<main class="main-movie">
<div class="flex-movie">
<div class="flex-1">
<img src="{{ film.poster.url }}" alt="" class="movie-poster">
<p class="movie-age">{{ film.age }}</p>
<h1>{{ film.movie_name }}</h1>
<p class="movie-info-header">Дата премьеры</p>
<p class="movie-info">{{ film.date_release | date:"d M Y" }}</p>
<p class="movie-info-header">Жанр</p>
<p class="movie-info">{{ film.genre }}</p>
<p class="movie-info-header">Режиссер</p>
<p class="movie-info">{{ film.producer }}</p>
<p class="movie-info-header">В ролях</p>
<p class="movie-info">{{ film.actors }}</p>
<p class="movie-info-header">Страна</p>
<p class="movie-info">{{ film.country }}</p>

<p class="movie-info-header">Продолжительность</p>
<p class="movie-info">{{ film.duration }} мин.</p>
<p class="about-movie">{{ film.about }}</p>
</div>

<div class="flex-2">
<div class="movie-week">

</div>

<h3 class="name-of-cinema">Алмаз Синема Алмаз</h3>
<p class="address">Ул. Шаболовка, 56, м. Шаболовская</p>
<ul class="when">
{% for premiere in premieres %}
<li class="quality">{{ premiere.quality }}</li>
<li class="times"><p class="time">{{ premiere.date | date:"D d M Y" }}</p> <p>от {{ premiere.cost }}р.</p></li>

{% endfor %}
</ul>
<a href="{% url 'schedule' %}" class="all-schedule" id="all-sched">ВСЕ РАСПИСАНИЕ</a>
<div class="movie-trailer">
<iframe width="760" height="456" src="{{ film.video }}" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<div class="flex-shots">
<p class="screenshots-header">Кадры</p>
{% for pic in film.pictures.all %}
<img src="{{ pic.images.url }}" alt="" class="screenshots">
{% endfor %}
</div>
</div>
</div>
</main>
{% endblock %}

About-us.html:

{% extends 'base.html' %}
{% load static %}
{% block head %}
<link rel="stylesheet" href="{% static 'css/style-about-us.css' %}">
{% endblock %}

{% block body %}
<main>
<h1 class="movies">О нас</h1>
<p>

Компания «A Cinema» была основана в 2003 году, и в это же время был открыт первый в России легендарный суперкинотеатр IMAX в составе развлекательного комплекса «Киносфера».

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

Зал IMAX привлекает настоящих фанатов кино со всей Москвы и даже из других городов и входит в пятерку лучших IMAX залов в мире. Недавно в кинокомплексе была произведена реконструкция по дизайн-проекту знаменитого архитектора Роберта Майкута.

Помимо зала IMAX в состав комплекса входит 4 зала кинотеатра «Киносфера» с новейшим кинооборудованием, который всегда радует своих зрителей только лучшими новинками проката, акциями, спецпредложениями и проводимыми мероприятиями.

В 2010 году управляющая компания «Киносфера» открыла кинотеатр «Балтика» в ТРЦ «Калейдоскоп», что стало настоящим событием для жителей севера Москвы. Ведь там предлагается полный спектр развлечений для всей семьи и на любой вкус, празднование дней рождений, детские празники, ночные вечеринки, а также проводятся премьерные показы с участием съемочных групп. В репертуаре можно встретить не только новинки, но и хорошие фильмы, которые уже вышли из проката.
</p>

</main>
{% endblock %}

Ads.html:

{% extends 'base.html' %}
{% load static %}
{% block head %}
<link rel="stylesheet" href="{% static 'css/style-about-us.css' %}">
{% endblock %}

{% block body %}
<main>
<h1 class="movies">Размещение рекламы</h1>
<p>

Наши кинотеатры предлагают широкие рекламные возможности как для традиционной рекламы , так для различных спецпроектов.

Реклама в кинозале это реклама на большом экране с великолепный звук. Внимание аудитории полностью приковано к экрану. Сегментирование по времени сеанса, дню недели и показываемой картине позволяет выделить наиболее заинтересованную в сообщении аудиторию.

Ознакомтесь с нашими кинотеатрами перейдя по ссылке.

Перечень основных рекламных возможностей:
- Показ роликов непосредственно перед сеансами.
- Рекламные ролики на плазмах и видеостенах в фойе и ресторанах кинотеатра.
- Распространение рекламной полиграфии (листовок, буклетов), сэмплов с билетами в кассах или на стойках
- Проведение промоакций в фойе кинотеатра.
- Размещение рекламы в лайтбоксах сити-формата в фойе
- Размещение рекламных стоек, ролл-апов в фойе
- Размещение рекламы на обратной стороне билета
- Cпонсорство специальных мероприятий, премьер
- Брендирование стаканов для попкорна.
- Размещение рекламы на столиках в барах, кафе, фойе на спинках кресел в залах.

По вопросам размещения рекламы и просчета рекламных кампаний, обращайтесь в Коммерческий департамент: (495) 771-70-10 (112) или на mb@kinosfera.su
</p>

</main>
{% endblock %}

Contacts.html:

{% extends 'base.html' %}
{% load static %}
{% block head %}
<link rel="stylesheet" href="{% static 'css/style-contacts.css' %}">
{% endblock %}

{% block body %}
<main>
<div class="center-elements">
<h1 class="movies">Контакты</h1>
<img src="{% static 'images/map.png' %}" alt="" class="map-image">
</div>

<div class="flex">
<div class="part-1">
<div class="info">
<a href="#"><p class="phone-number">+7 (495) 771-70-70</p></a>
Администрация кинотеатра
</div>
<div class="info">
<a href="#"><p class="phone-number">+7 (495) 771-70-10 (112)</p></a>
Отдел маркетинга и PR
</div>
<div class="info">
<a href="#"><p class="phone-number">+7 (495) 771-70-16</p></a>
Отдел кадров
</div>
<div class="info">
<a href="#"><p class="phone-number">+ 7 (495) 771-70-10 (103) </p></a>
Поддержка бонусной программы
</div>
<div class="info">
<a href="#"><p class="phone-number">+7 (495) 785-17-03</p></a>
По вопросам электронных билетов
</div>
</div>
<div class="part-2">
<div class="info">
<a href="#"><p class="phone-number">rkkinosfera@kinosfera.su</p></a>
По работе кинотеатра
</div>
<div class="info">
<a href="#"><p class="phone-number">bonus@kinosfera.su</p></a>
По вопросам сотрудничества
</div>
<div class="info">
<a href="#"><p class="phone-number">bonus@kinosfera.su</p></a>
Департамент по персоналу
</div>
<div class="info">
<a href="#"><p class="phone-number">bonus@kinosfera.su </p></a>
По вопросам работы сайта и бонусной программы
</div>
<div class="info">
<a href="#"><p class="phone-number">bonus@kinosfera.su</p></a>
Поддержка по электронным билетам, а также по <br> телефону: 8 800 505-67-91
</div>
</div>
<div class="text-bottom">
<h1>Управляющая компания <br> "A Cinema"</h1>
<p>125445, г. Москва ул. Правобережная д. 1«Б», <br> ТРЦ «Капитолий-Ленинградский», тел.: +7 (495)771-70-1</p>
</div>
</div>

</main>
{% endblock %}

Jobs.html:

{% extends 'base.html' %}
{% load static %}
{% block head %}
<link rel="stylesheet" href="{% static 'css/style-about-us.css' %}">
{% endblock %}

{% block body %}
<main>
<h1 class="movies">Вакансии</h1>
<p>Сотрудники компании Киносфера и наших кинотеатров- это дружный и сплоченный коллектив и главная его задача — обеспечить посетителям комплекса максимум комфорта.

Вам предоставляются ясные перспективы, уверенность в завтрашнем дне, социальная защищенность — мы прилагаем все усилия, чтобы быть идеальным работодателем для своих сотрудников.

Дополнительные преимущества
- Гибкий график работы
- Бесплатное питание
- Бесплатные билеты в кино
- Работа в стабильной компании
- Перспективы карьерного роста

Вам достаточно заполнить анкету или отправить резюме по адресу: kadr@kinosfera.su


</p>

</main>

{% endblock %}

Logout.html:

{% extends 'base.html' %}
{% load static %}
{% block head %}
<link rel="stylesheet" href="{% static 'css/style-about-us.css' %}">
{% endblock %}

{% block body %}
<main>
<h1 class="movies">Вы вышли с аккаунта!</h1>
<p>Спасибо за посещение!</p>
</main>
{% endblock %}

Python(Django) код

Admin.py:

from django.contrib import admin
from .models import Movie, Users, MoviePremiere, News, MovieImages

class MoviePremiereAdmin(admin.ModelAdmin):
list_display = ['day', 'time', 'movie','quality', 'cost']

class MovieAdmin(admin.ModelAdmin):
list_display = ['movie_name', 'date_release', 'duration', 'country', 'genre', 'age']

class MovieImagesAdmin(admin.ModelAdmin):
list_display = ['title', 'images']


admin.site.register(Movie, MovieAdmin)
admin.site.register(Users)
admin.site.register(MoviePremiere, MoviePremiereAdmin)
admin.site.register(News)
admin.site.register(MovieImages)

cinema/urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),
path('', include('main.urls')),
]

forms.py:

from django.forms import ModelForm, Textarea
from .models import Users
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django import forms

class RegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)

class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')

def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.firstname = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.email = self.cleaned_data['email']

if commit:
user.save()

return user

class UsersForm(ModelForm):
class Meta:
model = Users
fields = ('first_name', 'last_name', 'username', 'email', 'password')
# widgets = {
# 'first_name': Textarea(attrs={'font-size':200})
# }

models.py:

from django.db import models
from embed_video.fields import EmbedVideoField


class Users(models.Model):
first_name = models.CharField(max_length=30, blank=False, verbose_name="Имя")
last_name = models.CharField(max_length=50, blank=False, verbose_name="Фамилия")
username = models.CharField(max_length=100, blank=False, verbose_name="Имя Пользователя")
email = models.CharField(max_length=250, blank=False, unique=True, verbose_name="Почта")
password = models.CharField(max_length=100, blank=False, verbose_name="Пароль")

class Meta:
verbose_name = 'Пользователь'
verbose_name_plural = 'Пользователи'
def __str__(self):
return self.username


class MovieImages(models.Model):
images = models.ImageField(upload_to='media/')

class Meta:
verbose_name = 'Кадр'
verbose_name_plural = 'Кадры'

def __str__(self):
return self.images.name


class Movie(models.Model):

genres = [
('horror', 'Ужасы'),
('fantasy', 'Фэнтези'),
('drama', 'Драма'),
('comedy', 'Комедия'),
('action', 'Экшн'),
]

ages = [
('3+', '3+'),
('7+', '7+'),
('13+', '13+'),
('18+', '18+'),
('21+', '21+'),
]

movie_name = models.CharField(max_length=250, blank=False, verbose_name="Название фильма")
poster = models.ImageField(upload_to='media/', blank=False, verbose_name='Постер')
date_release = models.DateTimeField(auto_now=False, auto_now_add=False, blank=False, verbose_name='Дата релиза')
about = models.TextField(verbose_name='О фильме', blank=False)
duration = models.IntegerField(verbose_name='Длительность')
country = models.CharField(max_length=200, blank=False, verbose_name='Страна')
genre = models.CharField(max_length=30, choices=genres, default=None, blank=False, verbose_name='Жанр')
actors = models.TextField(blank=False, verbose_name='Актеры')
producer = models.CharField(max_length=250, blank=False, verbose_name='Режиссер')
age = models.CharField(max_length=2, choices=ages, default=None, blank=False, verbose_name='Возраст')
video = EmbedVideoField(blank=True, verbose_name="Видео")
pictures = models.ManyToManyField(MovieImages)

class Meta:
verbose_name = 'Фильм'
verbose_name_plural = 'Фильмы'

def __str__(self):
return self.movie_name

class MoviePremiere(models.Model):
days = [
('Понедельник', 'Понедельник'),
('Вторник', 'Вторник'),
('Среда', 'Среда'),
('Четверг', 'Четверг'),
('Пятница', 'Пятница'),
('Суббота', 'Суббота'),
('Воскресенье', 'Воскресенье'),
]

qty_2d = '2D'
qualitys = [
(qty_2d, '2D'),
('3D', '3D')
]

date = models.DateField(blank=False, auto_now_add=False, auto_now=False, verbose_name='Дата премьеры')
day = models.CharField(max_length=20, choices=days, default=None, verbose_name='День недели')
time = models.DateTimeField(auto_now=False, auto_now_add=False, blank=False, verbose_name='Время премьеры')
quality = models.CharField(max_length=5, choices=qualitys, default=qty_2d, verbose_name='Качество')
cost = models.DecimalField(max_digits=4, decimal_places=0, verbose_name='Цена')
movie = models.ForeignKey(Movie, on_delete=models.CASCADE)

class Meta:
verbose_name = 'Премьера'
verbose_name_plural = 'Премьеры'

def __str__(self):
return self.day

class News(models.Model):
title = models.CharField(max_length=250, blank=False)
image = models.ImageField(upload_to='media/', blank=False)
info = models.TextField()
main_text = models.TextField()

class Meta:
verbose_name = 'Новость'
verbose_name_plural = 'Новости'

def __str__(self):
return self.title

urls.py:

from django.urls import path
from . import views
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings
from django.contrib.auth import login, logout
from django.contrib.auth.views import LoginView, LogoutView

urlpatterns = [
path('', views.release, name='release'),
path('movie/<str:movie_name>', views.movie, name='movie'),
path('news', views.news, name='news'),
path('schedule', views.schedule, name='schedule'),
path('signin', views.signin, name='signin'),
path('contacts', views.contacts, name='contacts'),
path('about-us', views.about_us, name='about_us'),
path('ads', views.ads, name='ads'),
path('jobs', views.jobs, name='jobs'),
path('news_detail/<str:title>', views.news_detail, name='news_detail'),
path('profile', views.profile, name='profile'),
path('register', views.register, name='register'),
path('login/', LoginView.as_view(template_name='signin.html'), name="login"),
path('logout/', LogoutView.as_view(template_name='logout.html'), name='logout')

# path('login', login, {'template_name': 'signin.html'}),
# path('logout', logout, {'template_name': 'logout.html'}),



]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .forms import UsersForm
from django.contrib.auth.forms import UserCreationForm
from .models import News, Movie, MoviePremiere
from .forms import RegistrationForm


def release(request):
template_name = 'main-page.html'
movies = Movie.objects.all()

args = {
'movies':movies
}

return render(request, template_name, args)

def movie(request, movie_name):
template_name = 'movie.html'
film = Movie.objects.get(movie_name=movie_name)
premieres = MoviePremiere.objects.all()


args = {'film':film, 'premieres':premieres}

return render(request, template_name, args)

def news(request):
template_name = 'news.html'
news = News.objects.all()

args = {
'news': news
}

return render(request, template_name, args)

def contacts(request):
template_name = 'contacts.html'
return render(request, template_name)

def about_us(request):
template_name = 'about-us.html'
return render(request, template_name)

def ads(request):
template_name = 'ads.html'
return render(request, template_name)

def jobs(request):
template_name = 'jobs.html'
return render(request, template_name)

def profile(request):
template_name = 'profile.html'
return render(request,template_name)

def schedule(request):
template_name = 'schedule.html'
schedule_movie = Movie.objects.all()
premiere = MoviePremiere.objects.all()

args = {'movies': schedule_movie, 'premieres': premiere}

return render(request, template_name, args)

def news_detail(request, title):
template_name = 'news-detail.html'

detail = News.objects.get(title=title)

args = {
'detail': detail
}

return render(request, template_name, args)

def signin(request):
return render(request, 'signin.html')

def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
form = RegistrationForm()
return render(request, 'register.html', {'form': form})