Разработка сайта кинотеатра «A CINEMA»
Содержание:
Введение
Интернет стал, наиболее эффективным средством рекламы и продвижения и является одним из важных элементов современной цивилизации. Интернет может удовлетворить все потребности современного человека: это покупки, заключение деловых отношений, поиск клиентов и так далее. Но многие заходят в Интернет читать, развлекаться, общаться, узнавать что-то новое для себя. Поэтому создание сайтов стало таким популярным.
В данной работе будет создан сайт кинотеатра, на котором посетители сайта смогут посмотреть время сеанса или зарегистрироваться. Для выполнения поставленных работы необходимо:
- разработать страницы сайта на основе HTML кода;
- спроектировать таблицы стилей CSS для применения их на страницах сайта;
- создать базу данных для сайта на основе SQLite3;
- создать код Python (Django framework) для работы с данными.
Техническое задание и выбор средств реализации.
Техническое задание.
Необходимо разработать сайт «кинотеатр». Сайт должен быть выполнен, соблюдая следующие правила:
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@mail.com |
First Name |
Имя пользователя |
Все буквы |
Last Name |
Фамилия пользователя |
Все буквы |
В отдельном панели администратора администратор контролирует контент, имеет право изменять данные пользователей, удалять пользователя, а для обычного пользователя все эти возможности недоступны.
Описание структуры клиентской части.
Описание интерфейса «Обычный пользователь».
Для посетителей сайта есть доступ на сайт с осмотром информации по кинотеатру рис. 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.8 где администратор может изменить записи на странице рис. 4.9, а после сохранить изменения тем самым изменив их на сайте.
Рис. 4.8 Панель «Администратор»
Рис.4.9 Форма редактирования «Панель администратора»
Инструкция пользователя.
Для посетителей сайта можно использовать меню для поиска нужной информации:
«Релизы» -главная страница информации о фильмах в прокате;
«Расписание» -расписание о сеансах, цены, дата и время показа фильмов;
«Событие» -информации о новых фильмах и акции;
«Контакты» - информация о кинотеатре со схемой проезда и контактные номера для сотрудничества;
«Вход» - вход для пользователей или регистрация новых пользователей.
«Регистрация» - регистрация новых пользователей.
«О нас» - история основания кинотеатра.
Заключение
При написании данного курсового проекта были проанализированы существующие языки и редакторы создания сайта, рассмотрены источники по теме работы, разработан сайт по теме кинотеатры, а также разработано руководство пользователя. Разработанный сайт предоставляет пользователю возможности найти информацию о фильмах, сеансах, узнать цены. Таким образом, цель работы достигнута, поставленные задачи выполнены.
. Оценивая проделанную работу, можно сделать следующие выводы:
- сайт предоставляет пользователям наиболее нужную ему информацию, а именно возможность ознакомиться со сеансом кинофильмов;
- реализована навигация с помощью меню по страницам сайта;
Для реализации сайта были использованы следующие средства:
– язык разметки гипертекста html и css;
– язык программирования python;
– Django фреймворк;
Список использованной литературы
- Доусон М. Программируем на Python. – СПб.: Питер, 2014. – 416 с.
- Лутц М. Изучаем Python, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 1280 с.
- Лутц М. Программирование на Python, том I, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 992 с.
- Лутц М. Программирование на Python, том II, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2011. – 992 с.
- Прохоренок Н.А. Python 3 и PyQt. Разработка приложений. – СПб.: БХВ-Петербург, 2012. – 704 с.
- Вабищевич П. Н. Численные методы. Вычислительный практикум. – – 320 c.
- Пилгрим Марк. Погружение в Python 3 (Dive into Python 3 на русском)
- Прохоренок Н.А. Самое необходимое. — СПб.: БХВ-Петербург, 2011. — 416 с.
- Хахаев И.А. Практикум по алгоритмизации и программированию на Python. – М.: Альт Линукс, 2010. — 126 с. (Библиотека ALT Linux).
- Чаплыгин А.Н. Учимся программировать вместе с питоном.
- Мейер, Б. Инструменты, алгоритмы и структуры данных / Б. Мейер. - 2-е изд., испр. - М. : Национальный Открытый Университет «ИНТУИТ», 2016. Allen Downey – ThinkPython+Kart[Python_3.2]
- https://www.djangoproject.com/
- https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django
- https://developer.mozilla.org/en-US/docs/Web/HTML
- 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})
- ВНУТРЕННИЕ И ВНЕШНИЕ ФУНКЦИИ ГОСУДАРСТВА
- Понятие и сущность наследования.
- Лицензирование отдельных видов предпринимательской деятельности (ПД)
- Авторские права.
- Процессы принятия решений в организации «7ТУР»
- Проектные структуры управления»
- Исчисление общего и специального трудового стажа»
- Основные функции в системе менеджмента, ООО «СпортМир»
- Особенности государственного регулирования индустрии спорта.
- Правовые основы оперативно-розыскной деятельности. Структура ФЗ «Об оперативно-розыскной деятельности»
- Индивидуальное предпринимательство (проблемы в РФ)
- Принципы и основания наследования( Общие положения о наследовании в гражданском праве)