Відкрийте PowerShell в режимі адміністратора та виконайте:
py -m pip -V| views.py (файл треба створити поряд з urls.py): | |
| from django.http import HttpResponse | |
| def main_page(request): | |
| return HttpResponse("main page") | |
| def second_page(request): | |
| return HttpResponse("second page") |
| from django.contrib import admin | |
| from django.urls import path | |
| from django.http import HttpResponse | |
| def say_hello(request): | |
| return HttpResponse("це нова головна сторінка!") | |
| def second_page(request): | |
| return HttpResponse("це друга сторінка!") |
| # спосіб 1 — найчистіший (Object.create аналог) | |
| proto = { | |
| "greet": lambda self: f"Привіт, я {self.get('name', 'анонім')}", | |
| "say_hi": lambda self: "Привіт від прототипу!" | |
| } | |
| obj = proto.copy() | |
| obj["name"] = "Олег" | |
| # або через dict з __getattr__ |
У цьому домашньому завданні потрібно реалізувати один з наведених нижче додатків, використовуючи архітектурний патерн MVT (Model-View-Template). Оскільки ми поки що не використовували фреймворк Django, реалізуйте додаток у консольному варіанті (використовуючи стандартний ввід/вивід Python або бібліотеку Textual), або десктопній версії (наприклад, з використанням бібліотеки Tkinter/PySide6 для графічного інтерфейсу), або веб-фреймворк Flask.
Model: Класи або структури для зберігання та маніпуляції даними (наприклад, списки, словники, класи Python для бази даних у пам'яті або файлах).
View: Логіка для відображення даних користувачу (консольний вивід, таблиці в терміналі або вікна/форми/сторінки).
Template: Шаблони для форматування виводу (наприклад, рядки з форматуванням для консолі або шаблони для GUI).
Додаткові Вимоги:
Зберігайте дані в пам'яті, файлах (наприклад, JSON/CSV) або простій базі даних (як
| from flask import Flask, request, redirect, url_for, render_template_string | |
| app = Flask(__name__) | |
| # ──────────────────────────────────────────────── | |
| # model — дані та бізнес-логіка | |
| # ──────────────────────────────────────────────── | |
| class ShoppingModel: |
| import sys | |
| import ctypes | |
| if sys.platform == "win32": | |
| console = ctypes.windll.kernel32.GetConsoleWindow() | |
| if console: | |
| ctypes.windll.user32.ShowWindow(console, 0) | |
| from PySide6.QtWidgets import ( | |
| QApplication, QMainWindow, QWidget, |
| from textual.app import App, ComposeResult, on | |
| from textual.widgets import Header, Footer, Button, Input, Static, Label, Rule | |
| from textual.containers import Vertical, Horizontal, ScrollableContainer | |
| from textual.screen import Screen | |
| # ──────────────────────────────────────────────── | |
| # Model | |
| # ──────────────────────────────────────────────── | |
| class ShoppingModel: |
| # Model: зберігає та маніпулює даними | |
| class ShoppingModel: | |
| def __init__(self): | |
| self.items = [] # список покупок: [{'name': 'Яблука', 'quantity': 5, 'price': 77}] | |
| def add_item(self, name, quantity, price): | |
| self.items.append({'name': name, 'quantity': quantity, 'price': price}) | |
| def get_all_items(self): | |
| return self.items |