From d5f260fcbe140e3b64b690ae15a3e01c3cc16000 Mon Sep 17 00:00:00 2001 From: kew2023 Date: Wed, 21 May 2025 13:50:02 +0300 Subject: [PATCH] lab7-8 --- .../DjangoProject_Web_2025/.idea/.gitignore" | 3 + .../.idea/DjangoProject_Web_2025.iml" | 10 + .../inspectionProfiles/profiles_settings.xml" | 6 + .../DjangoProject_Web_2025/.idea/misc.xml" | 7 + .../DjangoProject_Web_2025/.idea/modules.xml" | 8 + .../lab7-8/DjangoProject_Web_2025/main.py" | 16 ++ .../DjangoProject_Web_2025/mysite/db.sqlite3" | Bin 0 -> 139264 bytes .../mysite/main/__init__.py" | 0 .../__pycache__/__init__.cpython-310.pyc" | Bin 0 -> 147 bytes .../main/__pycache__/admin.cpython-310.pyc" | Bin 0 -> 564 bytes .../main/__pycache__/apps.cpython-310.pyc" | Bin 0 -> 422 bytes .../main/__pycache__/forms.cpython-310.pyc" | Bin 0 -> 1850 bytes .../main/__pycache__/models.cpython-310.pyc" | Bin 0 -> 1069 bytes .../main/__pycache__/urls.cpython-310.pyc" | Bin 0 -> 550 bytes .../main/__pycache__/views.cpython-310.pyc" | Bin 0 -> 4474 bytes .../mysite/main/admin.py" | 8 + .../mysite/main/apps.py" | 6 + .../mysite/main/forms.py" | 33 +++ .../mysite/main/migrations/0001_initial.py" | 24 +++ .../main/migrations/0002_feedbackmessage.py" | 23 +++ .../mysite/main/migrations/__init__.py" | 0 .../__pycache__/0001_initial.cpython-310.pyc" | Bin 0 -> 790 bytes .../0002_feedbackmessage.cpython-310.pyc" | Bin 0 -> 813 bytes .../__pycache__/__init__.cpython-310.pyc" | Bin 0 -> 158 bytes .../mysite/main/models.py" | 19 ++ .../main/static/img/django-logo-positive.png" | Bin 0 -> 17408 bytes .../mysite/main/static/styles.css" | 193 ++++++++++++++++++ .../mysite/main/templates/about.html" | 119 +++++++++++ .../mysite/main/templates/base.html" | 56 +++++ .../mysite/main/templates/contact.html" | 22 ++ .../mysite/main/templates/index.html" | 39 ++++ .../mysite/main/templates/login.html" | 36 ++++ .../mysite/main/templates/messages.html" | 18 ++ .../mysite/main/templates/register.html" | 14 ++ .../mysite/main/tests.py" | 3 + .../mysite/main/urls.py" | 12 ++ .../mysite/main/views.py" | 138 +++++++++++++ .../DjangoProject_Web_2025/mysite/manage.py" | 23 +++ .../mysite/mysite/__init__.py" | 0 .../__pycache__/__init__.cpython-310.pyc" | Bin 0 -> 149 bytes .../__pycache__/settings.cpython-310.pyc" | Bin 0 -> 2349 bytes .../mysite/__pycache__/urls.cpython-310.pyc" | Bin 0 -> 984 bytes .../mysite/__pycache__/wsgi.cpython-310.pyc" | Bin 0 -> 550 bytes .../mysite/mysite/asgi.py" | 16 ++ .../mysite/mysite/settings.py" | 129 ++++++++++++ .../mysite/mysite/urls.py" | 24 +++ .../mysite/mysite/wsgi.py" | 16 ++ 47 files changed, 1021 insertions(+) create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/.gitignore" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/DjangoProject_Web_2025.iml" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/inspectionProfiles/profiles_settings.xml" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/misc.xml" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/modules.xml" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/main.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/db.sqlite3" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__init__.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/__init__.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/admin.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/apps.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/forms.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/models.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/urls.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/views.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/admin.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/apps.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/forms.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/0001_initial.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/0002_feedbackmessage.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__init__.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0001_initial.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0002_feedbackmessage.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/__init__.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/models.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/static/img/django-logo-positive.png" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/static/styles.css" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/about.html" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/base.html" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/contact.html" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/index.html" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/login.html" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/messages.html" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/register.html" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/tests.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/urls.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/views.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/manage.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__init__.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/__init__.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/settings.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/urls.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/wsgi.cpython-310.pyc" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/asgi.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/settings.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/urls.py" create mode 100644 "works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/wsgi.py" diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/.gitignore" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/.gitignore" new file mode 100644 index 000000000..26d33521a --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/.gitignore" @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/DjangoProject_Web_2025.iml" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/DjangoProject_Web_2025.iml" new file mode 100644 index 000000000..74d515a02 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/DjangoProject_Web_2025.iml" @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/inspectionProfiles/profiles_settings.xml" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/inspectionProfiles/profiles_settings.xml" new file mode 100644 index 000000000..105ce2da2 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/inspectionProfiles/profiles_settings.xml" @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/misc.xml" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/misc.xml" new file mode 100644 index 000000000..fdb696f72 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/misc.xml" @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/modules.xml" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/modules.xml" new file mode 100644 index 000000000..68eeaec2b --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/.idea/modules.xml" @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/main.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/main.py" new file mode 100644 index 000000000..5596b4478 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/main.py" @@ -0,0 +1,16 @@ +# This is a sample Python script. + +# Press Shift+F10 to execute it or replace it with your code. +# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings. + + +def print_hi(name): + # Use a breakpoint in the code line below to debug your script. + print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint. + + +# Press the green button in the gutter to run the script. +if __name__ == '__main__': + print_hi('PyCharm') + +# See PyCharm help at https://www.jetbrains.com/help/pycharm/ diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/db.sqlite3" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/db.sqlite3" new file mode 100644 index 0000000000000000000000000000000000000000..09471ed0c9736151dac932a0fe957090fae0399d GIT binary patch literal 139264 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 literal 0 HcmV?d00001 diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__init__.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__init__.py" new file mode 100644 index 000000000..e69de29bb diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/__init__.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/__init__.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..34e55d3d0a831ea8acd7386be20018cd8d254ed3 GIT binary patch literal 147 zcmd1j<>g`kf)rb&3=sVoL?8o3AjbiSi&=m~3PUi1CZpd!6b-m6cmJJpy{2eY-a75iQSXKp5uq; z(GST_^wm>-!IRaqg294%-PK)H?{!x{pHBtb&AZ1JPe6!YF}Q0P2S@Dw1p^8MD_T$h z0uxMa(xxf}LGWEt`U6e{O3c0q%m~)mb$Sgd$NZxxC%0TJN(h<3w&`w}DMk-Zh;V7@ zFAMVCtf-DzcP-`}vHLv+5(-eL1VN>kD2b`cP;&PyJo>NE>&Q~dAUo4i$fz}q4U=}u z5~j5yGZ1Psl&Q?wGLCQ+a9lM+|RWBdS&e2o0)C=pt13n z)@;JulX3NhK5xjP5BJB*^TrP3ehRk}IU@XicKot>`)TpMdb2j&s{i2nHPwUuOiO+6 z^x%2bZhSLP#j3k%{ILDYjf<0z>^{mYgiIt9FrJ>36ZHVcR{M3|4X#ym6 p%R=F3#bU{Y=^`GFe>B$rQ?}jhj_I$qPdS5T4DZ68m$JUIp=%OOS#WQEC0fL#v=5gut@xY->vX%qE9=)hF;Re5Jj5 z@)bNe+Z61;e7iIAeKWh0_j+w0!?VMePddMCux%~{LvnpUfPgH4l!c7JEue$^1CT5B z&O-;?NAO!e!~&n0-BD3o=Gi=6%xq@c7zIOe-6v2GG6YhykfRg2$f=8K+G81Kjs9&P zmoi)A0ZxN7N0sQ{B3_K@D!++Ug2qjWI`Lb^6C#tT62i2FAZDG|dsm3pS|*#y9;&&l zlS)X^i+R()*1n*$dsxHo;QA!Gdm7(ISL?|SWxiCiN<6En7#t0bqjaU?N=0^XB#S}^ y#j50_w!6|h1Rl7|W9!_+=ccpyf#sHt9b?)51Djiia>hGtUVd)3q;114^!XnE>}3N0 literal 0 HcmV?d00001 diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/forms.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/forms.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..4b56f9f3ff57be6861f0b0d5fe404d1afa837c75 GIT binary patch literal 1850 zcma)7&u<$=6rS0iv-UbaOj<}mrD_Y(B4j}-I3R?ALQ{bhgCGcLWofnXOr15m-gaiK zv^j7o7Y-Fyu5indLnRKt-{4;7$|>jGxWId}acsr0)V1bm=6f@5X1@2$bJ=P&2z)<$ zar3b05b_TW=0Cv5HZ*k%h7(S6QqY)E>|422*s*Q;cJ35z>_Xq+ZtfL+>{D`&aF6>x z67CB+WKZlk0EF=XkN}VdAWc9Tya`D23<&`Vc?*!1uwh1vuY5zI)l=A?L{z)?OIaxB ztbMD5+>s)!vU0QwAYcw+r?j5Ax+?@fNc-RK38m73=wpQW@BD5b0xC#MIf*S{4;@aq z#qFn7?83;y8$G45Z#*7Y#(nSwoWZ#Q-P|chRobuc2xAW-O@5jD`TXZo4&BJoZk`^9 zTsMmJQId<%pgPp<-6GBMh{^z_jN7>6*U8`T`~CS(lV_8^CVxzxMV9eu?yHR1}~T(f=gs7ir7 z?H4sYCq!O_)yDjL=k7^>1nZ(Eqbog~f)r{@B_bNIa z+#JIxe3pzjl+iVd{U>k2uzTWM+zR2#0?AEqgwS5#VHs&tgDg-t&4YXmrUBcVpN^|T zF{-kDS_%GgtiJ?inNqSnBKBm^Ept8KO2HrrtT1HW>KumAu6 literal 0 HcmV?d00001 diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/models.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/models.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..ce7ac4c4626e7a3a7349034f4bf78dc44d1a8154 GIT binary patch literal 1069 zcmZ`&OKTf35SI4gT|4W9rfJeAn1Z2uF(ssz5K17AKEQ6FhSJ3#WJ^ix?xWSNX<~XP zG}qpGD}m&gzocV($~m{3I-^agn-VShG$V~>G~di-^?HrK*natNZ(l&5w@fw>#H5vu;U09cHGMyM^xUB&^v>hB&52MWJ1RI0M+SX zgR&0ud<{U7hzb%}(jGa23hNtcd)vvzoAl17|bB6_rC01;T?+zMkF4 z(t;0)w#;+BE6)VDJf*sp@O>7`bhp^+f*SB~k+C%U#JCUx3O0WR${x%On0W)>GZ~Q| zkT$FoRtr|^*cSE)Xh$x@bUGJSU-dReJl)M+t863(1$!&| zZ29r>lU{O=4-44?Z)vaOwDsXYdyIiY#;V{VhfYx_mv9jN)-wv?jJ2k$S7u3XqxSdgyr0skv7 z#xn(80O4wZj~pnf-BI{kT+lGIOx6mYrsfd-W?&wVS)pJkU!aqvE3cX2Twy$Q3tr*Z{GUm&j0`b literal 0 HcmV?d00001 diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/urls.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/urls.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..1ef0f7240b3ac96a83c0890368cd83747a111cab GIT binary patch literal 550 zcmYk2$xg#C5Qgn$ZI+g$Pr$7Q8dQl3LWlz#IIxLINKvFH%~)xwELD;gnj?1}gcso< zeC5Tpqg#avH)cjvzL++uEZIzS8<#LDXZ0BnlCGdD^0BRFwd$WtQ=Qsv$|Wb zC@w2jI9%VQwVLEnoZ+=5)*6PUjM&GdHX~LY2e67m=5PbS-@@I{;wH?4EXqgAA}Naw z+A9j^bKve_t4P?Oo?B8co}6Zf;vPP*`}Cn^+m&j+V3XgA{#HQ^?Qw`pmnT z+}?Xvjf00GpR=&?pV`zOpNvnvbX~?3^U@&BJmGG%Sabb6&0(3a3-OWV0L3B}?MXfQ HH}&sdR6dvc literal 0 HcmV?d00001 diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/views.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/__pycache__/views.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..cd9284340c5991b3cad80c32e16ac0f3bab092a8 GIT binary patch literal 4474 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 literal 0 HcmV?d00001 diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0002_feedbackmessage.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/0002_feedbackmessage.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..4c406a4bfdb780c75c7bcdc05b2155b450499b4e GIT binary patch literal 813 zcmYjPOK%fF44#?Yyf&M(AjF}^A|d5cg-BcwLWMq1g;J1+gcL;@O=4#|={~~j78V|NSn!ImY!~fk;tA3(%YQuiN|3vCk7h1)3>lhKHYIZ)vJXaA~ zp<#4v#mQmMx1qWyGC4D-3Iy9;8l5P!lIOUxtsD*gufL!TKcSgsIm%QeXnm*GK!f%; zEk|9-7}KaYvo$36czsPbwvkk5K~-F;g3>p5Y4%wvfSxd2ms_7}j3Gbmb!=0X7*g6m zO4{{BjAVyWe!Nhz!*w3u5>vo*rZG1}H?!@7a)O~F$9OIhzS7Z4n(f$?wylFRWj1DT zdzCys{6?X#H>Ap<$Dc&IkBw_F+bF6$)u4yh&+o`2)l1b-m9yvqX;@z=j@ q-jsQ#L{|$+*gcq*bC;u*m$xl$tVdMOHlJ@c_<}nKhqWypdj9}|W9D)I literal 0 HcmV?d00001 diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/__init__.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/migrations/__pycache__/__init__.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..df64c9d0ebda2e01aaa7ba2905be25a3d8984f80 GIT binary patch literal 158 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%0Dl@%khLeEN&}=~TOMR<#H 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 div, main form { + background: white; + padding: 25px 30px; + border-radius: 10px; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + width: 100%; + max-width: 600px; +} + +h2 { + margin-top: 0; + color: #2c3e50; +} + +button { + background-color: #1abc9c; + color: white; + border: none; + padding: 10px 18px; + border-radius: 5px; + cursor: pointer; + transition: background 0.3s ease; +} + +button:hover { + background-color: #16a085; +} + +footer { + background-color: #2c3e50; + color: white; + text-align: center; + padding: 15px 0; + margin-top: auto; +} +.footer-content { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; +} + +.social-links a { + color: #eee; + margin: 0 10px; + font-size: 20px; + transition: color 0.3s; +} + +.social-links a:hover { + color: #1da1f2; /* голубоватый акцент при наведении */ +} + + +.error-box { + background-color: #ffe0e0; + color: #b10000; + border: 1px solid #b10000; + border-radius: 8px; + padding: 10px 15px; + margin-bottom: 15px; + font-size: 14px; +} + +.login div { + margin-bottom: 14px; +} + +.form-group { + margin-bottom: 15px; +} +.error { + color: #b10000; + font-size: 13px; + margin-top: 4px; +} + + +.fancy-list { + list-style: none; + padding-left: 0; +} + +.fancy-list li { + margin-bottom: 10px; + padding-left: 24px; + position: relative; + font-size: 16px; +} + +.fancy-list li::before { + content: "✔️"; + position: absolute; + left: 0; + color: #1abc9c; +} + +.swiper { + width: 100%; + height: auto; + padding-bottom: 40px; +} + +.swiper-slide { + background: white; + border-radius: 10px; + padding: 25px; + box-shadow: 0 2px 10px rgba(0,0,0,0.1); +} + + diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/about.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/about.html" new file mode 100644 index 000000000..0ce3c40c4 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/about.html" @@ -0,0 +1,119 @@ +{% extends 'base.html' %} + +{% block title %}О разработке{% endblock %} + +{% block content %} +
+
+
+ + +
+

О проекте

+

Этот сайт создан на Django — мощном Python-фреймворке.

+

Он включает маршруты, шаблоны, формы, авторизацию и админку. А ещё он красивый! 😊

+ +
+ +

🔧 Использованные технологии:

+
    +
  • 🐍 Python 3
  • +
  • 🕸 Django 4
  • +
  • 🎨 HTML5 + CSS3
  • +
  • 🧠 JavaScript (Vanilla)
  • +
  • 🔁 AJAX
  • +
+ +

📌 Возможности на будущее:

+
    +
  • 👤 Пользовательские советы
  • +
  • 📜 История
  • +
  • 🌈 Цитаты по настроению
  • +
  • ➕ Добавление советов
  • +
  • 🌙 Тёмная тема
  • +
+ +

🎯 Цель проекта:

+

Создать вдохновляющий сайт, который сочетает Python и красивый, доброжелательный интерфейс.

+
+ + +
+

📊 Навыки и распределение времени

+ +

Уровень владения технологиями

+ + +

Распределение времени в проекте

+ +
+ +
+
+
+
+ + + + + + + +{% endblock %} diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/base.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/base.html" new file mode 100644 index 000000000..9acb5d27c --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/base.html" @@ -0,0 +1,56 @@ +{% load static %} + + + + + + {% block title %}Мой Django сайт{% endblock %} + + + + + +
+ {% if user.is_authenticated %} + Django Logo + {% else %} + +

Добро пожаловать!

+ {% endif %} + + {% if user.is_authenticated %} +
Привет, {{ user.username }}!
+ {% endif %} +
+ +
+ {% block content %}{% endblock %} +
+ +
+ +
+ + + diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/contact.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/contact.html" new file mode 100644 index 000000000..08aef9bae --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/contact.html" @@ -0,0 +1,22 @@ +{% extends 'base.html' %} +{% block title %}Обратная связь{% endblock %} + +{% block content %} +
+

Обратная связь

+ +
+ {% csrf_token %} + {% for field in form %} +
+ {{ field.label_tag }} + {{ field }} + {% if field.errors %} +
{{ field.errors }}
+ {% endif %} +
+ {% endfor %} + +
+
+{% endblock %} diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/index.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/index.html" new file mode 100644 index 000000000..80decc78c --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/index.html" @@ -0,0 +1,39 @@ +{% extends 'base.html' %} + +{% block title %}Главная страница{% endblock %} + +{% block content %} +
+

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

+

Добро пожаловать на мой красивый Django-сайт!

+ +
+ +

Текущая дата: {{ now }}

+ +
+

Совет дня: {{ advice }}

+
+ + +
+ +
+

Факт дня

+

{{ fact }}

+
+
+ + +{% endblock %} diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/login.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/login.html" new file mode 100644 index 000000000..246522549 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/login.html" @@ -0,0 +1,36 @@ +{% extends 'base.html' %} +{% block title %}Вход{% endblock %} + +{% block content %} + +{% endblock %} diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/messages.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/messages.html" new file mode 100644 index 000000000..371bc0cba --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/messages.html" @@ -0,0 +1,18 @@ +{% extends 'base.html' %} + +{% block title %}Сообщения{% endblock %} + +{% block content %} +
+

Сообщения обратной связи

+ {% if messages %} +
    + {% for msg in messages %} +
  • {{ msg.name }} ({{ msg.email }}): {{ msg.message }}
  • + {% endfor %} +
+ {% else %} +

Сообщений пока нет.

+ {% endif %} +
+{% endblock %} diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/register.html" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/register.html" new file mode 100644 index 000000000..940bbfa39 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/templates/register.html" @@ -0,0 +1,14 @@ +{% extends 'base.html' %} + +{% block title %}Регистрация{% endblock %} + +{% block content %} +
+

Регистрация

+
+ {% csrf_token %} + {{ form.as_p }} + +
+
+{% endblock %} diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/tests.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/tests.py" new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/tests.py" @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/urls.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/urls.py" new file mode 100644 index 000000000..63cec0a3e --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/urls.py" @@ -0,0 +1,12 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.index, name='index'), + path('about/', views.about, name='about'), + path('contact/', views.contact_view, name='contact'), + path('register/', views.register_view, name='register'), + path('login/', views.login_view, name='login'), + path('logout/', views.logout_view, name='logout'), + path('get-advice/', views.get_advice, name='get_advice'), +] \ No newline at end of file diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/views.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/views.py" new file mode 100644 index 000000000..dcc25ba13 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/main/views.py" @@ -0,0 +1,138 @@ +from django.shortcuts import render +from .forms import ContactForm +from .models import ContactMessage + +from django.contrib.auth import login, authenticate, logout +from django.shortcuts import redirect +from .forms import RegisterForm +from django.contrib.auth.forms import AuthenticationForm + +from .forms import GuestFeedbackForm, AuthenticatedFeedbackForm + +# import requests +# +# def index(request): +# try: +# response = requests.get("https://api.adviceslip.com/advice") +# advice = response.json().get('slip', {}).get('advice', '') +# except: +# advice = "Не удалось загрузить совет." +# return render(request, 'index.html', {'advice': advice}) + + +import random +from django.http import JsonResponse +from django.utils.timezone import now + +RUSSIAN_ADVICES = [ + "Никогда не сдавайся.", + "Улыбнись миру — и он улыбнется тебе в ответ.", + "Лучшее время начать — сейчас.", + "Ошибки — это путь к успеху.", + "Не бойся перемен — они ведут к росту.", + "Слушай себя, а не чужие ожидания.", + "Каждый день — шанс стать лучше.", + "Будь благодарным за малое.", + "Настоящая сила — в умении прощать.", + "Учиcь на ошибках, но не живи ими.", + "Не сравнивай себя с другими — у каждого свой путь.", + "Окружай себя теми, кто вдохновляет.", + "Делай добро — оно возвращается.", + "Терпение — ключ к успеху.", + "Мечтай, планируй, действуй.", + "Сохраняй спокойствие в трудностях.", + "Иногда нужно отпустить, чтобы двигаться дальше.", + "Не бойся просить о помощи.", + "Заботься о себе так же, как о других.", + "Ты уже делаешь больше, чем думаешь.", +] + +FACTS = [ + "Улитки могут спать до трех лет.", + "Самая длинная книга в мире — более 1,2 млн слов.", + "Мед — единственный продукт, который не портится.", + "Кошки спят около 70% своей жизни.", + "Вода может замерзать и при температуре выше 0°C.", +] + + +def index(request): + context = { + 'advice': random.choice(RUSSIAN_ADVICES), + 'fact': random.choice(FACTS), + 'now': now().strftime("%d.%m.%Y %H:%M"), + } + return render(request, 'index.html', context) + +def get_advice(request): + return JsonResponse({'advice': random.choice(RUSSIAN_ADVICES)}) + +def about(request): + return render(request, 'about.html') + + + +def contact(request): + success = False + if request.method == 'POST': + form = ContactForm(request.POST) + if form.is_valid(): + ContactMessage.objects.create( + name=form.cleaned_data['name'], + email=form.cleaned_data['email'], + message=form.cleaned_data['message'] + ) + success = True + form = ContactForm() + else: + form = ContactForm() + + return render(request, 'contact.html', {'form': form, 'success': success}) + +def contact_view(request): + if request.method == 'POST': + if request.user.is_authenticated: + form = AuthenticatedFeedbackForm(request.POST) + if form.is_valid(): + feedback = form.save(commit=False) + feedback.name = request.user.username + feedback.email = request.user.email or "noemail@example.com" + feedback.save() + return redirect('index') + else: + form = GuestFeedbackForm(request.POST) + if form.is_valid(): + form.save() + return redirect('index') + else: + form = AuthenticatedFeedbackForm() if request.user.is_authenticated else GuestFeedbackForm() + + return render(request, 'contact.html', {'form': form}) + +def register_view(request): + if request.method == "POST": + form = RegisterForm(request.POST) + if form.is_valid(): + user = form.save() + login(request, user) # автоматический вход + return redirect('index') + else: + form = RegisterForm() + return render(request, 'register.html', {'form': form}) + + +def login_view(request): + if request.method == "POST": + form = AuthenticationForm(data=request.POST) + if form.is_valid(): + user = form.get_user() + login(request, user) + return redirect('index') + else: + form = AuthenticationForm() + return render(request, 'login.html', {'form': form}) + + +def logout_view(request): + logout(request) + return redirect('index') \ No newline at end of file diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/manage.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/manage.py" new file mode 100644 index 000000000..ca4cfdb46 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/manage.py" @@ -0,0 +1,23 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """python manage.py runserver""" + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.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/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__init__.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__init__.py" new file mode 100644 index 000000000..e69de29bb diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/__init__.cpython-310.pyc" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/__pycache__/__init__.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..2ee90ed77ec3eb0745ebd20f7710c57dede4f85f GIT binary patch literal 149 zcmd1j<>g`kf)E>}3=sVoL?8o3AjbiSi&=m~3PUi1CZpd)Kz0%ZzCv6bM#wmgwcS`AZ;qTSeQ^y6sP zgy^=f!3A*F%f3P%L$|%^3-qGXDLs;%#N#kiYFYbt&Uen)Z_il;#bSYj->;9p?6!*> z_j@uK|7BtF1YY_ZG>9`f#3RAwJ;4-s4huN*Gyhh6$MvRqQ)U)q88>IGUVy#;{T!Mx=g}<8vM7;Vc+V3a&Akx;dlAi> z3+N(R0BeiO9J=&IAiTMVE~6`;a~UnA?bWosM);0sUP9N+%V^oW0v?y(y^20Fub~^} zb(GP$(&zRH&vAun&-OckL@{H;?@;L=2qo{B5{9LI81%5iUcy;}jeQWcEl_eb|4(x;Ix2BkT1Y5B+q!vcA9RqK((qfe}x;fn&SffU;-xs$i+u?h~<<6!j5GNa7f3^CO#Z ziSx2&J1?PZU1DBmbFKQo*8)ZsRo(@4~N7# zZ($1is{xN>~ zD%-WXst;45psST#)v%taKgLs4b*sG-7nOQl+f%F7Q%yJY_(H7-sCpe1Ad&RA(5O|b zb#+hKRpZ%RO*5?aZoQ&4x8rF;ZM5o&q3ZGcp1xB{^y{?>c+{HlbX75wBrrX`sxKoEHEX-3)~mm8;Z5KvZT@|q=q?ugLRW-R$WAlUHYGC?W~S;c_|#wH zU&^abzWV5ccqdJu2!ak|GBeyc_ndR@$m3%l!T51@cfDvK^v!M#M;kV0@M$|yG(*&( zZtie*<~nxW%3IuF!)uw^^HZcFxXSxw9VazC%Hed~p%--@ko< zQz@3&YO9FJq`*t5Fu&HBVYpCo!%`Fa{^gqCtF6ilVhmG4U*SB{1}nKWOk)7i*hu^_ zW1n=0FD!yo3}*ts_#U>%8PN=D#$q4CSQ}I5IEtuDbx1cvtYniel{{i1IteF{kwup3 z$OcD{UPu1Bi83lhZnu;{v(oC$tgesqvW((Z-Gp&rlKn2QUW7#Oc%i79#Z`ZyYp*6fA zS;vkmQ~sIlBA2TO3~VwD?Lmb*3(KnsyJSx%65ht0b z?!5|*%5IWC*Cfg8R!tQ28I>&*G&Cyv2kaHRBcwcg?AeYkJ*%ngAJq9PQhgg_r=Jhc z7RluP*D~3(x=+6PWlp@~XpDHk zu?)t6k2Q(2+PD@V2p09hTR@Xw3>;O%ydDrl@S(5 zUg!lRHVVU@CGeDM1BTc+km@{>lHE%n%n(L0%^xHjOIU&=OIC<=NwEw#nNC@rOOY@u zw3<#m-uIG37eIvaeA&7{wDRD>keQHhL<~SUw>CHDam;mMBEDcM)$f`ToyDNyv#1r% z^`q4>hg|Aa2Fk{dCKYk`=BI)B&A=U|U}?EWH)Oca?H}Lz-2okTMx$Q8JEYfx_U%>Y z`D4|5WWZXXQqyd>2BlsBr4DQ3K2gS2jUgYYjZ z%4b}=f2W=ENpEyLn6%eT-Bg37cW_TzC#|zdrQto4EK$C4I~UcIFa0k-rbMfwoez8X H0EhTLr6Q@- literal 0 HcmV?d00001 diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/asgi.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/asgi.py" new file mode 100644 index 000000000..4e0d84ca0 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/asgi.py" @@ -0,0 +1,16 @@ +""" +ASGI config for mysite 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/5.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + +application = get_asgi_application() diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/settings.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/settings.py" new file mode 100644 index 000000000..1d98df7d1 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/settings.py" @@ -0,0 +1,129 @@ +""" +Django settings for mysite project. + +Generated by 'django-admin startproject' using Django 5.2.1. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.2/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +import os + +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, "main/static"), +] + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-2$a$68v6)c=(!ia9)tl$5jzaqp@th#+qz_x*md^y+2b6ld5x_f' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = ['localhost', '127.0.0.1'] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'main' +] + +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 = 'mysite.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'mysite.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Europe/Moscow' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.2/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/urls.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/urls.py" new file mode 100644 index 000000000..f5eac541c --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/urls.py" @@ -0,0 +1,24 @@ +""" +URL configuration for mysite project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" + +from django.contrib import admin +from django.urls import path, include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('main.urls')), # подключаем main.urls +] diff --git "a/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/wsgi.py" "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/wsgi.py" new file mode 100644 index 000000000..35e1b4dc0 --- /dev/null +++ "b/works/K3321/\320\223\320\276\321\200\320\273\320\276\320\262_\320\230\320\263\320\276\321\200\321\214/lab7-8/DjangoProject_Web_2025/mysite/mysite/wsgi.py" @@ -0,0 +1,16 @@ +""" +WSGI config for mysite 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/5.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') + +application = get_wsgi_application()