From 2b2d60f5ea8094be23c01dfef17a050718f68756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9=20=D0=91=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D1=85=D0=BE=D0=B2=D1=81=D0=BA=D0=B8=D0=B9?= Date: Sun, 2 Aug 2020 22:32:29 +0300 Subject: [PATCH 1/9] HW7: Barahovskiy Vitaliy --- __init__.py | 0 src/task_10_1.py | 33 ++++++++++ src/task_10_2.py | 14 +++++ src/task_10_3.py | 8 +++ src/task_5_10.py | 51 +++++++++++++++ src/task_7.py | 161 +++++++++++++++++++++++++++++++++++++++++++++++ src/task_8_1.py | 18 ++++++ src/task_8_2.py | 10 +++ src/task_9_1.py | 6 ++ src/task_9_2.py | 6 ++ 10 files changed, 307 insertions(+) create mode 100644 __init__.py create mode 100644 src/task_10_1.py create mode 100644 src/task_10_2.py create mode 100644 src/task_10_3.py create mode 100644 src/task_5_10.py create mode 100644 src/task_7.py create mode 100644 src/task_8_1.py create mode 100644 src/task_8_2.py create mode 100644 src/task_9_1.py create mode 100644 src/task_9_2.py diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/task_10_1.py b/src/task_10_1.py new file mode 100644 index 0000000..a46ec09 --- /dev/null +++ b/src/task_10_1.py @@ -0,0 +1,33 @@ +# Имеется текстовый файл. Напечатать: +# a) его первую строку; +# b) его пятую строку; +# c) его первые 5 строк; +# d) его строки с s1-й по s2-ю; +# e) весь файл. +# Вывел весь фаил +f = open('test1.txt', 'r') +print(f.read()) +f.close() +# вывод первой строки +f = open('test1.txt', 'r') +print(f.readline()) +f.close() +# вывод 5 строк +f = open('test1.txt', 'r') +print(f.readline()) +print(f.readline()) +print(f.readline()) +print(f.readline()) +print(f.readline()) +f.close() +# вывод с 1 по 2 строку +f = open('test1.txt', 'r') +print(f.readline()) +print(f.readline()) +f.close() +# вывод 5 строки +with open('test1.txt') as f: + for i, line in enumerate(f): + if i % 5 == 4: + print(line) +f.close() \ No newline at end of file diff --git a/src/task_10_2.py b/src/task_10_2.py new file mode 100644 index 0000000..4a888d5 --- /dev/null +++ b/src/task_10_2.py @@ -0,0 +1,14 @@ +# Создать текстовый файл и записать в него 6 строк. +# Записываемые строки вводятся с клавиатуры + + +f = open('test.txt', 'w') +n = input() +v = input() +c = input() +x = input() +z = input() +l = input() +for index in [n, v, c, x, z, l]: + f.write(index + '\n') +f.close() \ No newline at end of file diff --git a/src/task_10_3.py b/src/task_10_3.py new file mode 100644 index 0000000..d9df2ca --- /dev/null +++ b/src/task_10_3.py @@ -0,0 +1,8 @@ +# В конец существующего текстового файла записать три новые строки текста. +# Записываемые строки вводятся с клавиатуры + +with open('test.txt', 'a') as my_f: + h = input() + b = input() + c = input() + my_f.writelines(['\n', h,'\n', b,'\n', c]) \ No newline at end of file diff --git a/src/task_5_10.py b/src/task_5_10.py new file mode 100644 index 0000000..d3e2e32 --- /dev/null +++ b/src/task_5_10.py @@ -0,0 +1,51 @@ +# Создать список поездов. Структура словаря: номер поезда, +# пункт и время прибытия, пункт и время отбытия. Вывести все сведения о поездах, +# время пребывания в пути которых превышает 7 часов 20 минут.[02-7.3-ML02] +from datetime import timedelta +pyteshestvia = [ + { + "номер": 1, + "пункт прибытия": "Minsk", + "время прибытия": timedelta(hours=8, minutes=50), + "пункт отправления": "Grodno", + "время отправления": timedelta(hours=22, minutes=50), + }, + { + "номер": 2, + "пункт прибытия": "Minsk", + "время прибытия": timedelta(hours=21, minutes=00), + "пункт отправления": "Astana", + "время отправления": timedelta(hours=14, minutes=00), + }, + { + "номер": 3, + "пункт прибытия": "Minsk", + "время прибытия": timedelta(hours=18, minutes=20), + "пункт отправления": "Varshawa", + "время отправления": timedelta(hours=10, minutes=00), + }, + { + "номер ": 4, + "пункт прибытия": "Minsk", + "время прибытия": timedelta(hours=20, minutes=19), + "пункт отправления": "Gudugau", + "время отправления": timedelta(hours=18, minutes=12), + }, +] + +for i in pyteshestvia: + delta = i["время прибытия"] - i["время отправления"] + if delta >= timedelta(hours=7, minutes=20): + print(f"\nНомер: {i['номер']}") + print(f"Пункт прибытия: {i['пункт прибытия']}") + print(f"Время прибытия: {i['время прибытия']}") + print(f"Пункт отправления: {i['пункт отправления']}") + print(f"Время отправления: {i['время отправления']}") +for i in pyteshestvia: + delta1 = i["время отправления"] - i["время прибытия"] + if delta1 >= timedelta(hours=7, minutes=20): + print(f"\nНомер: {i['номер']}") + print(f"Пункт прибытия: {i['пункт прибытия']}") + print(f"Время прибытия: {i['время прибытия']}") + print(f"Пункт отправления: {i['пункт отправления']}") + print(f"Время отправления: {i['время отправления']}") \ No newline at end of file diff --git a/src/task_7.py b/src/task_7.py new file mode 100644 index 0000000..3780fb9 --- /dev/null +++ b/src/task_7.py @@ -0,0 +1,161 @@ +# Написать 12 функций по переводу: +# 1. Дюймы в сантиметры +# 2. Сантиметры в дюймы +# 3. Мили в километры +# 4. Километры в мили +# 5. Фунты в килограммы +# 6. Килограммы в фунты +# 7. Унции в граммы +# 8. Граммы в унции +# 9. Галлон в литры +# 10. Литры в галлоны +# 11. Пинты в литры +# 12. Литры в пинты +# Примечание: функция принимает на вход число и возвращает конвертированное число +# 2. Написать программу, со следующим интерфейсом: пользователю предоставляется на +# выбор 12 вариантов перевода(описанных в первой задаче). Пользователь вводит цифру +# от одного до двенадцати. После программа запрашивает ввести численное значение. +# Затем программа выдает конвертированный результат. Использовать функции из первого +# задания. Программа должна быть в бесконечном цикле. Код выхода из программы - “0” + +def duim_v_sant(duim): + sant = duim * 2.54 + print(f"В {duim} дюймах {sant} сантимантов") + return sant, duim + +def sant_v_duim(sant): + duim = sant / 2.54 + print(f"В {sant} сантимантрах {duim} дюймов ") + return duim, sant + + +def mili_v_kilom(mili): + kilom = mili * 1.609 + print(f"В {mili} милях {kilom} километров") + return mili, kilom + + +def kilom_v_mili(kilom): + mili = kilom / 1.609 + print(f"В {kilom} километрах {mili} миль") + return kilom, mili + + +def funt_v_kilog(funt): + kilog = funt / 2.205 + print(f"В {funt} фунтах {kilog} килограмм") + return funt, kilog + + +def kilog_v_funt(kilog): + funt = kilog * 2.205 + print(f"В {kilog} килограммах {funt} фунтов") + return kilog, funt + + +def uncii_v_gramm(uncii): + gramm = uncii / 0.0353 + print(f"В {uncii} унциях {gramm} грамм") + return uncii, gramm + + +def gramm_v_uncii(gramm): + uncii = gramm * 0.0353 + print(f"В {gramm} граммах {uncii} унций") + return gramm, uncii + + +def gallon_v_litr(gallon): + litr = gallon * 3.785 + print(f"В {gallon} галлонах {litr} литров") + return gallon, litr + + +def litr_v_gallon(litr): + gallon = litr / 3.785 + print(f"В {litr} литрах {gallon} галлонов") + return litr, gallon + + +def pint_v_litr(pint): + litr = pint / 0.568261 + print(f"В {pint} пинтах {litr} литров") + return pint, litr + + +def litr_v_pint(litr): + pint = litr * 0.568261 + print(f"В {litr} литрах {pint} пинт") + return litr, pint + +while True: + print('1. Дюймы в сантиметры\n' + '2. Сантиметры в дюймы\n' + '3. Мили в километры\n' + '4. Километры в мили\n' + '5. Фунты в килограммы\n' + '6. Килограммы в фунты\n' + '7. Унции в граммы\n' + '8. Граммы в унции\n' + '9. Галлон в литры\n' + '10. Литры в галлоны\n' + '11. Пинты в литры\n' + '12. Литры в пинты\n') + + x = int(input('Выберите операцию(Введите номер операции): ')) + + if x == 1: + y = int(input('Введите количество дюймов: ')) + duim_v_sant(y) + print() + elif x == 2: + y = int(input('Введите количество сантиметров: ')) + sant_v_duim(y) + print() + elif x == 3: + y = int(input('Введите количество миль: ')) + mili_v_kilom(y) + print() + elif x == 4: + y = int(input('Введите количество километров: ')) + kilom_v_mili(y) + print() + elif x == 5: + y = int(input('Введите количество фунтов: ')) + funt_v_kilog(y) + print() + elif x == 6: + y = int(input('Введите количество килограмм: ')) + kilog_v_funt(y) + print() + elif x == 7: + y = int(input('Введите количество унций: ')) + uncii_v_gramm(y) + print() + elif x == 8: + y = int(input('Введите количество грамм: ')) + gramm_v_uncii(y) + print() + elif x == 9: + y = int(input('Введите количество галлонов: ')) + gallon_v_litr(y) + print() + elif x == 10: + y = int(input('Введите количество литров: ')) + litr_v_gallon(y) + print() + elif x == 11: + y = int(input('Введите количество пинт: ')) + pint_v_litr(y) + print() + elif x == 12: + y = int(input('Введите количество литров: ')) + litr_v_pint(y) + print() + else: + print('Введите число от 1 до 12') + continue + if True: + stop = int(input('Если хотете остановить операцию, введите 0: ')) + if stop == 0: + break \ No newline at end of file diff --git a/src/task_8_1.py b/src/task_8_1.py new file mode 100644 index 0000000..5ef3874 --- /dev/null +++ b/src/task_8_1.py @@ -0,0 +1,18 @@ +# Описать функцию fact2( n ), вычисляющую двойной факториал :n!! = +# 1·3·5·...·n, если n — нечетное; n!! = 2·4·6·...·n, если n — четное (n > 0 — +# параметр целого типа. С помощью этой функции найти двойные +# факториалы пяти данных целых чисел [01-11.2-Proc35] + + + +def func2(n: int) -> int: + res = 1 + if n % 2 == 0: + for i in range(2, n, 2): + res *= i + else: + for i in range(1, n, 2): + res *= i + return res +print(func2(15)) + diff --git a/src/task_8_2.py b/src/task_8_2.py new file mode 100644 index 0000000..fae069b --- /dev/null +++ b/src/task_8_2.py @@ -0,0 +1,10 @@ +# Даны три слова. Выяснить, является ли хоть одно из них палиндромом +# ("перевертышем"), т. е. таким, которое читается одинаково слева направо и +# справа налево. (Определить функцию, позволяющую распознавать слова +# палиндромы.) + +n = ['dick', 'vdv', 'mama'] + +for s in n: + if s[::-1] == s: + print(s) \ No newline at end of file diff --git a/src/task_9_1.py b/src/task_9_1.py new file mode 100644 index 0000000..064809b --- /dev/null +++ b/src/task_9_1.py @@ -0,0 +1,6 @@ +# Дан список строк. Отформатировать все строки в формате ‘{i} - {string}’, где i +# это порядковый номер строки в списке. Использовать генератор списков. +spisok_strok = [ 27, 'kek', 1995, 'lol'] +print((lambda string: + [f'{index} - {value}' for index, value in enumerate(string)]) + (spisok_strok)) \ No newline at end of file diff --git a/src/task_9_2.py b/src/task_9_2.py new file mode 100644 index 0000000..5651d80 --- /dev/null +++ b/src/task_9_2.py @@ -0,0 +1,6 @@ +# Создать lambda функцию, которая принимает на вход неопределенное +# количество именных аргументов и выводит словарь с ключами удвоенной +# длины. {‘abc’: 5} -> {‘abcabc’: 5} + + +print((lambda **kwargs: {k*2: v for k, v in kwargs.items()})(abc=5)) From bd6e42870ade885e4ffb1d8588d78a81a75b2b2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9=20=D0=91=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D1=85=D0=BE=D0=B2=D1=81=D0=BA=D0=B8=D0=B9?= Date: Mon, 3 Aug 2020 18:51:55 +0300 Subject: [PATCH 2/9] x --- src/task_5_1.py | 27 +++++++++++++++++++++++++ src/task_5_10.py | 51 ------------------------------------------------ src/task_5_2.py | 16 +++++++++++++++ src/task_5_3.py | 15 ++++++++++++++ src/task_5_4.py | 13 ++++++++++++ src/task_5_5.py | 11 +++++++++++ src/task_5_6.py | 18 +++++++++++++++++ src/task_5_7.py | 11 +++++++++++ src/task_5_8.py | 5 +++++ src/task_5_9.py | 10 ++++++++++ 10 files changed, 126 insertions(+), 51 deletions(-) create mode 100644 src/task_5_1.py delete mode 100644 src/task_5_10.py create mode 100644 src/task_5_2.py create mode 100644 src/task_5_3.py create mode 100644 src/task_5_4.py create mode 100644 src/task_5_5.py create mode 100644 src/task_5_6.py create mode 100644 src/task_5_7.py create mode 100644 src/task_5_8.py create mode 100644 src/task_5_9.py diff --git a/src/task_5_1.py b/src/task_5_1.py new file mode 100644 index 0000000..09ac8c1 --- /dev/null +++ b/src/task_5_1.py @@ -0,0 +1,27 @@ +# Написать программу, в которой вводятся два операнда Х и Y и знак операции +# sign (+, –, /, *). Вычислить результат Z в зависимости от знака. Предусмотреть +# реакции на возможный неверный знак операции, а также на ввод Y=0 при +# делении. Организовать возможность многократных вычислений без перезагрузки +# программа (т.е. построить бесконечный цикл). В качестве символа прекращения +# вычислений принять ‘0’ (т.е. sign='0') + +while True: + sing = input(f'выберите операцию (+,-,/,*) для выхода напишите 0\n:') + if sing == '0': + break + x = int(input('первое число :')) + y = int(input('второе число :')) + if sing == '+': + z = x + y + print(z) + elif sing == '-': + z = x - y + print(z) + elif sing == '/': + z = (x / y) if y != 0 else 0 + print(z) + elif sing == '*': + z = x * y + print(z) + else: + print('некоректный ввод :') \ No newline at end of file diff --git a/src/task_5_10.py b/src/task_5_10.py deleted file mode 100644 index d3e2e32..0000000 --- a/src/task_5_10.py +++ /dev/null @@ -1,51 +0,0 @@ -# Создать список поездов. Структура словаря: номер поезда, -# пункт и время прибытия, пункт и время отбытия. Вывести все сведения о поездах, -# время пребывания в пути которых превышает 7 часов 20 минут.[02-7.3-ML02] -from datetime import timedelta -pyteshestvia = [ - { - "номер": 1, - "пункт прибытия": "Minsk", - "время прибытия": timedelta(hours=8, minutes=50), - "пункт отправления": "Grodno", - "время отправления": timedelta(hours=22, minutes=50), - }, - { - "номер": 2, - "пункт прибытия": "Minsk", - "время прибытия": timedelta(hours=21, minutes=00), - "пункт отправления": "Astana", - "время отправления": timedelta(hours=14, minutes=00), - }, - { - "номер": 3, - "пункт прибытия": "Minsk", - "время прибытия": timedelta(hours=18, minutes=20), - "пункт отправления": "Varshawa", - "время отправления": timedelta(hours=10, minutes=00), - }, - { - "номер ": 4, - "пункт прибытия": "Minsk", - "время прибытия": timedelta(hours=20, minutes=19), - "пункт отправления": "Gudugau", - "время отправления": timedelta(hours=18, minutes=12), - }, -] - -for i in pyteshestvia: - delta = i["время прибытия"] - i["время отправления"] - if delta >= timedelta(hours=7, minutes=20): - print(f"\nНомер: {i['номер']}") - print(f"Пункт прибытия: {i['пункт прибытия']}") - print(f"Время прибытия: {i['время прибытия']}") - print(f"Пункт отправления: {i['пункт отправления']}") - print(f"Время отправления: {i['время отправления']}") -for i in pyteshestvia: - delta1 = i["время отправления"] - i["время прибытия"] - if delta1 >= timedelta(hours=7, minutes=20): - print(f"\nНомер: {i['номер']}") - print(f"Пункт прибытия: {i['пункт прибытия']}") - print(f"Время прибытия: {i['время прибытия']}") - print(f"Пункт отправления: {i['пункт отправления']}") - print(f"Время отправления: {i['время отправления']}") \ No newline at end of file diff --git a/src/task_5_2.py b/src/task_5_2.py new file mode 100644 index 0000000..86eb6ed --- /dev/null +++ b/src/task_5_2.py @@ -0,0 +1,16 @@ +# Дано число. Найти сумму и произведение его цифр. + +n = int(input()) + +suma = 0 +mult = 1 + +while n > 0: + digit = n % 10 + if digit != 0: + suma += digit + mult *= digit + n = n // 10 + +print("Сумма:", suma) +print("Произведение:", mult) \ No newline at end of file diff --git a/src/task_5_3.py b/src/task_5_3.py new file mode 100644 index 0000000..94a20ef --- /dev/null +++ b/src/task_5_3.py @@ -0,0 +1,15 @@ +# Два натуральных числа называют дружественными, если каждое из них +# равно сумме всех делителей другого, кроме самого этого числа. Найти все +# пары дружественных чисел, лежащих в диапазоне от 200 до 300. [02-3.2-HL02] + +for i in range(200,300): + k = 0 + n = 0 + for x in range(1, int(i / 2 ) + 1): + if i % x == 0: + k += x + for j in range(1, int(k / 2) + 1): + if k % j == 0: + n += j + if i == n and i != k and i == min(i, k): + print(i, k) \ No newline at end of file diff --git a/src/task_5_4.py b/src/task_5_4.py new file mode 100644 index 0000000..e8e5ee8 --- /dev/null +++ b/src/task_5_4.py @@ -0,0 +1,13 @@ +# Для заданного числа N составьте программу вычисления суммы +# S=1+1/2+1/3+1/4+...+1/N, где N – натуральное число. [02-3.2-ML21] + +n = int(input("Enter a natural number:")) +if n == 0: + print("Error. Enter number != 0") + +summ = 0 +for i in range (1, abs(n) + 1): + k = 1 / i + summ += k + +print(summ) \ No newline at end of file diff --git a/src/task_5_5.py b/src/task_5_5.py new file mode 100644 index 0000000..48cfb32 --- /dev/null +++ b/src/task_5_5.py @@ -0,0 +1,11 @@ +# В массиве целых чисел с количеством элементов 19 определить максимальное +# число и заменить им все четные по значению элементы. [02-4.1-BL19] + +new_list = [] +import random as lol +a = 0 +while a < 19: + new_list.append(lol.randint(-100,100)) + a +=1 +print(new_list) +print(max(new_list)) \ No newline at end of file diff --git a/src/task_5_6.py b/src/task_5_6.py new file mode 100644 index 0000000..f7f9eff --- /dev/null +++ b/src/task_5_6.py @@ -0,0 +1,18 @@ +# Задан целочисленный массив. Определить количество участков массива, +# на котором элементы монотонно возрастают (каждое следующее число +# больше предыдущего). [02-4.1-ML27] + +import random +lst = [random.randint(0, 20) for el in range(40)] +print(lst) +result = 0 +count = 0 +for j in range(len(lst) - 2 ): + if lst[j + 2] > lst[j + 1] > lst[j]: + count +=1 + elif count >= 1 and lst[j + 1] > lst[j + 2 ]: + result +=1 + count = 0 +if lst[-1] > lst[-2] > lst[-3]: + result +=1 +print(result) \ No newline at end of file diff --git a/src/task_5_7.py b/src/task_5_7.py new file mode 100644 index 0000000..a09e183 --- /dev/null +++ b/src/task_5_7.py @@ -0,0 +1,11 @@ +# Дана целочисленная квадратная матрица. Найти в каждой строке наибольший +# элемент и поменять его местами с элементом главной диагонали.[02-4.2-ML22] +from random import randint + +matrix = [[randint(0, 100) for i in range(4)] for i in range(4)] +print(matrix) +for i, value in enumerate(matrix): + index = value.index(max(value)) + matrix[i][i], matrix[i][index] = matrix[i][index], matrix[i][i] + +print(matrix) \ No newline at end of file diff --git a/src/task_5_8.py b/src/task_5_8.py new file mode 100644 index 0000000..24d1f94 --- /dev/null +++ b/src/task_5_8.py @@ -0,0 +1,5 @@ +# В заданной строке расположить в обратном порядке все слова. Разделителями +# слов считаются пробелы. [02-7.2-HL08] +x = "Hello kitty" +b = x[::-1] +print(b) \ No newline at end of file diff --git a/src/task_5_9.py b/src/task_5_9.py new file mode 100644 index 0000000..cb175b4 --- /dev/null +++ b/src/task_5_9.py @@ -0,0 +1,10 @@ +# Для каждого натурального числа в промежутке от m до n вывести все делители, +# кроме единицы и самого числа. m и n вводятся с клавиатуры. + +m = int(input('Введите число_1: ')) +n = int(input('Введите число_2: ')) +x = range(m,n) +for i in x: + for e in range(2,i -1): + if i / 2 % e==0: + print("Chislo",i, "Delite", e) \ No newline at end of file From 531d2502dfc824b77cab6fd4d03749b84c70858f Mon Sep 17 00:00:00 2001 From: Vitaliy Barahovskiy Date: Mon, 31 Aug 2020 18:20:32 +0300 Subject: [PATCH 3/9] HW<9>: Vitaliy Barahovskiy --- src/task_9_3.py | 18 ++++++++++++++++++ src/task_9_4.py | 17 +++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/task_9_3.py create mode 100644 src/task_9_4.py diff --git a/src/task_9_3.py b/src/task_9_3.py new file mode 100644 index 0000000..00b8c4b --- /dev/null +++ b/src/task_9_3.py @@ -0,0 +1,18 @@ +# Создать декоратор для функции, которая принимает список чисел. +# Декоратор должен производить предварительную проверку данных - +# удалять все четные элементы из списка + +my_list = range(0, 8) + + +def my_decorator(func): + def xz_funkzia(*args): + return func([i for i in args[0] if i % 2 != 0]) + return xz_funkzia + +@my_decorator +def my_func(numbers: list): + print(numbers) + + +my_func(my_list) \ No newline at end of file diff --git a/src/task_9_4.py b/src/task_9_4.py new file mode 100644 index 0000000..b518ee5 --- /dev/null +++ b/src/task_9_4.py @@ -0,0 +1,17 @@ +# Создать универсальный декоратор, который меняет порядок аргументов в +# функции на противоположный. + +my_list = [1, 2, 3, 4, 5 ,6 ,7 ,8] + + +def my_decorator_universal(func): + def xz_universal(*args): + return func(my_list[::-1]) + return xz_universal + +@my_decorator_universal +def my_func(numbers: list): + print(numbers) + + +my_func(my_list) \ No newline at end of file From 77bf1909aa8f5128fcbc93d0157fe5d942241380 Mon Sep 17 00:00:00 2001 From: Vitaliy Barahovskiy Date: Sun, 6 Sep 2020 23:01:17 +0300 Subject: [PATCH 4/9] HW: Vitaliy Barahovskiy --- src/taskmanager/flymen/__init__.py | 0 src/taskmanager/flymen/admin.py | 6 + src/taskmanager/flymen/apps.py | 5 + src/taskmanager/flymen/forms.py | 18 +++ .../flymen/migrations/0001_initial.py | 22 ++++ src/taskmanager/flymen/migrations/__init__.py | 0 src/taskmanager/flymen/models.py | 14 ++ .../flymen/templates/flymen/about.html | 10 ++ .../flymen/templates/flymen/base.html | 29 +++++ .../flymen/templates/flymen/create.html | 16 +++ .../flymen/templates/flymen/index.html | 20 +++ src/taskmanager/flymen/tests.py | 3 + src/taskmanager/flymen/urls.py | 8 ++ src/taskmanager/flymen/views.py | 25 ++++ src/taskmanager/manage.py | 22 ++++ src/taskmanager/taskmanager/__init__.py | 0 src/taskmanager/taskmanager/asgi.py | 16 +++ src/taskmanager/taskmanager/settings.py | 121 ++++++++++++++++++ src/taskmanager/taskmanager/urls.py | 7 + src/taskmanager/taskmanager/wsgi.py | 16 +++ 20 files changed, 358 insertions(+) create mode 100644 src/taskmanager/flymen/__init__.py create mode 100644 src/taskmanager/flymen/admin.py create mode 100644 src/taskmanager/flymen/apps.py create mode 100644 src/taskmanager/flymen/forms.py create mode 100644 src/taskmanager/flymen/migrations/0001_initial.py create mode 100644 src/taskmanager/flymen/migrations/__init__.py create mode 100644 src/taskmanager/flymen/models.py create mode 100644 src/taskmanager/flymen/templates/flymen/about.html create mode 100644 src/taskmanager/flymen/templates/flymen/base.html create mode 100644 src/taskmanager/flymen/templates/flymen/create.html create mode 100644 src/taskmanager/flymen/templates/flymen/index.html create mode 100644 src/taskmanager/flymen/tests.py create mode 100644 src/taskmanager/flymen/urls.py create mode 100644 src/taskmanager/flymen/views.py create mode 100644 src/taskmanager/manage.py create mode 100644 src/taskmanager/taskmanager/__init__.py create mode 100644 src/taskmanager/taskmanager/asgi.py create mode 100644 src/taskmanager/taskmanager/settings.py create mode 100644 src/taskmanager/taskmanager/urls.py create mode 100644 src/taskmanager/taskmanager/wsgi.py diff --git a/src/taskmanager/flymen/__init__.py b/src/taskmanager/flymen/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/taskmanager/flymen/admin.py b/src/taskmanager/flymen/admin.py new file mode 100644 index 0000000..be06b83 --- /dev/null +++ b/src/taskmanager/flymen/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import Task + + +admin.site.register(Task) + diff --git a/src/taskmanager/flymen/apps.py b/src/taskmanager/flymen/apps.py new file mode 100644 index 0000000..98e88da --- /dev/null +++ b/src/taskmanager/flymen/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class FlymenConfig(AppConfig): + name = 'flymen' diff --git a/src/taskmanager/flymen/forms.py b/src/taskmanager/flymen/forms.py new file mode 100644 index 0000000..5d81df8 --- /dev/null +++ b/src/taskmanager/flymen/forms.py @@ -0,0 +1,18 @@ +from .models import Task +from django.forms import ModelForm, TextInput, Textarea + + +class TaskForm(ModelForm): + class Meta: + model = Task + fields = ["title", "task"] + widgets = { + "title": TextInput(attrs={ + 'class': 'form-control', + 'placeholder':'Введите название' + }), + "task": Textarea(attrs={ + 'class': 'form-control', + 'placeholder': 'Введите описание' + }), + } \ No newline at end of file diff --git a/src/taskmanager/flymen/migrations/0001_initial.py b/src/taskmanager/flymen/migrations/0001_initial.py new file mode 100644 index 0000000..d0d0ec3 --- /dev/null +++ b/src/taskmanager/flymen/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 3.1.1 on 2020-09-06 17:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Task', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=50, verbose_name='Название')), + ('task', models.TextField(verbose_name='Описание')), + ], + ), + ] diff --git a/src/taskmanager/flymen/migrations/__init__.py b/src/taskmanager/flymen/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/taskmanager/flymen/models.py b/src/taskmanager/flymen/models.py new file mode 100644 index 0000000..4354f84 --- /dev/null +++ b/src/taskmanager/flymen/models.py @@ -0,0 +1,14 @@ +from django.db import models + +class Task(models.Model): + title = models.CharField('Название', max_length=50) + task = models.TextField('Описание') + + def __str__(self): + return self.title + + class Meta: + verbose_name = " Задача" + verbose_name_plural = "Задачи" + + diff --git a/src/taskmanager/flymen/templates/flymen/about.html b/src/taskmanager/flymen/templates/flymen/about.html new file mode 100644 index 0000000..94d317b --- /dev/null +++ b/src/taskmanager/flymen/templates/flymen/about.html @@ -0,0 +1,10 @@ +{% extends 'flymen/base.html' %} + +{% block title %} +Страница про путешевствия +{% endblock %} + +{% block content %} +

Старница про летающего мужика

+

Страница про летающего мужика

+{% endblock %} diff --git a/src/taskmanager/flymen/templates/flymen/base.html b/src/taskmanager/flymen/templates/flymen/base.html new file mode 100644 index 0000000..91a3742 --- /dev/null +++ b/src/taskmanager/flymen/templates/flymen/base.html @@ -0,0 +1,29 @@ + + + + + + + {% block title %}{% endblock %} + + + + +
+ {% block content %}{% endblock %} +
+ + \ No newline at end of file diff --git a/src/taskmanager/flymen/templates/flymen/create.html b/src/taskmanager/flymen/templates/flymen/create.html new file mode 100644 index 0000000..9b35fef --- /dev/null +++ b/src/taskmanager/flymen/templates/flymen/create.html @@ -0,0 +1,16 @@ +{% extends 'flymen/base.html' %} + +{% block title %} +Cоздать таск +{% endblock %} + +{% block content %} +

Создать таск

+
+ {% csrf_token %} + {{ form.title }}
+ {{ form.task }}
+ + {{error}} +
+{% endblock %} \ No newline at end of file diff --git a/src/taskmanager/flymen/templates/flymen/index.html b/src/taskmanager/flymen/templates/flymen/index.html new file mode 100644 index 0000000..6a330c1 --- /dev/null +++ b/src/taskmanager/flymen/templates/flymen/index.html @@ -0,0 +1,20 @@ +{% extends 'flymen/base.html' %} + +{% block title %} +{{ title }} +{% endblock %} + +{% block content %} +

Главная страница

+ {% if tasks %} + {% for el in tasks %} +
+

{{ el.title }}

+

{{ el.task }}

+
+ {% endfor %} + {% else %} +

У нас нет записей!

+ {% endif %} +{% endblock %} + diff --git a/src/taskmanager/flymen/tests.py b/src/taskmanager/flymen/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/src/taskmanager/flymen/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/taskmanager/flymen/urls.py b/src/taskmanager/flymen/urls.py new file mode 100644 index 0000000..f517407 --- /dev/null +++ b/src/taskmanager/flymen/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.index, name = 'home'), + path('about-us', views.about, name = 'about'), + path('creat', views.create, name = 'create'), +] \ No newline at end of file diff --git a/src/taskmanager/flymen/views.py b/src/taskmanager/flymen/views.py new file mode 100644 index 0000000..d5bc24a --- /dev/null +++ b/src/taskmanager/flymen/views.py @@ -0,0 +1,25 @@ +from django.shortcuts import render +from .models import Task +from .forms import TaskForm + + + +def index(request): + tasks = Task.objects.order_by('-id') + return render(request, 'flymen/index.html', {'title': 'Главная страница сайта', 'tasks': tasks}) + +def about(request): + return render(request, 'flymen/about.html') + +def create(request): + error = '' + if request.method == 'POST': + form = TaskForm(request.POST) + if form.is_valid(): + form.save() + return redirect('home') + else: + error = 'Форма была неверной' + form = TaskForm() + context = {'form': form, 'error': error } + return render(request, 'flymen/create.html', context) \ No newline at end of file diff --git a/src/taskmanager/manage.py b/src/taskmanager/manage.py new file mode 100644 index 0000000..a00cc82 --- /dev/null +++ b/src/taskmanager/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', 'taskmanager.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() diff --git a/src/taskmanager/taskmanager/__init__.py b/src/taskmanager/taskmanager/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/taskmanager/taskmanager/asgi.py b/src/taskmanager/taskmanager/asgi.py new file mode 100644 index 0000000..be23a88 --- /dev/null +++ b/src/taskmanager/taskmanager/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for taskmanager project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'taskmanager.settings') + +application = get_asgi_application() diff --git a/src/taskmanager/taskmanager/settings.py b/src/taskmanager/taskmanager/settings.py new file mode 100644 index 0000000..79bdc10 --- /dev/null +++ b/src/taskmanager/taskmanager/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for taskmanager project. + +Generated by 'django-admin startproject' using Django 3.1.1. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.1/ref/settings/ +""" + +from pathlib import Path + +# 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/3.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '31e!vwkl(grkl3dxq1#wu5l271v5-ebjw%f8_fe_n(%f5i#-#r' + +# 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', + 'flymen' +] + +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 = 'taskmanager.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 = 'taskmanager.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/3.1/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/3.1/topics/i18n/ + +LANGUAGE_CODE = 'ru' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.1/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/src/taskmanager/taskmanager/urls.py b/src/taskmanager/taskmanager/urls.py new file mode 100644 index 0000000..f7a9ca9 --- /dev/null +++ b/src/taskmanager/taskmanager/urls.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('flymen.urls')) +] diff --git a/src/taskmanager/taskmanager/wsgi.py b/src/taskmanager/taskmanager/wsgi.py new file mode 100644 index 0000000..9214ad8 --- /dev/null +++ b/src/taskmanager/taskmanager/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for taskmanager project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'taskmanager.settings') + +application = get_wsgi_application() From ee286da78179ed08d6949c7200d121f7035934b0 Mon Sep 17 00:00:00 2001 From: Vitaliy Barahovskiy Date: Sun, 6 Sep 2020 23:19:46 +0300 Subject: [PATCH 5/9] HW: Vitaliy Barahovskiy --- src/task_10_1.py | 33 ---------- src/task_10_2.py | 14 ----- src/task_10_3.py | 8 --- src/task_5_1.py | 27 -------- src/task_5_2.py | 16 ----- src/task_5_3.py | 15 ----- src/task_5_4.py | 13 ---- src/task_5_5.py | 11 ---- src/task_5_6.py | 18 ------ src/task_5_7.py | 11 ---- src/task_5_8.py | 5 -- src/task_5_9.py | 10 --- src/task_7.py | 161 ----------------------------------------------- src/task_8_1.py | 18 ------ src/task_8_2.py | 10 --- src/task_9_1.py | 6 -- src/task_9_2.py | 6 -- src/task_9_3.py | 18 ------ src/task_9_4.py | 17 ----- 19 files changed, 417 deletions(-) delete mode 100644 src/task_10_1.py delete mode 100644 src/task_10_2.py delete mode 100644 src/task_10_3.py delete mode 100644 src/task_5_1.py delete mode 100644 src/task_5_2.py delete mode 100644 src/task_5_3.py delete mode 100644 src/task_5_4.py delete mode 100644 src/task_5_5.py delete mode 100644 src/task_5_6.py delete mode 100644 src/task_5_7.py delete mode 100644 src/task_5_8.py delete mode 100644 src/task_5_9.py delete mode 100644 src/task_7.py delete mode 100644 src/task_8_1.py delete mode 100644 src/task_8_2.py delete mode 100644 src/task_9_1.py delete mode 100644 src/task_9_2.py delete mode 100644 src/task_9_3.py delete mode 100644 src/task_9_4.py diff --git a/src/task_10_1.py b/src/task_10_1.py deleted file mode 100644 index a46ec09..0000000 --- a/src/task_10_1.py +++ /dev/null @@ -1,33 +0,0 @@ -# Имеется текстовый файл. Напечатать: -# a) его первую строку; -# b) его пятую строку; -# c) его первые 5 строк; -# d) его строки с s1-й по s2-ю; -# e) весь файл. -# Вывел весь фаил -f = open('test1.txt', 'r') -print(f.read()) -f.close() -# вывод первой строки -f = open('test1.txt', 'r') -print(f.readline()) -f.close() -# вывод 5 строк -f = open('test1.txt', 'r') -print(f.readline()) -print(f.readline()) -print(f.readline()) -print(f.readline()) -print(f.readline()) -f.close() -# вывод с 1 по 2 строку -f = open('test1.txt', 'r') -print(f.readline()) -print(f.readline()) -f.close() -# вывод 5 строки -with open('test1.txt') as f: - for i, line in enumerate(f): - if i % 5 == 4: - print(line) -f.close() \ No newline at end of file diff --git a/src/task_10_2.py b/src/task_10_2.py deleted file mode 100644 index 4a888d5..0000000 --- a/src/task_10_2.py +++ /dev/null @@ -1,14 +0,0 @@ -# Создать текстовый файл и записать в него 6 строк. -# Записываемые строки вводятся с клавиатуры - - -f = open('test.txt', 'w') -n = input() -v = input() -c = input() -x = input() -z = input() -l = input() -for index in [n, v, c, x, z, l]: - f.write(index + '\n') -f.close() \ No newline at end of file diff --git a/src/task_10_3.py b/src/task_10_3.py deleted file mode 100644 index d9df2ca..0000000 --- a/src/task_10_3.py +++ /dev/null @@ -1,8 +0,0 @@ -# В конец существующего текстового файла записать три новые строки текста. -# Записываемые строки вводятся с клавиатуры - -with open('test.txt', 'a') as my_f: - h = input() - b = input() - c = input() - my_f.writelines(['\n', h,'\n', b,'\n', c]) \ No newline at end of file diff --git a/src/task_5_1.py b/src/task_5_1.py deleted file mode 100644 index 09ac8c1..0000000 --- a/src/task_5_1.py +++ /dev/null @@ -1,27 +0,0 @@ -# Написать программу, в которой вводятся два операнда Х и Y и знак операции -# sign (+, –, /, *). Вычислить результат Z в зависимости от знака. Предусмотреть -# реакции на возможный неверный знак операции, а также на ввод Y=0 при -# делении. Организовать возможность многократных вычислений без перезагрузки -# программа (т.е. построить бесконечный цикл). В качестве символа прекращения -# вычислений принять ‘0’ (т.е. sign='0') - -while True: - sing = input(f'выберите операцию (+,-,/,*) для выхода напишите 0\n:') - if sing == '0': - break - x = int(input('первое число :')) - y = int(input('второе число :')) - if sing == '+': - z = x + y - print(z) - elif sing == '-': - z = x - y - print(z) - elif sing == '/': - z = (x / y) if y != 0 else 0 - print(z) - elif sing == '*': - z = x * y - print(z) - else: - print('некоректный ввод :') \ No newline at end of file diff --git a/src/task_5_2.py b/src/task_5_2.py deleted file mode 100644 index 86eb6ed..0000000 --- a/src/task_5_2.py +++ /dev/null @@ -1,16 +0,0 @@ -# Дано число. Найти сумму и произведение его цифр. - -n = int(input()) - -suma = 0 -mult = 1 - -while n > 0: - digit = n % 10 - if digit != 0: - suma += digit - mult *= digit - n = n // 10 - -print("Сумма:", suma) -print("Произведение:", mult) \ No newline at end of file diff --git a/src/task_5_3.py b/src/task_5_3.py deleted file mode 100644 index 94a20ef..0000000 --- a/src/task_5_3.py +++ /dev/null @@ -1,15 +0,0 @@ -# Два натуральных числа называют дружественными, если каждое из них -# равно сумме всех делителей другого, кроме самого этого числа. Найти все -# пары дружественных чисел, лежащих в диапазоне от 200 до 300. [02-3.2-HL02] - -for i in range(200,300): - k = 0 - n = 0 - for x in range(1, int(i / 2 ) + 1): - if i % x == 0: - k += x - for j in range(1, int(k / 2) + 1): - if k % j == 0: - n += j - if i == n and i != k and i == min(i, k): - print(i, k) \ No newline at end of file diff --git a/src/task_5_4.py b/src/task_5_4.py deleted file mode 100644 index e8e5ee8..0000000 --- a/src/task_5_4.py +++ /dev/null @@ -1,13 +0,0 @@ -# Для заданного числа N составьте программу вычисления суммы -# S=1+1/2+1/3+1/4+...+1/N, где N – натуральное число. [02-3.2-ML21] - -n = int(input("Enter a natural number:")) -if n == 0: - print("Error. Enter number != 0") - -summ = 0 -for i in range (1, abs(n) + 1): - k = 1 / i - summ += k - -print(summ) \ No newline at end of file diff --git a/src/task_5_5.py b/src/task_5_5.py deleted file mode 100644 index 48cfb32..0000000 --- a/src/task_5_5.py +++ /dev/null @@ -1,11 +0,0 @@ -# В массиве целых чисел с количеством элементов 19 определить максимальное -# число и заменить им все четные по значению элементы. [02-4.1-BL19] - -new_list = [] -import random as lol -a = 0 -while a < 19: - new_list.append(lol.randint(-100,100)) - a +=1 -print(new_list) -print(max(new_list)) \ No newline at end of file diff --git a/src/task_5_6.py b/src/task_5_6.py deleted file mode 100644 index f7f9eff..0000000 --- a/src/task_5_6.py +++ /dev/null @@ -1,18 +0,0 @@ -# Задан целочисленный массив. Определить количество участков массива, -# на котором элементы монотонно возрастают (каждое следующее число -# больше предыдущего). [02-4.1-ML27] - -import random -lst = [random.randint(0, 20) for el in range(40)] -print(lst) -result = 0 -count = 0 -for j in range(len(lst) - 2 ): - if lst[j + 2] > lst[j + 1] > lst[j]: - count +=1 - elif count >= 1 and lst[j + 1] > lst[j + 2 ]: - result +=1 - count = 0 -if lst[-1] > lst[-2] > lst[-3]: - result +=1 -print(result) \ No newline at end of file diff --git a/src/task_5_7.py b/src/task_5_7.py deleted file mode 100644 index a09e183..0000000 --- a/src/task_5_7.py +++ /dev/null @@ -1,11 +0,0 @@ -# Дана целочисленная квадратная матрица. Найти в каждой строке наибольший -# элемент и поменять его местами с элементом главной диагонали.[02-4.2-ML22] -from random import randint - -matrix = [[randint(0, 100) for i in range(4)] for i in range(4)] -print(matrix) -for i, value in enumerate(matrix): - index = value.index(max(value)) - matrix[i][i], matrix[i][index] = matrix[i][index], matrix[i][i] - -print(matrix) \ No newline at end of file diff --git a/src/task_5_8.py b/src/task_5_8.py deleted file mode 100644 index 24d1f94..0000000 --- a/src/task_5_8.py +++ /dev/null @@ -1,5 +0,0 @@ -# В заданной строке расположить в обратном порядке все слова. Разделителями -# слов считаются пробелы. [02-7.2-HL08] -x = "Hello kitty" -b = x[::-1] -print(b) \ No newline at end of file diff --git a/src/task_5_9.py b/src/task_5_9.py deleted file mode 100644 index cb175b4..0000000 --- a/src/task_5_9.py +++ /dev/null @@ -1,10 +0,0 @@ -# Для каждого натурального числа в промежутке от m до n вывести все делители, -# кроме единицы и самого числа. m и n вводятся с клавиатуры. - -m = int(input('Введите число_1: ')) -n = int(input('Введите число_2: ')) -x = range(m,n) -for i in x: - for e in range(2,i -1): - if i / 2 % e==0: - print("Chislo",i, "Delite", e) \ No newline at end of file diff --git a/src/task_7.py b/src/task_7.py deleted file mode 100644 index 3780fb9..0000000 --- a/src/task_7.py +++ /dev/null @@ -1,161 +0,0 @@ -# Написать 12 функций по переводу: -# 1. Дюймы в сантиметры -# 2. Сантиметры в дюймы -# 3. Мили в километры -# 4. Километры в мили -# 5. Фунты в килограммы -# 6. Килограммы в фунты -# 7. Унции в граммы -# 8. Граммы в унции -# 9. Галлон в литры -# 10. Литры в галлоны -# 11. Пинты в литры -# 12. Литры в пинты -# Примечание: функция принимает на вход число и возвращает конвертированное число -# 2. Написать программу, со следующим интерфейсом: пользователю предоставляется на -# выбор 12 вариантов перевода(описанных в первой задаче). Пользователь вводит цифру -# от одного до двенадцати. После программа запрашивает ввести численное значение. -# Затем программа выдает конвертированный результат. Использовать функции из первого -# задания. Программа должна быть в бесконечном цикле. Код выхода из программы - “0” - -def duim_v_sant(duim): - sant = duim * 2.54 - print(f"В {duim} дюймах {sant} сантимантов") - return sant, duim - -def sant_v_duim(sant): - duim = sant / 2.54 - print(f"В {sant} сантимантрах {duim} дюймов ") - return duim, sant - - -def mili_v_kilom(mili): - kilom = mili * 1.609 - print(f"В {mili} милях {kilom} километров") - return mili, kilom - - -def kilom_v_mili(kilom): - mili = kilom / 1.609 - print(f"В {kilom} километрах {mili} миль") - return kilom, mili - - -def funt_v_kilog(funt): - kilog = funt / 2.205 - print(f"В {funt} фунтах {kilog} килограмм") - return funt, kilog - - -def kilog_v_funt(kilog): - funt = kilog * 2.205 - print(f"В {kilog} килограммах {funt} фунтов") - return kilog, funt - - -def uncii_v_gramm(uncii): - gramm = uncii / 0.0353 - print(f"В {uncii} унциях {gramm} грамм") - return uncii, gramm - - -def gramm_v_uncii(gramm): - uncii = gramm * 0.0353 - print(f"В {gramm} граммах {uncii} унций") - return gramm, uncii - - -def gallon_v_litr(gallon): - litr = gallon * 3.785 - print(f"В {gallon} галлонах {litr} литров") - return gallon, litr - - -def litr_v_gallon(litr): - gallon = litr / 3.785 - print(f"В {litr} литрах {gallon} галлонов") - return litr, gallon - - -def pint_v_litr(pint): - litr = pint / 0.568261 - print(f"В {pint} пинтах {litr} литров") - return pint, litr - - -def litr_v_pint(litr): - pint = litr * 0.568261 - print(f"В {litr} литрах {pint} пинт") - return litr, pint - -while True: - print('1. Дюймы в сантиметры\n' - '2. Сантиметры в дюймы\n' - '3. Мили в километры\n' - '4. Километры в мили\n' - '5. Фунты в килограммы\n' - '6. Килограммы в фунты\n' - '7. Унции в граммы\n' - '8. Граммы в унции\n' - '9. Галлон в литры\n' - '10. Литры в галлоны\n' - '11. Пинты в литры\n' - '12. Литры в пинты\n') - - x = int(input('Выберите операцию(Введите номер операции): ')) - - if x == 1: - y = int(input('Введите количество дюймов: ')) - duim_v_sant(y) - print() - elif x == 2: - y = int(input('Введите количество сантиметров: ')) - sant_v_duim(y) - print() - elif x == 3: - y = int(input('Введите количество миль: ')) - mili_v_kilom(y) - print() - elif x == 4: - y = int(input('Введите количество километров: ')) - kilom_v_mili(y) - print() - elif x == 5: - y = int(input('Введите количество фунтов: ')) - funt_v_kilog(y) - print() - elif x == 6: - y = int(input('Введите количество килограмм: ')) - kilog_v_funt(y) - print() - elif x == 7: - y = int(input('Введите количество унций: ')) - uncii_v_gramm(y) - print() - elif x == 8: - y = int(input('Введите количество грамм: ')) - gramm_v_uncii(y) - print() - elif x == 9: - y = int(input('Введите количество галлонов: ')) - gallon_v_litr(y) - print() - elif x == 10: - y = int(input('Введите количество литров: ')) - litr_v_gallon(y) - print() - elif x == 11: - y = int(input('Введите количество пинт: ')) - pint_v_litr(y) - print() - elif x == 12: - y = int(input('Введите количество литров: ')) - litr_v_pint(y) - print() - else: - print('Введите число от 1 до 12') - continue - if True: - stop = int(input('Если хотете остановить операцию, введите 0: ')) - if stop == 0: - break \ No newline at end of file diff --git a/src/task_8_1.py b/src/task_8_1.py deleted file mode 100644 index 5ef3874..0000000 --- a/src/task_8_1.py +++ /dev/null @@ -1,18 +0,0 @@ -# Описать функцию fact2( n ), вычисляющую двойной факториал :n!! = -# 1·3·5·...·n, если n — нечетное; n!! = 2·4·6·...·n, если n — четное (n > 0 — -# параметр целого типа. С помощью этой функции найти двойные -# факториалы пяти данных целых чисел [01-11.2-Proc35] - - - -def func2(n: int) -> int: - res = 1 - if n % 2 == 0: - for i in range(2, n, 2): - res *= i - else: - for i in range(1, n, 2): - res *= i - return res -print(func2(15)) - diff --git a/src/task_8_2.py b/src/task_8_2.py deleted file mode 100644 index fae069b..0000000 --- a/src/task_8_2.py +++ /dev/null @@ -1,10 +0,0 @@ -# Даны три слова. Выяснить, является ли хоть одно из них палиндромом -# ("перевертышем"), т. е. таким, которое читается одинаково слева направо и -# справа налево. (Определить функцию, позволяющую распознавать слова -# палиндромы.) - -n = ['dick', 'vdv', 'mama'] - -for s in n: - if s[::-1] == s: - print(s) \ No newline at end of file diff --git a/src/task_9_1.py b/src/task_9_1.py deleted file mode 100644 index 064809b..0000000 --- a/src/task_9_1.py +++ /dev/null @@ -1,6 +0,0 @@ -# Дан список строк. Отформатировать все строки в формате ‘{i} - {string}’, где i -# это порядковый номер строки в списке. Использовать генератор списков. -spisok_strok = [ 27, 'kek', 1995, 'lol'] -print((lambda string: - [f'{index} - {value}' for index, value in enumerate(string)]) - (spisok_strok)) \ No newline at end of file diff --git a/src/task_9_2.py b/src/task_9_2.py deleted file mode 100644 index 5651d80..0000000 --- a/src/task_9_2.py +++ /dev/null @@ -1,6 +0,0 @@ -# Создать lambda функцию, которая принимает на вход неопределенное -# количество именных аргументов и выводит словарь с ключами удвоенной -# длины. {‘abc’: 5} -> {‘abcabc’: 5} - - -print((lambda **kwargs: {k*2: v for k, v in kwargs.items()})(abc=5)) diff --git a/src/task_9_3.py b/src/task_9_3.py deleted file mode 100644 index 00b8c4b..0000000 --- a/src/task_9_3.py +++ /dev/null @@ -1,18 +0,0 @@ -# Создать декоратор для функции, которая принимает список чисел. -# Декоратор должен производить предварительную проверку данных - -# удалять все четные элементы из списка - -my_list = range(0, 8) - - -def my_decorator(func): - def xz_funkzia(*args): - return func([i for i in args[0] if i % 2 != 0]) - return xz_funkzia - -@my_decorator -def my_func(numbers: list): - print(numbers) - - -my_func(my_list) \ No newline at end of file diff --git a/src/task_9_4.py b/src/task_9_4.py deleted file mode 100644 index b518ee5..0000000 --- a/src/task_9_4.py +++ /dev/null @@ -1,17 +0,0 @@ -# Создать универсальный декоратор, который меняет порядок аргументов в -# функции на противоположный. - -my_list = [1, 2, 3, 4, 5 ,6 ,7 ,8] - - -def my_decorator_universal(func): - def xz_universal(*args): - return func(my_list[::-1]) - return xz_universal - -@my_decorator_universal -def my_func(numbers: list): - print(numbers) - - -my_func(my_list) \ No newline at end of file From 12f7023a087c4c48f9aae01781134e6bef9922f8 Mon Sep 17 00:00:00 2001 From: Vitaliy Barahovskiy Date: Sun, 6 Sep 2020 23:44:45 +0300 Subject: [PATCH 6/9] djanco>: Vitaliy Barahovskiy --- src/taskmanager/flymen/__init__.py | 0 src/taskmanager/flymen/admin.py | 6 - src/taskmanager/flymen/apps.py | 5 - src/taskmanager/flymen/forms.py | 18 --- .../flymen/migrations/0001_initial.py | 22 ---- src/taskmanager/flymen/migrations/__init__.py | 0 src/taskmanager/flymen/models.py | 14 -- .../flymen/templates/flymen/about.html | 10 -- .../flymen/templates/flymen/base.html | 29 ----- .../flymen/templates/flymen/create.html | 16 --- .../flymen/templates/flymen/index.html | 20 --- src/taskmanager/flymen/tests.py | 3 - src/taskmanager/flymen/urls.py | 8 -- src/taskmanager/flymen/views.py | 25 ---- src/taskmanager/manage.py | 22 ---- src/taskmanager/taskmanager/__init__.py | 0 src/taskmanager/taskmanager/asgi.py | 16 --- src/taskmanager/taskmanager/settings.py | 121 ------------------ src/taskmanager/taskmanager/urls.py | 7 - src/taskmanager/taskmanager/wsgi.py | 16 --- 20 files changed, 358 deletions(-) delete mode 100644 src/taskmanager/flymen/__init__.py delete mode 100644 src/taskmanager/flymen/admin.py delete mode 100644 src/taskmanager/flymen/apps.py delete mode 100644 src/taskmanager/flymen/forms.py delete mode 100644 src/taskmanager/flymen/migrations/0001_initial.py delete mode 100644 src/taskmanager/flymen/migrations/__init__.py delete mode 100644 src/taskmanager/flymen/models.py delete mode 100644 src/taskmanager/flymen/templates/flymen/about.html delete mode 100644 src/taskmanager/flymen/templates/flymen/base.html delete mode 100644 src/taskmanager/flymen/templates/flymen/create.html delete mode 100644 src/taskmanager/flymen/templates/flymen/index.html delete mode 100644 src/taskmanager/flymen/tests.py delete mode 100644 src/taskmanager/flymen/urls.py delete mode 100644 src/taskmanager/flymen/views.py delete mode 100644 src/taskmanager/manage.py delete mode 100644 src/taskmanager/taskmanager/__init__.py delete mode 100644 src/taskmanager/taskmanager/asgi.py delete mode 100644 src/taskmanager/taskmanager/settings.py delete mode 100644 src/taskmanager/taskmanager/urls.py delete mode 100644 src/taskmanager/taskmanager/wsgi.py diff --git a/src/taskmanager/flymen/__init__.py b/src/taskmanager/flymen/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/taskmanager/flymen/admin.py b/src/taskmanager/flymen/admin.py deleted file mode 100644 index be06b83..0000000 --- a/src/taskmanager/flymen/admin.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.contrib import admin -from .models import Task - - -admin.site.register(Task) - diff --git a/src/taskmanager/flymen/apps.py b/src/taskmanager/flymen/apps.py deleted file mode 100644 index 98e88da..0000000 --- a/src/taskmanager/flymen/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class FlymenConfig(AppConfig): - name = 'flymen' diff --git a/src/taskmanager/flymen/forms.py b/src/taskmanager/flymen/forms.py deleted file mode 100644 index 5d81df8..0000000 --- a/src/taskmanager/flymen/forms.py +++ /dev/null @@ -1,18 +0,0 @@ -from .models import Task -from django.forms import ModelForm, TextInput, Textarea - - -class TaskForm(ModelForm): - class Meta: - model = Task - fields = ["title", "task"] - widgets = { - "title": TextInput(attrs={ - 'class': 'form-control', - 'placeholder':'Введите название' - }), - "task": Textarea(attrs={ - 'class': 'form-control', - 'placeholder': 'Введите описание' - }), - } \ No newline at end of file diff --git a/src/taskmanager/flymen/migrations/0001_initial.py b/src/taskmanager/flymen/migrations/0001_initial.py deleted file mode 100644 index d0d0ec3..0000000 --- a/src/taskmanager/flymen/migrations/0001_initial.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.1.1 on 2020-09-06 17:33 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Task', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=50, verbose_name='Название')), - ('task', models.TextField(verbose_name='Описание')), - ], - ), - ] diff --git a/src/taskmanager/flymen/migrations/__init__.py b/src/taskmanager/flymen/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/taskmanager/flymen/models.py b/src/taskmanager/flymen/models.py deleted file mode 100644 index 4354f84..0000000 --- a/src/taskmanager/flymen/models.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.db import models - -class Task(models.Model): - title = models.CharField('Название', max_length=50) - task = models.TextField('Описание') - - def __str__(self): - return self.title - - class Meta: - verbose_name = " Задача" - verbose_name_plural = "Задачи" - - diff --git a/src/taskmanager/flymen/templates/flymen/about.html b/src/taskmanager/flymen/templates/flymen/about.html deleted file mode 100644 index 94d317b..0000000 --- a/src/taskmanager/flymen/templates/flymen/about.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends 'flymen/base.html' %} - -{% block title %} -Страница про путешевствия -{% endblock %} - -{% block content %} -

Старница про летающего мужика

-

Страница про летающего мужика

-{% endblock %} diff --git a/src/taskmanager/flymen/templates/flymen/base.html b/src/taskmanager/flymen/templates/flymen/base.html deleted file mode 100644 index 91a3742..0000000 --- a/src/taskmanager/flymen/templates/flymen/base.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - {% block title %}{% endblock %} - - - - -
- {% block content %}{% endblock %} -
- - \ No newline at end of file diff --git a/src/taskmanager/flymen/templates/flymen/create.html b/src/taskmanager/flymen/templates/flymen/create.html deleted file mode 100644 index 9b35fef..0000000 --- a/src/taskmanager/flymen/templates/flymen/create.html +++ /dev/null @@ -1,16 +0,0 @@ -{% extends 'flymen/base.html' %} - -{% block title %} -Cоздать таск -{% endblock %} - -{% block content %} -

Создать таск

-
- {% csrf_token %} - {{ form.title }}
- {{ form.task }}
- - {{error}} -
-{% endblock %} \ No newline at end of file diff --git a/src/taskmanager/flymen/templates/flymen/index.html b/src/taskmanager/flymen/templates/flymen/index.html deleted file mode 100644 index 6a330c1..0000000 --- a/src/taskmanager/flymen/templates/flymen/index.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends 'flymen/base.html' %} - -{% block title %} -{{ title }} -{% endblock %} - -{% block content %} -

Главная страница

- {% if tasks %} - {% for el in tasks %} -
-

{{ el.title }}

-

{{ el.task }}

-
- {% endfor %} - {% else %} -

У нас нет записей!

- {% endif %} -{% endblock %} - diff --git a/src/taskmanager/flymen/tests.py b/src/taskmanager/flymen/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/src/taskmanager/flymen/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/src/taskmanager/flymen/urls.py b/src/taskmanager/flymen/urls.py deleted file mode 100644 index f517407..0000000 --- a/src/taskmanager/flymen/urls.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.urls import path -from . import views - -urlpatterns = [ - path('', views.index, name = 'home'), - path('about-us', views.about, name = 'about'), - path('creat', views.create, name = 'create'), -] \ No newline at end of file diff --git a/src/taskmanager/flymen/views.py b/src/taskmanager/flymen/views.py deleted file mode 100644 index d5bc24a..0000000 --- a/src/taskmanager/flymen/views.py +++ /dev/null @@ -1,25 +0,0 @@ -from django.shortcuts import render -from .models import Task -from .forms import TaskForm - - - -def index(request): - tasks = Task.objects.order_by('-id') - return render(request, 'flymen/index.html', {'title': 'Главная страница сайта', 'tasks': tasks}) - -def about(request): - return render(request, 'flymen/about.html') - -def create(request): - error = '' - if request.method == 'POST': - form = TaskForm(request.POST) - if form.is_valid(): - form.save() - return redirect('home') - else: - error = 'Форма была неверной' - form = TaskForm() - context = {'form': form, 'error': error } - return render(request, 'flymen/create.html', context) \ No newline at end of file diff --git a/src/taskmanager/manage.py b/src/taskmanager/manage.py deleted file mode 100644 index a00cc82..0000000 --- a/src/taskmanager/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/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', 'taskmanager.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() diff --git a/src/taskmanager/taskmanager/__init__.py b/src/taskmanager/taskmanager/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/taskmanager/taskmanager/asgi.py b/src/taskmanager/taskmanager/asgi.py deleted file mode 100644 index be23a88..0000000 --- a/src/taskmanager/taskmanager/asgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ASGI config for taskmanager project. - -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ -""" - -import os - -from django.core.asgi import get_asgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'taskmanager.settings') - -application = get_asgi_application() diff --git a/src/taskmanager/taskmanager/settings.py b/src/taskmanager/taskmanager/settings.py deleted file mode 100644 index 79bdc10..0000000 --- a/src/taskmanager/taskmanager/settings.py +++ /dev/null @@ -1,121 +0,0 @@ -""" -Django settings for taskmanager project. - -Generated by 'django-admin startproject' using Django 3.1.1. - -For more information on this file, see -https://docs.djangoproject.com/en/3.1/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/3.1/ref/settings/ -""" - -from pathlib import Path - -# 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/3.1/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = '31e!vwkl(grkl3dxq1#wu5l271v5-ebjw%f8_fe_n(%f5i#-#r' - -# 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', - 'flymen' -] - -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 = 'taskmanager.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 = 'taskmanager.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/3.1/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', - } -} - - -# Password validation -# https://docs.djangoproject.com/en/3.1/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/3.1/topics/i18n/ - -LANGUAGE_CODE = 'ru' - -TIME_ZONE = 'UTC' - -USE_I18N = True - -USE_L10N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/3.1/howto/static-files/ - -STATIC_URL = '/static/' diff --git a/src/taskmanager/taskmanager/urls.py b/src/taskmanager/taskmanager/urls.py deleted file mode 100644 index f7a9ca9..0000000 --- a/src/taskmanager/taskmanager/urls.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.contrib import admin -from django.urls import path, include - -urlpatterns = [ - path('admin/', admin.site.urls), - path('', include('flymen.urls')) -] diff --git a/src/taskmanager/taskmanager/wsgi.py b/src/taskmanager/taskmanager/wsgi.py deleted file mode 100644 index 9214ad8..0000000 --- a/src/taskmanager/taskmanager/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for taskmanager project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'taskmanager.settings') - -application = get_wsgi_application() From 604a0c8bc7d2c2041507e83611339e42a8046647 Mon Sep 17 00:00:00 2001 From: Vitaliy Barahovskiy Date: Sun, 6 Sep 2020 23:56:56 +0300 Subject: [PATCH 7/9] HW: Vitaliy Barahovskiy --- src/taskmanager/__init__.py | 0 src/taskmanager/flymen/__init__.py | 0 src/taskmanager/flymen/admin.py | 6 + src/taskmanager/flymen/apps.py | 5 + src/taskmanager/flymen/forms.py | 18 +++ .../flymen/migrations/0001_initial.py | 22 ++++ src/taskmanager/flymen/migrations/__init__.py | 0 src/taskmanager/flymen/models.py | 14 ++ .../flymen/templates/flymen/about.html | 10 ++ .../flymen/templates/flymen/base.html | 29 +++++ .../flymen/templates/flymen/create.html | 16 +++ .../flymen/templates/flymen/index.html | 20 +++ src/taskmanager/flymen/tests.py | 3 + src/taskmanager/flymen/urls.py | 8 ++ src/taskmanager/flymen/views.py | 25 ++++ src/taskmanager/manage.py | 22 ++++ src/taskmanager/taskmanager/__init__.py | 0 src/taskmanager/taskmanager/asgi.py | 16 +++ src/taskmanager/taskmanager/settings.py | 121 ++++++++++++++++++ src/taskmanager/taskmanager/urls.py | 7 + src/taskmanager/taskmanager/wsgi.py | 16 +++ 21 files changed, 358 insertions(+) create mode 100644 src/taskmanager/__init__.py create mode 100644 src/taskmanager/flymen/__init__.py create mode 100644 src/taskmanager/flymen/admin.py create mode 100644 src/taskmanager/flymen/apps.py create mode 100644 src/taskmanager/flymen/forms.py create mode 100644 src/taskmanager/flymen/migrations/0001_initial.py create mode 100644 src/taskmanager/flymen/migrations/__init__.py create mode 100644 src/taskmanager/flymen/models.py create mode 100644 src/taskmanager/flymen/templates/flymen/about.html create mode 100644 src/taskmanager/flymen/templates/flymen/base.html create mode 100644 src/taskmanager/flymen/templates/flymen/create.html create mode 100644 src/taskmanager/flymen/templates/flymen/index.html create mode 100644 src/taskmanager/flymen/tests.py create mode 100644 src/taskmanager/flymen/urls.py create mode 100644 src/taskmanager/flymen/views.py create mode 100644 src/taskmanager/manage.py create mode 100644 src/taskmanager/taskmanager/__init__.py create mode 100644 src/taskmanager/taskmanager/asgi.py create mode 100644 src/taskmanager/taskmanager/settings.py create mode 100644 src/taskmanager/taskmanager/urls.py create mode 100644 src/taskmanager/taskmanager/wsgi.py diff --git a/src/taskmanager/__init__.py b/src/taskmanager/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/taskmanager/flymen/__init__.py b/src/taskmanager/flymen/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/taskmanager/flymen/admin.py b/src/taskmanager/flymen/admin.py new file mode 100644 index 0000000..be06b83 --- /dev/null +++ b/src/taskmanager/flymen/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import Task + + +admin.site.register(Task) + diff --git a/src/taskmanager/flymen/apps.py b/src/taskmanager/flymen/apps.py new file mode 100644 index 0000000..98e88da --- /dev/null +++ b/src/taskmanager/flymen/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class FlymenConfig(AppConfig): + name = 'flymen' diff --git a/src/taskmanager/flymen/forms.py b/src/taskmanager/flymen/forms.py new file mode 100644 index 0000000..5d81df8 --- /dev/null +++ b/src/taskmanager/flymen/forms.py @@ -0,0 +1,18 @@ +from .models import Task +from django.forms import ModelForm, TextInput, Textarea + + +class TaskForm(ModelForm): + class Meta: + model = Task + fields = ["title", "task"] + widgets = { + "title": TextInput(attrs={ + 'class': 'form-control', + 'placeholder':'Введите название' + }), + "task": Textarea(attrs={ + 'class': 'form-control', + 'placeholder': 'Введите описание' + }), + } \ No newline at end of file diff --git a/src/taskmanager/flymen/migrations/0001_initial.py b/src/taskmanager/flymen/migrations/0001_initial.py new file mode 100644 index 0000000..d0d0ec3 --- /dev/null +++ b/src/taskmanager/flymen/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 3.1.1 on 2020-09-06 17:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Task', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=50, verbose_name='Название')), + ('task', models.TextField(verbose_name='Описание')), + ], + ), + ] diff --git a/src/taskmanager/flymen/migrations/__init__.py b/src/taskmanager/flymen/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/taskmanager/flymen/models.py b/src/taskmanager/flymen/models.py new file mode 100644 index 0000000..4354f84 --- /dev/null +++ b/src/taskmanager/flymen/models.py @@ -0,0 +1,14 @@ +from django.db import models + +class Task(models.Model): + title = models.CharField('Название', max_length=50) + task = models.TextField('Описание') + + def __str__(self): + return self.title + + class Meta: + verbose_name = " Задача" + verbose_name_plural = "Задачи" + + diff --git a/src/taskmanager/flymen/templates/flymen/about.html b/src/taskmanager/flymen/templates/flymen/about.html new file mode 100644 index 0000000..94d317b --- /dev/null +++ b/src/taskmanager/flymen/templates/flymen/about.html @@ -0,0 +1,10 @@ +{% extends 'flymen/base.html' %} + +{% block title %} +Страница про путешевствия +{% endblock %} + +{% block content %} +

Старница про летающего мужика

+

Страница про летающего мужика

+{% endblock %} diff --git a/src/taskmanager/flymen/templates/flymen/base.html b/src/taskmanager/flymen/templates/flymen/base.html new file mode 100644 index 0000000..91a3742 --- /dev/null +++ b/src/taskmanager/flymen/templates/flymen/base.html @@ -0,0 +1,29 @@ + + + + + + + {% block title %}{% endblock %} + + + + +
+ {% block content %}{% endblock %} +
+ + \ No newline at end of file diff --git a/src/taskmanager/flymen/templates/flymen/create.html b/src/taskmanager/flymen/templates/flymen/create.html new file mode 100644 index 0000000..9b35fef --- /dev/null +++ b/src/taskmanager/flymen/templates/flymen/create.html @@ -0,0 +1,16 @@ +{% extends 'flymen/base.html' %} + +{% block title %} +Cоздать таск +{% endblock %} + +{% block content %} +

Создать таск

+
+ {% csrf_token %} + {{ form.title }}
+ {{ form.task }}
+ + {{error}} +
+{% endblock %} \ No newline at end of file diff --git a/src/taskmanager/flymen/templates/flymen/index.html b/src/taskmanager/flymen/templates/flymen/index.html new file mode 100644 index 0000000..6a330c1 --- /dev/null +++ b/src/taskmanager/flymen/templates/flymen/index.html @@ -0,0 +1,20 @@ +{% extends 'flymen/base.html' %} + +{% block title %} +{{ title }} +{% endblock %} + +{% block content %} +

Главная страница

+ {% if tasks %} + {% for el in tasks %} +
+

{{ el.title }}

+

{{ el.task }}

+
+ {% endfor %} + {% else %} +

У нас нет записей!

+ {% endif %} +{% endblock %} + diff --git a/src/taskmanager/flymen/tests.py b/src/taskmanager/flymen/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/src/taskmanager/flymen/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/taskmanager/flymen/urls.py b/src/taskmanager/flymen/urls.py new file mode 100644 index 0000000..6f5ad9f --- /dev/null +++ b/src/taskmanager/flymen/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.index, name ='home'), + path('about-us', views.about, name ='about'), + path('creat', views.create, name ='create'), +] \ No newline at end of file diff --git a/src/taskmanager/flymen/views.py b/src/taskmanager/flymen/views.py new file mode 100644 index 0000000..d5bc24a --- /dev/null +++ b/src/taskmanager/flymen/views.py @@ -0,0 +1,25 @@ +from django.shortcuts import render +from .models import Task +from .forms import TaskForm + + + +def index(request): + tasks = Task.objects.order_by('-id') + return render(request, 'flymen/index.html', {'title': 'Главная страница сайта', 'tasks': tasks}) + +def about(request): + return render(request, 'flymen/about.html') + +def create(request): + error = '' + if request.method == 'POST': + form = TaskForm(request.POST) + if form.is_valid(): + form.save() + return redirect('home') + else: + error = 'Форма была неверной' + form = TaskForm() + context = {'form': form, 'error': error } + return render(request, 'flymen/create.html', context) \ No newline at end of file diff --git a/src/taskmanager/manage.py b/src/taskmanager/manage.py new file mode 100644 index 0000000..a00cc82 --- /dev/null +++ b/src/taskmanager/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', 'taskmanager.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() diff --git a/src/taskmanager/taskmanager/__init__.py b/src/taskmanager/taskmanager/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/taskmanager/taskmanager/asgi.py b/src/taskmanager/taskmanager/asgi.py new file mode 100644 index 0000000..be23a88 --- /dev/null +++ b/src/taskmanager/taskmanager/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for taskmanager project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'taskmanager.settings') + +application = get_asgi_application() diff --git a/src/taskmanager/taskmanager/settings.py b/src/taskmanager/taskmanager/settings.py new file mode 100644 index 0000000..79bdc10 --- /dev/null +++ b/src/taskmanager/taskmanager/settings.py @@ -0,0 +1,121 @@ +""" +Django settings for taskmanager project. + +Generated by 'django-admin startproject' using Django 3.1.1. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.1/ref/settings/ +""" + +from pathlib import Path + +# 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/3.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '31e!vwkl(grkl3dxq1#wu5l271v5-ebjw%f8_fe_n(%f5i#-#r' + +# 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', + 'flymen' +] + +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 = 'taskmanager.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 = 'taskmanager.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/3.1/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/3.1/topics/i18n/ + +LANGUAGE_CODE = 'ru' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.1/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/src/taskmanager/taskmanager/urls.py b/src/taskmanager/taskmanager/urls.py new file mode 100644 index 0000000..f7a9ca9 --- /dev/null +++ b/src/taskmanager/taskmanager/urls.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('flymen.urls')) +] diff --git a/src/taskmanager/taskmanager/wsgi.py b/src/taskmanager/taskmanager/wsgi.py new file mode 100644 index 0000000..9214ad8 --- /dev/null +++ b/src/taskmanager/taskmanager/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for taskmanager project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'taskmanager.settings') + +application = get_wsgi_application() From ee2ee242a4c77eb5313260703080d0ad052b6dfb Mon Sep 17 00:00:00 2001 From: Vitaliy Barahovskiy Date: Thu, 1 Oct 2020 18:44:38 +0300 Subject: [PATCH 8/9] Test Project: Vitaliy Barahovskiy --- src/ppz/ppz/ppz/__init__.py | 0 src/ppz/ppz/ppz/asgi.py | 16 +++++ src/ppz/ppz/ppz/settings.py | 120 ++++++++++++++++++++++++++++++++++++ src/ppz/ppz/ppz/urls.py | 14 +++++ src/ppz/ppz/ppz/views.py | 7 +++ src/ppz/ppz/ppz/wsgi.py | 16 +++++ 6 files changed, 173 insertions(+) create mode 100644 src/ppz/ppz/ppz/__init__.py create mode 100644 src/ppz/ppz/ppz/asgi.py create mode 100644 src/ppz/ppz/ppz/settings.py create mode 100644 src/ppz/ppz/ppz/urls.py create mode 100644 src/ppz/ppz/ppz/views.py create mode 100644 src/ppz/ppz/ppz/wsgi.py diff --git a/src/ppz/ppz/ppz/__init__.py b/src/ppz/ppz/ppz/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ppz/ppz/ppz/asgi.py b/src/ppz/ppz/ppz/asgi.py new file mode 100644 index 0000000..02c2010 --- /dev/null +++ b/src/ppz/ppz/ppz/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for ppz project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ppz.settings') + +application = get_asgi_application() diff --git a/src/ppz/ppz/ppz/settings.py b/src/ppz/ppz/ppz/settings.py new file mode 100644 index 0000000..3315832 --- /dev/null +++ b/src/ppz/ppz/ppz/settings.py @@ -0,0 +1,120 @@ + + +from pathlib import Path + +# 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/3.1/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'r)hk(8^1)%jwmx2+#gx2hpglo^tg=s+ii=s86)m_0)v*7l2qze' + +# 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', + + 'rest_framework', + + 'blog', + 'api', +] + +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 = 'ppz.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': ['templates'], + '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 = 'ppz.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/3.1/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/3.1/topics/i18n/ + +LANGUAGE_CODE = 'ru' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + + +STATIC_URL = '/static/' +STATICFILES_DIRS = [ + BASE_DIR / "static", + "/static/" +] + +MEDIA_URL = '/media/' +MEDIA_ROOT = BASE_DIR / "media" \ No newline at end of file diff --git a/src/ppz/ppz/ppz/urls.py b/src/ppz/ppz/ppz/urls.py new file mode 100644 index 0000000..66e2a6e --- /dev/null +++ b/src/ppz/ppz/ppz/urls.py @@ -0,0 +1,14 @@ +from django.contrib import admin +from django.urls import path, include +from django.conf import settings +from django.conf.urls import static + +from ppz.views import hello + +urlpatterns = [ + path('admin/', admin.site.urls), + path('hello/', hello), + path('api/', include('api.urls')), + path('', include('blog.urls')), +] + static.static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + diff --git a/src/ppz/ppz/ppz/views.py b/src/ppz/ppz/ppz/views.py new file mode 100644 index 0000000..6303ff4 --- /dev/null +++ b/src/ppz/ppz/ppz/views.py @@ -0,0 +1,7 @@ +from django.http import HttpResponse +from django.contrib.auth.models import User + +def hello(request): + user = request.user + import pdb; + return HttpResponse(f"hello {user.first_name}") diff --git a/src/ppz/ppz/ppz/wsgi.py b/src/ppz/ppz/ppz/wsgi.py new file mode 100644 index 0000000..a4c77a7 --- /dev/null +++ b/src/ppz/ppz/ppz/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for ppz project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ppz.settings') + +application = get_wsgi_application() From 57de6390474494d9f7baf5b11922c11114756790 Mon Sep 17 00:00:00 2001 From: Vitaliy Barahovskiy Date: Thu, 1 Oct 2020 18:54:39 +0300 Subject: [PATCH 9/9] text django: Barahovskiy --- src/ppz/ppz/api/__init__.py | 0 src/ppz/ppz/api/admin.py | 3 ++ src/ppz/ppz/api/apps.py | 5 +++ src/ppz/ppz/api/migrations/__init__.py | 0 src/ppz/ppz/api/models.py | 3 ++ src/ppz/ppz/api/serializers.py | 24 ++++++++++ src/ppz/ppz/api/tests.py | 3 ++ src/ppz/ppz/api/urls.py | 16 +++++++ src/ppz/ppz/api/views.py | 19 ++++++++ src/ppz/ppz/blog/__init__.py | 0 src/ppz/ppz/blog/admin.py | 14 ++++++ src/ppz/ppz/blog/apps.py | 5 +++ src/ppz/ppz/blog/forms.py | 24 ++++++++++ src/ppz/ppz/blog/migrations/0001_initial.py | 23 ++++++++++ .../blog/migrations/0002_article_author.py | 21 +++++++++ .../migrations/0003_auto_20200909_2156.py | 18 ++++++++ .../ppz/blog/migrations/0004_article_image.py | 18 ++++++++ src/ppz/ppz/blog/migrations/0005_book.py | 27 +++++++++++ src/ppz/ppz/blog/migrations/__init__.py | 0 src/ppz/ppz/blog/models.py | 34 ++++++++++++++ src/ppz/ppz/blog/tests.py | 3 ++ src/ppz/ppz/blog/urls.py | 11 +++++ src/ppz/ppz/blog/views.py | 45 +++++++++++++++++++ src/ppz/ppz/manage.py | 22 +++++++++ src/ppz/ppz/static/__init__.py | 0 src/ppz/ppz/static/main.css | 7 +++ src/ppz/ppz/templates/article.html | 4 ++ src/ppz/ppz/templates/create_article.html | 11 +++++ src/ppz/ppz/templates/main.html | 33 ++++++++++++++ src/ppz/ppz/templates/user.html | 7 +++ 30 files changed, 400 insertions(+) create mode 100644 src/ppz/ppz/api/__init__.py create mode 100644 src/ppz/ppz/api/admin.py create mode 100644 src/ppz/ppz/api/apps.py create mode 100644 src/ppz/ppz/api/migrations/__init__.py create mode 100644 src/ppz/ppz/api/models.py create mode 100644 src/ppz/ppz/api/serializers.py create mode 100644 src/ppz/ppz/api/tests.py create mode 100644 src/ppz/ppz/api/urls.py create mode 100644 src/ppz/ppz/api/views.py create mode 100644 src/ppz/ppz/blog/__init__.py create mode 100644 src/ppz/ppz/blog/admin.py create mode 100644 src/ppz/ppz/blog/apps.py create mode 100644 src/ppz/ppz/blog/forms.py create mode 100644 src/ppz/ppz/blog/migrations/0001_initial.py create mode 100644 src/ppz/ppz/blog/migrations/0002_article_author.py create mode 100644 src/ppz/ppz/blog/migrations/0003_auto_20200909_2156.py create mode 100644 src/ppz/ppz/blog/migrations/0004_article_image.py create mode 100644 src/ppz/ppz/blog/migrations/0005_book.py create mode 100644 src/ppz/ppz/blog/migrations/__init__.py create mode 100644 src/ppz/ppz/blog/models.py create mode 100644 src/ppz/ppz/blog/tests.py create mode 100644 src/ppz/ppz/blog/urls.py create mode 100644 src/ppz/ppz/blog/views.py create mode 100644 src/ppz/ppz/manage.py create mode 100644 src/ppz/ppz/static/__init__.py create mode 100644 src/ppz/ppz/static/main.css create mode 100644 src/ppz/ppz/templates/article.html create mode 100644 src/ppz/ppz/templates/create_article.html create mode 100644 src/ppz/ppz/templates/main.html create mode 100644 src/ppz/ppz/templates/user.html diff --git a/src/ppz/ppz/api/__init__.py b/src/ppz/ppz/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ppz/ppz/api/admin.py b/src/ppz/ppz/api/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/src/ppz/ppz/api/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/src/ppz/ppz/api/apps.py b/src/ppz/ppz/api/apps.py new file mode 100644 index 0000000..d87006d --- /dev/null +++ b/src/ppz/ppz/api/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ApiConfig(AppConfig): + name = 'api' diff --git a/src/ppz/ppz/api/migrations/__init__.py b/src/ppz/ppz/api/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ppz/ppz/api/models.py b/src/ppz/ppz/api/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/src/ppz/ppz/api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/src/ppz/ppz/api/serializers.py b/src/ppz/ppz/api/serializers.py new file mode 100644 index 0000000..3ccb544 --- /dev/null +++ b/src/ppz/ppz/api/serializers.py @@ -0,0 +1,24 @@ +from django.contrib.auth.models import User + +from rest_framework import serializers + +from blog.models import Article + +from blog.models import Book + +class BookSerializer(serializers.ModelSerializer): + class Meta: + model = Book + fields = 'id', 'title', 'author', 'description', 'author_id' + +class AuthorSerializer(serializers.ModelSerializer): + class Meta: + model = User + fields = '__all__' + + +class ArticleSerializer(serializers.ModelSerializer): + author = AuthorSerializer(read_only=True) + class Meta: + model = Article + fields = 'id', 'title', 'author', 'url', 'description', 'author_id' \ No newline at end of file diff --git a/src/ppz/ppz/api/tests.py b/src/ppz/ppz/api/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/src/ppz/ppz/api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/ppz/ppz/api/urls.py b/src/ppz/ppz/api/urls.py new file mode 100644 index 0000000..4f80ac0 --- /dev/null +++ b/src/ppz/ppz/api/urls.py @@ -0,0 +1,16 @@ +from django.urls import path, include + +from rest_framework.routers import DefaultRouter + +from api.views import ArticleViewSet +from api.views import BookViewSet + +router = DefaultRouter() +router.register(r"articles", ArticleViewSet) + +urlpatterns = [path("", include(router.urls))] + + + +router.register(r"books", BookViewSet) +urlpatterns = [path("", include(router.urls))] \ No newline at end of file diff --git a/src/ppz/ppz/api/views.py b/src/ppz/ppz/api/views.py new file mode 100644 index 0000000..5cb6af3 --- /dev/null +++ b/src/ppz/ppz/api/views.py @@ -0,0 +1,19 @@ +from rest_framework.viewsets import ModelViewSet + + +from api.serializers import BookSerializer +from api.serializers import ArticleSerializer + +from blog.models import Article +from blog.models import Book + + +class ArticleViewSet(ModelViewSet): + queryset = Article.objects.all() + serializer_class = ArticleSerializer + +class BookViewSet(ModelViewSet): + queryset = Book.objects.all() + serializer_class = BookSerializer + + diff --git a/src/ppz/ppz/blog/__init__.py b/src/ppz/ppz/blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ppz/ppz/blog/admin.py b/src/ppz/ppz/blog/admin.py new file mode 100644 index 0000000..c9fa515 --- /dev/null +++ b/src/ppz/ppz/blog/admin.py @@ -0,0 +1,14 @@ +from django.contrib import admin +from blog.models import Article + + +class ArticleAdmin(admin.ModelAdmin): + + search_fields = ('title', 'short_description', 'author',) + list_display = 'title', 'short_description', 'author_name', 'author' + list_filter = 'title', + + + + +admin.site.register(Article, ArticleAdmin) \ No newline at end of file diff --git a/src/ppz/ppz/blog/apps.py b/src/ppz/ppz/blog/apps.py new file mode 100644 index 0000000..7930587 --- /dev/null +++ b/src/ppz/ppz/blog/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class BlogConfig(AppConfig): + name = 'blog' diff --git a/src/ppz/ppz/blog/forms.py b/src/ppz/ppz/blog/forms.py new file mode 100644 index 0000000..b922ea3 --- /dev/null +++ b/src/ppz/ppz/blog/forms.py @@ -0,0 +1,24 @@ +from django import forms + +from blog.models import Article +from blog.models import Book + +class ArticleForm(forms.ModelForm): + + description = forms.CharField( + label='Описание' + ) + + class Meta: + model = Article + fields = ('title', 'description', 'author') + +class BookForm(forms.ModelForm): + + description = forms.CharField( + label='Описание' + ) + + class Meta: + model = Book + fields = ('title', 'description', 'author') \ No newline at end of file diff --git a/src/ppz/ppz/blog/migrations/0001_initial.py b/src/ppz/ppz/blog/migrations/0001_initial.py new file mode 100644 index 0000000..6499686 --- /dev/null +++ b/src/ppz/ppz/blog/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.1 on 2020-09-09 17:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Article', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=10)), + ('description', models.CharField(max_length=256)), + ('author_name', models.CharField(max_length=20)), + ], + ), + ] diff --git a/src/ppz/ppz/blog/migrations/0002_article_author.py b/src/ppz/ppz/blog/migrations/0002_article_author.py new file mode 100644 index 0000000..2a9a40e --- /dev/null +++ b/src/ppz/ppz/blog/migrations/0002_article_author.py @@ -0,0 +1,21 @@ +# Generated by Django 3.1.1 on 2020-09-09 18:33 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('blog', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='article', + name='author', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/src/ppz/ppz/blog/migrations/0003_auto_20200909_2156.py b/src/ppz/ppz/blog/migrations/0003_auto_20200909_2156.py new file mode 100644 index 0000000..e9f5d20 --- /dev/null +++ b/src/ppz/ppz/blog/migrations/0003_auto_20200909_2156.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.1 on 2020-09-09 18:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blog', '0002_article_author'), + ] + + operations = [ + migrations.AlterField( + model_name='article', + name='description', + field=models.TextField(), + ), + ] diff --git a/src/ppz/ppz/blog/migrations/0004_article_image.py b/src/ppz/ppz/blog/migrations/0004_article_image.py new file mode 100644 index 0000000..7cf1bf9 --- /dev/null +++ b/src/ppz/ppz/blog/migrations/0004_article_image.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.1 on 2020-09-28 16:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blog', '0003_auto_20200909_2156'), + ] + + operations = [ + migrations.AddField( + model_name='article', + name='image', + field=models.ImageField(blank=True, null=True, upload_to=''), + ), + ] diff --git a/src/ppz/ppz/blog/migrations/0005_book.py b/src/ppz/ppz/blog/migrations/0005_book.py new file mode 100644 index 0000000..71f0070 --- /dev/null +++ b/src/ppz/ppz/blog/migrations/0005_book.py @@ -0,0 +1,27 @@ +# Generated by Django 3.1.1 on 2020-10-01 15:16 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('blog', '0004_article_image'), + ] + + operations = [ + migrations.CreateModel( + name='Book', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=10)), + ('description', models.TextField()), + ('author_name', models.CharField(max_length=20)), + ('image', models.ImageField(blank=True, null=True, upload_to='')), + ('author', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/src/ppz/ppz/blog/migrations/__init__.py b/src/ppz/ppz/blog/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ppz/ppz/blog/models.py b/src/ppz/ppz/blog/models.py new file mode 100644 index 0000000..63043a7 --- /dev/null +++ b/src/ppz/ppz/blog/models.py @@ -0,0 +1,34 @@ +from django.db import models +from django.contrib.auth.models import User + +class Article(models.Model): + title = models.CharField(max_length=10) + description = models.TextField() + author_name = models.CharField(max_length=20) + author = models.ForeignKey(User, on_delete=models.CASCADE, null=True) + image = models.ImageField(blank=True, null=True) + + @property + def short_description(self): + return self.description[:1] + + + def __str__(self): + return self.title + +class Book(models.Model): + title = models.CharField(max_length=10) + description = models.TextField() + author_name = models.CharField(max_length=20) + author = models.ForeignKey(User, on_delete=models.CASCADE, null=True) + image = models.ImageField(blank=True, null=True) + + + + @property + def short_description(self): + return self.description[:1] + + + def __str__(self): + return self.title diff --git a/src/ppz/ppz/blog/tests.py b/src/ppz/ppz/blog/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/src/ppz/ppz/blog/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/ppz/ppz/blog/urls.py b/src/ppz/ppz/blog/urls.py new file mode 100644 index 0000000..2e8b646 --- /dev/null +++ b/src/ppz/ppz/blog/urls.py @@ -0,0 +1,11 @@ +from django.urls import path +from blog.views import UserListView, UserDetailView, ArticleDetailView, BookDetailView + + + +urlpatterns = [ + path('', UserListView.as_view()), + path('users//', UserDetailView.as_view()), + path('article//', ArticleDetailView.as_view()), + path('book//', BookDetailView.as_view()), +] \ No newline at end of file diff --git a/src/ppz/ppz/blog/views.py b/src/ppz/ppz/blog/views.py new file mode 100644 index 0000000..e500679 --- /dev/null +++ b/src/ppz/ppz/blog/views.py @@ -0,0 +1,45 @@ +from django.views.generic import ListView, DetailView +from django.contrib.auth.models import User +from blog.forms import ArticleForm +from blog.forms import BookForm +from blog.models import Article +from blog.models import Book + + +class UserListView(ListView): + model = User + template_name = 'main.html' + + def get_context_data(self, *, object_list=None, **kwargs): + context = super().get_context_data(object_list=None, **kwargs) + context['users'] = self.object_list + context['form'] = ArticleForm + return context + + def post(self, request, *args, **kwargs): + form = ArticleForm(request.POST) + form.is_valid() + form.save() + return self.get(request, *args, **kwargs) + + +class UserDetailView(DetailView): + model = User + template_name = 'user.html' + slug_field = 'username' + slug_url_kwarg = 'username' + +class ArticleDetailView(DetailView): + model = Article + template_name = 'article.html' + +class BookDetailView(DetailView): + model = Book + template_name = 'article.html' + + + + + + + diff --git a/src/ppz/ppz/manage.py b/src/ppz/ppz/manage.py new file mode 100644 index 0000000..a9eb269 --- /dev/null +++ b/src/ppz/ppz/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', 'ppz.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() diff --git a/src/ppz/ppz/static/__init__.py b/src/ppz/ppz/static/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/ppz/ppz/static/main.css b/src/ppz/ppz/static/main.css new file mode 100644 index 0000000..c2d9833 --- /dev/null +++ b/src/ppz/ppz/static/main.css @@ -0,0 +1,7 @@ +body { + background-image: + url(https://bipbap.ru/wp-content/uploads/2017/09/5114e7b13c84a77355cbec162ca7ff45.jpg); + } +h1 { + color: red; +} \ No newline at end of file diff --git a/src/ppz/ppz/templates/article.html b/src/ppz/ppz/templates/article.html new file mode 100644 index 0000000..512e11c --- /dev/null +++ b/src/ppz/ppz/templates/article.html @@ -0,0 +1,4 @@ +

Article inaformation:

+ Title: {{ object.title }}
+ Description: {{ object.description }}
+ Image cover: {{ object.image }}
diff --git a/src/ppz/ppz/templates/create_article.html b/src/ppz/ppz/templates/create_article.html new file mode 100644 index 0000000..1bb58f2 --- /dev/null +++ b/src/ppz/ppz/templates/create_article.html @@ -0,0 +1,11 @@ + +

Create New Article

+ +
+ {% csrf_token %} + {{ form.as_p }} + + + +
+ diff --git a/src/ppz/ppz/templates/main.html b/src/ppz/ppz/templates/main.html new file mode 100644 index 0000000..1f34895 --- /dev/null +++ b/src/ppz/ppz/templates/main.html @@ -0,0 +1,33 @@ +{% load static %} + + + + + Main Page + + + + + +
+
+ {% for user in users %} +
+

Profile:

+ Email: {{ user.email }}
+ Username: {{ user.username }}
+ First.name: {{ user.first_name}}
+ Last.name: {{ user.last_name}}
+
+
+ {% endfor %} +
+
+ + {% include 'create_article.html' %} +
+ + + + + \ No newline at end of file diff --git a/src/ppz/ppz/templates/user.html b/src/ppz/ppz/templates/user.html new file mode 100644 index 0000000..0ee9690 --- /dev/null +++ b/src/ppz/ppz/templates/user.html @@ -0,0 +1,7 @@ + +

Profile:

+ Email: {{ object.email }}
+ Username: {{ object.username }}
+ First.name: {{ object.first_name}}
+ Last.name: {{ object.last_name}}
+