From ce5d817fd081b27fd0cd877748e318eb4ce33140 Mon Sep 17 00:00:00 2001 From: Alena Date: Mon, 14 Aug 2023 15:33:46 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=B4=D0=B7=20=E2=84=9614,=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D1=87=D0=B0=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Stupina/homework_14/htmlcov/index.html | 102 ++++++++++++ .../homework_14/htmlcov/task_2_py.html | 151 ++++++++++++++++++ Practice/Stupina/homework_14/task_2.py | 54 +++++++ Practice/Stupina/homework_14/test_task_2.py | 39 +++++ 4 files changed, 346 insertions(+) create mode 100644 Practice/Stupina/homework_14/htmlcov/index.html create mode 100644 Practice/Stupina/homework_14/htmlcov/task_2_py.html create mode 100644 Practice/Stupina/homework_14/task_2.py create mode 100644 Practice/Stupina/homework_14/test_task_2.py diff --git a/Practice/Stupina/homework_14/htmlcov/index.html b/Practice/Stupina/homework_14/htmlcov/index.html new file mode 100644 index 0000000..7472c95 --- /dev/null +++ b/Practice/Stupina/homework_14/htmlcov/index.html @@ -0,0 +1,102 @@ + + + + + Coverage report + + + + + +
+
+

Coverage report: + 46% +

+ +
+ +
+

+ coverage.py v7.2.7, + created at 2023-08-14 15:32 +0300 +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Modulestatementsmissingexcludedcoverage
task_2.py3921046%
Total3921046%
+

+ No items found using the specified filter. +

+
+ + + diff --git a/Practice/Stupina/homework_14/htmlcov/task_2_py.html b/Practice/Stupina/homework_14/htmlcov/task_2_py.html new file mode 100644 index 0000000..dfa0c55 --- /dev/null +++ b/Practice/Stupina/homework_14/htmlcov/task_2_py.html @@ -0,0 +1,151 @@ + + + + + Coverage for task_2.py: 46% + + + + + +
+ +
+
+

1class IncorrectDataInput(Exception): 

+

2 pass 

+

3 

+

4 

+

5class Money: 

+

6 def __init__(self, x, y): 

+

7 if isinstance(x, int) and isinstance(y, int): 

+

8 if x >= 0 and 0 <= y < 100: 

+

9 self.__x = x 

+

10 self.__y = y 

+

11 self._money = float(f'{self.__x}.{self.__y}') 

+

12 else: 

+

13 raise IncorrectDataInput 

+

14 else: 

+

15 print('Некорректный тип атрибутов') 

+

16 @property 

+

17 def money(self): 

+

18 return self._money 

+

19 

+

20 def __str__(self): 

+

21 return f'{self.__x},{self.__y}' 

+

22 

+

23 def __add__(self, other): 

+

24 res = round(self._money + other._money, 2) 

+

25 res = str(res).split('.') 

+

26 return Money(int(res[0]), int(res[1])) 

+

27 

+

28 def __sub__(self, other): 

+

29 

+

30 res = round(self._money - other._money, 2) 

+

31 if res < 0: 

+

32 print('Денежная сумма не может быть отрицательной') 

+

33 return None 

+

34 else: 

+

35 res = str(res).split('.') 

+

36 return Money(int(res[0]), int(res[1])) 

+

37 

+

38 def __lt__(self, other): 

+

39 return self._money < other._money 

+

40 

+

41 def __eq__(self, other): 

+

42 return self._money == other._money 

+

43 

+

44 def __le__(self, other): 

+

45 return self._money <= other._money 

+

46 

+

47 

+

48if __name__ == '__main__': 

+

49 ob1 = Money(10, 20) 

+

50 ob2 = Money(10, 4) 

+

51 

+

52 print(ob1, ob2) 

+

53 print(ob1 - ob2) 

+

54 print(ob1 >= ob2) 

+
+ + + diff --git a/Practice/Stupina/homework_14/task_2.py b/Practice/Stupina/homework_14/task_2.py new file mode 100644 index 0000000..e40cda5 --- /dev/null +++ b/Practice/Stupina/homework_14/task_2.py @@ -0,0 +1,54 @@ +class IncorrectDataInput(Exception): + pass + + +class Money: + def __init__(self, x, y): + if isinstance(x, int) and isinstance(y, int): + if x >= 0 and 0 <= y < 100: + self.__x = x + self.__y = y + self._money = float(f'{self.__x}.{self.__y}') + else: + raise IncorrectDataInput + else: + print('Некорректный тип атрибутов') + @property + def money(self): + return self._money + + def __str__(self): + return f'{self.__x},{self.__y}' + + def __add__(self, other): + res = round(self._money + other._money, 2) + res = str(res).split('.') + return Money(int(res[0]), int(res[1])) + + def __sub__(self, other): + + res = round(self._money - other._money, 2) + if res < 0: + print('Денежная сумма не может быть отрицательной') + return None + else: + res = str(res).split('.') + return Money(int(res[0]), int(res[1])) + + def __lt__(self, other): + return self._money < other._money + + def __eq__(self, other): + return self._money == other._money + + def __le__(self, other): + return self._money <= other._money + + +if __name__ == '__main__': + ob1 = Money(10, 20) + ob2 = Money(10, 4) + + print(ob1, ob2) + print(ob1 - ob2) + print(ob1 >= ob2) diff --git a/Practice/Stupina/homework_14/test_task_2.py b/Practice/Stupina/homework_14/test_task_2.py new file mode 100644 index 0000000..998e0a2 --- /dev/null +++ b/Practice/Stupina/homework_14/test_task_2.py @@ -0,0 +1,39 @@ +import unittest +from task_2 import Money, IncorrectDataInput + + +class MyTest(unittest.TestCase): + ob1 = Money(10, 20) + ob2 = Money(10, 0) + ob3 = Money(5, 30) + + def test_money_eq(self): + self.assertEquals(str(self.ob1), '10,20') + + def test_sub(self): + self.assertEquals(str(self.ob1-self.ob2), '0,2') + + def test_add(self): + self.assertEquals(str(self.ob1 + self.ob3), '15,5') + + def test_lt(self): + self.assertTrue(self.ob1 > self.ob3) + + def test_eq(self): + self.assertFalse(self.ob1 == self.ob3) + + def test_le(self): + self.assertTrue(self.ob2 <= self.ob1) + + def test_er(self): + with self.assertRaises(IncorrectDataInput): + Money(-5, 30) + + def test_er1(self): + with self.assertRaises(IncorrectDataInput): + Money(5, 306) + + + + + From d6fbe211563cf0678d28f5ac00928a901ab1d8c3 Mon Sep 17 00:00:00 2001 From: Alena Date: Tue, 15 Aug 2023 22:59:34 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=B4=D0=B7=20=E2=84=9615,=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=201-4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Practice/Stupina/coolapp/admin.py | 9 ++ Practice/Stupina/coolapp/forms.py | 15 +++ Practice/Stupina/coolapp/models.py | 24 ++++ Practice/Stupina/coolapp/static/favicon.png | Bin 0 -> 59760 bytes .../coolapp/templates/coolapp/base.html | 22 +++ .../coolapp/templates/coolapp/film_id.html | 25 ++++ .../coolapp/templates/coolapp/films.html | 18 +++ .../coolapp/templates/coolapp/index.html | 12 ++ .../coolapp/templates/coolapp/new.html | 16 +++ .../coolapp/templates/coolapp/no_exit.html | 7 + Practice/Stupina/coolapp/urls.py | 14 ++ Practice/Stupina/coolapp/views.py | 46 +++++++ Practice/Stupina/coolsite/settings.py | 127 ++++++++++++++++++ Practice/Stupina/coolsite/urls.py | 35 +++++ Practice/Stupina/db.sqlite3 | Bin 0 -> 147456 bytes Practice/Stupina/manage.py | 22 +++ 16 files changed, 392 insertions(+) create mode 100644 Practice/Stupina/coolapp/admin.py create mode 100644 Practice/Stupina/coolapp/forms.py create mode 100644 Practice/Stupina/coolapp/models.py create mode 100644 Practice/Stupina/coolapp/static/favicon.png create mode 100644 Practice/Stupina/coolapp/templates/coolapp/base.html create mode 100644 Practice/Stupina/coolapp/templates/coolapp/film_id.html create mode 100644 Practice/Stupina/coolapp/templates/coolapp/films.html create mode 100644 Practice/Stupina/coolapp/templates/coolapp/index.html create mode 100644 Practice/Stupina/coolapp/templates/coolapp/new.html create mode 100644 Practice/Stupina/coolapp/templates/coolapp/no_exit.html create mode 100644 Practice/Stupina/coolapp/urls.py create mode 100644 Practice/Stupina/coolapp/views.py create mode 100644 Practice/Stupina/coolsite/settings.py create mode 100644 Practice/Stupina/coolsite/urls.py create mode 100644 Practice/Stupina/db.sqlite3 create mode 100644 Practice/Stupina/manage.py diff --git a/Practice/Stupina/coolapp/admin.py b/Practice/Stupina/coolapp/admin.py new file mode 100644 index 0000000..4c434ef --- /dev/null +++ b/Practice/Stupina/coolapp/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +# Register your models here. + +from django.contrib import admin +from .models import Film, Comments + +admin.site.register(Film) +admin.site.register(Comments) diff --git a/Practice/Stupina/coolapp/forms.py b/Practice/Stupina/coolapp/forms.py new file mode 100644 index 0000000..04b093c --- /dev/null +++ b/Practice/Stupina/coolapp/forms.py @@ -0,0 +1,15 @@ +from django import forms +from .models import Film, Comments + + +class FilmForm(forms.ModelForm): + class Meta: + model = Film + fields = ('name', 'state', 'date_exist', 'desc', 'rate') +# поля pub_date и id заполняются сами + + +class CommentsForm(forms.ModelForm): + class Meta: + model = Comments + fields = ('comment',) diff --git a/Practice/Stupina/coolapp/models.py b/Practice/Stupina/coolapp/models.py new file mode 100644 index 0000000..800cf9b --- /dev/null +++ b/Practice/Stupina/coolapp/models.py @@ -0,0 +1,24 @@ +from django.db import models +from django.core.validators import MaxValueValidator, MinValueValidator + +# Create your models here. +class Film(models.Model): + #атрибуты name, desc, pub_date, rate - столбцы + name = models.CharField(max_length=200) + # TextField() - тип поля + state = models.TextField(null=True) + date_exist = models.DateField(default='0') + desc = models.TextField() + # 'date published' - как поле будет выглядеть при выводе на экран в терминале + # auto_now_add=True - когда будет добавляться новая запись, + # это поле будет автоматически проставляться, исходя из текущего времени + pub_date = models.DateTimeField('date published', auto_now_add=True) + rate = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(10)], default=1) + + +class Comments(models.Model): + films_id = models.ForeignKey(Film, on_delete=models.CASCADE, null=True) + comment = models.TextField() + + + diff --git a/Practice/Stupina/coolapp/static/favicon.png b/Practice/Stupina/coolapp/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..a167f51d25486003c18dbc0cd0efb781143f7a4a GIT binary patch literal 59760 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 c001!Ze*ufH=Q7Ye2><{907*qoM6N<$g7tm +{% load static %} + + + + + + + + + About films + + + +

Site about films

+

Фильмы

+

Создать новый фильм

+
+ {% block content %} + {% endblock %} + + diff --git a/Practice/Stupina/coolapp/templates/coolapp/film_id.html b/Practice/Stupina/coolapp/templates/coolapp/film_id.html new file mode 100644 index 0000000..ef997d7 --- /dev/null +++ b/Practice/Stupina/coolapp/templates/coolapp/film_id.html @@ -0,0 +1,25 @@ +{% extends 'coolapp/base.html' %} +{% block content %} + + +

{{ film.name }}

+

Страна : - {{ film.state }}

+

Описание: {{ film.desc }}

+

Дата создания: {{ film.date_exist }}

+{% if film.pub_date %} +

Дата публикации отзыва: - {{ film.pub_date }}

+{% else %} +

Дата публикации отзыва: - Unknown

+{% endif %} +

Оценка: {{ film.rate }}

+{% for com in comm %} +

Комментарии: {{com.comment }}

+{% endfor %} + +

Оставить комментарий:

+
{% csrf_token %} + {{ com_form.as_p }} + + +
+{% endblock content %} diff --git a/Practice/Stupina/coolapp/templates/coolapp/films.html b/Practice/Stupina/coolapp/templates/coolapp/films.html new file mode 100644 index 0000000..b7a9bd1 --- /dev/null +++ b/Practice/Stupina/coolapp/templates/coolapp/films.html @@ -0,0 +1,18 @@ +{% extends 'coolapp/base.html' %} +{% block content %} + + +{% for film in films %} + +

{{ film.name }}

+

Описание: {{ film.desc }}

+{% if film.pub_date %} +

Дата публикации : - {{ film.pub_date }}

+{% else %} +

Дата публикации: - Unknown

+{% endif %} +

Оценка : {{ film.rate }}

+{% endfor %} + + +{% endblock content %} diff --git a/Practice/Stupina/coolapp/templates/coolapp/index.html b/Practice/Stupina/coolapp/templates/coolapp/index.html new file mode 100644 index 0000000..07bb8a8 --- /dev/null +++ b/Practice/Stupina/coolapp/templates/coolapp/index.html @@ -0,0 +1,12 @@ + + +{% extends 'coolapp/base.html' %} +{% block content %} +
+

Hello everybody!

+

Вы находитесь на сайте "{{sitename}}".

+

Здесь Вы можете найти информацию о фильмах, их краткое описание и рейтинг

+
+ +{% endblock content %} diff --git a/Practice/Stupina/coolapp/templates/coolapp/new.html b/Practice/Stupina/coolapp/templates/coolapp/new.html new file mode 100644 index 0000000..0dd155a --- /dev/null +++ b/Practice/Stupina/coolapp/templates/coolapp/new.html @@ -0,0 +1,16 @@ +{% extends 'coolapp/base.html' %} +{% block content %} + + + +

Добавление нового фильма

+{% if flag %} +
{% csrf_token %} +{{ form.as_p }} + +
+{% else %} +

Ошибка: У Вас нет прав для данной операции!

+{% endif %} + +{% endblock content %} \ No newline at end of file diff --git a/Practice/Stupina/coolapp/templates/coolapp/no_exit.html b/Practice/Stupina/coolapp/templates/coolapp/no_exit.html new file mode 100644 index 0000000..0008d3b --- /dev/null +++ b/Practice/Stupina/coolapp/templates/coolapp/no_exit.html @@ -0,0 +1,7 @@ + +{% extends 'coolapp/base.html' %} +{% block content %} + +

Error: Фильма с таким id на сайте еще нет!

+ +{% endblock content %} \ No newline at end of file diff --git a/Practice/Stupina/coolapp/urls.py b/Practice/Stupina/coolapp/urls.py new file mode 100644 index 0000000..8fd7d9c --- /dev/null +++ b/Practice/Stupina/coolapp/urls.py @@ -0,0 +1,14 @@ +from django.urls import path +from . import views + +# ---если сюда приходит код какой-то,мы при помощи шаблона urlpatterns перенаправляем этот код в views.index. +# name='index' - это псевдоним для получившегося url, чтоб удобней было обращаться к тому же ресурсу (функции) +# из кода в некоторых случаях. + +urlpatterns = [ + path('', views.index, name='index'), + path('films/', views.films, name='films'), + path('new/', views.new, name='new'), + # если в запросе число: + path('/', views.new, name='new'), +] diff --git a/Practice/Stupina/coolapp/views.py b/Practice/Stupina/coolapp/views.py new file mode 100644 index 0000000..bdceaad --- /dev/null +++ b/Practice/Stupina/coolapp/views.py @@ -0,0 +1,46 @@ +from django.shortcuts import render, redirect +from .models import Film, Comments +from .forms import FilmForm, CommentsForm + + +def index(request): + return render(request, 'coolapp/index.html', {'sitename': 'О фильмах'}) + + +def films(request): + return render(request, 'coolapp/films.html', {'films': Film.objects.all()}) + + +def new(request, film_id=None): + if film_id: + film = Film.objects.get(id=film_id) + if request.method == "POST": + text = request.POST['comment'] + c = Comments(films_id=film, comment=text) + c.save() + return redirect(f'/{film.id}', film=film) + + else: + try: + comments = Comments.objects.filter(films_id=film_id) + return render(request, 'coolapp/film_id.html', + {'film': film, 'comm': comments, 'com_form': CommentsForm(instance=Comments())}) + except Exception: + return render(request, 'coolapp/no_exit.html') + + elif request.method == "POST": + form = FilmForm(request.POST) + print(form.is_valid()) + if form.is_valid(): + film = form.save() + return redirect(f'/{film.id}', film=film) + else: + if request.user.is_superuser: + film = Film() + flag = True + d = {'form': FilmForm(instance=film)} + else: + flag = False + d = {} + d = d | {'flag': flag} + return render(request, 'coolapp/new.html', d) diff --git a/Practice/Stupina/coolsite/settings.py b/Practice/Stupina/coolsite/settings.py new file mode 100644 index 0000000..cacbb2e --- /dev/null +++ b/Practice/Stupina/coolsite/settings.py @@ -0,0 +1,127 @@ +""" +Django settings for coolsite project. + +Generated by 'django-admin startproject' using Django 4.2.4. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/ref/settings/ +""" + +from pathlib import Path +import os + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-#*q%rz8b35ad*mn4tqj!e%tinjn_sjyxef$fokj#e9b%64+50p' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition +# это приложения, в котором модно использовать шаблоны +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'coolapp' +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'coolsite.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'coolsite.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Europe/Moscow' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'static') + + +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/Practice/Stupina/coolsite/urls.py b/Practice/Stupina/coolsite/urls.py new file mode 100644 index 0000000..c656034 --- /dev/null +++ b/Practice/Stupina/coolsite/urls.py @@ -0,0 +1,35 @@ +""" +URL configuration for coolsite project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.conf.urls import include +from django.urls import path +from django.contrib import admin + +# --прописываем связь с coolapp.urls +# Когда мы обращаемся к серверу (127.0.0.1:8000) приходит запрос, +# сервер начинает анализировать, что дальше идет посде запроса : # к какому ресурсу/файлу/скрипту на сервере идет обращение. +# 127.0.0.1:8000 - пустой запрос +# Если запрос 127.0.0.1:8000/coolapp/ - попадая в главный файл URL, указанная часть URL (coolapp) +# будет сравниваться с каждым шаблоном из списка (coolapp/ - шаблон). Если шаблон совпал, анализируется дальше. +# include('coolapp.urls') - расширяет шаблон: path('coolapp/', views.index, name='index'), +# и вызывается coolapp.views.index--- + + +urlpatterns = [ + path('admin/', admin.site.urls), + path('coolapp/', include('coolapp.urls')), + path('', include('coolapp.urls')), +] diff --git a/Practice/Stupina/db.sqlite3 b/Practice/Stupina/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..15d182527aa51ee9ade67dd8e3cf00f745bf0ac9 GIT binary patch literal 147456 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 aEzdtZ(gk7)D7*&G3A_YP2+%whAozcQQHpQ? literal 0 HcmV?d00001 diff --git a/Practice/Stupina/manage.py b/Practice/Stupina/manage.py new file mode 100644 index 0000000..445748c --- /dev/null +++ b/Practice/Stupina/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'coolsite.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main()