Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
17a88f1
v0.0.0 Start project
Inna949Festchuk Feb 8, 2025
01fb7c6
v0.0.1 settings up a mail client & .env variables
Inna949Festchuk Feb 9, 2025
252b57f
v0.0.2 import from shop1.yaml
Inna949Festchuk Feb 17, 2025
c2b57f4
v0.0.3 add tests
Inna949Festchuk Feb 21, 2025
06ecdb5
v0.0.3 add tests
Inna949Festchuk Feb 21, 2025
50a6b11
v0.0.4 add userflow update comments and tests
Inna949Festchuk Feb 25, 2025
b4227f2
v0.0.4 Update UserFlow & comments & tests
Inna949Festchuk Mar 5, 2025
b7fa484
-v0.0.4 Update code
Inna949Festchuk Mar 6, 2025
a0511ee
v0.0.4 Update
Inna949Festchuk Mar 6, 2025
5436d04
v0.0.4 Update
Inna949Festchuk Mar 6, 2025
bc8410c
v0.0.4
Inna949Festchuk Mar 6, 2025
53b579b
v0.0.4 Update requirements.txt
Inna949Festchuk Mar 6, 2025
38ab375
v0.0.4 Update UserFlow & comments OrderView
Inna949Festchuk Mar 6, 2025
0e33993
v0.0.4 new comments
Inna949Festchuk Mar 6, 2025
f038070
v0.0.5 Newcode(in dev):order readiness for pick-up
Inna949Festchuk Mar 7, 2025
45f2d1a
v0.0.5 Newcode:Add order readiness
Inna949Festchuk Mar 8, 2025
b2afc2d
v0.0.5 Newcode:Add order readiness
Inna949Festchuk Mar 8, 2025
cfea859
v0.0.5 Update class PartnerOrders
Inna949Festchuk Mar 8, 2025
131c0a7
v0.0.5 Update class PartnerOrders
Inna949Festchuk Mar 8, 2025
36ea199
v0.0.5 Update class PartnerOrders
Inna949Festchuk Mar 8, 2025
046a234
v0.0.5 Update apps.py
Inna949Festchuk Mar 8, 2025
bae0428
v0.0.5 Add tests: TestBasketView & TestOrderView
Inna949Festchuk Mar 8, 2025
81ee642
v0.0.5
Inna949Festchuk Mar 8, 2025
e3d13c2
v0.0.5
Inna949Festchuk Mar 8, 2025
f2db2b6
v0.0.5 Update tests
Inna949Festchuk Mar 9, 2025
4773b5c
v0.0.5 Update tests
Inna949Festchuk Mar 9, 2025
8baa906
v.0.0.6 add Celery add Docker-compose
Inna949Festchuk Apr 15, 2025
6372515
Delete reference/netology_pd_diplom/.DS_Store
Inna949Festchuk Apr 15, 2025
21094c3
Delete reference/.DS_Store
Inna949Festchuk Apr 15, 2025
17dd0da
Update README.md
Inna949Festchuk Apr 15, 2025
79da9b8
Update README.md
Inna949Festchuk Apr 15, 2025
f205a04
Update docker-compose.yml
Inna949Festchuk Apr 15, 2025
7828a04
Update docker-compose.yml
Inna949Festchuk Apr 15, 2025
cf98af4
v0.0.6
Inna949Festchuk Apr 15, 2025
4e0a184
Merge branch 'master' of https://github.com/Inna949Festchuk/python-fi…
Inna949Festchuk Apr 15, 2025
a6e73af
Update settings.py
Inna949Festchuk Apr 15, 2025
5dd8878
Update Dockerfile
Inna949Festchuk Apr 15, 2025
8dfb6f3
Update docker-compose.yml
Inna949Festchuk Apr 15, 2025
46332a2
v0.0.7 Update README.md
Inna949Festchuk Apr 15, 2025
a0ad2e2
v0.0.7
Inna949Festchuk Apr 15, 2025
1ca69a7
v0.0.7 bug Cellery
Inna949Festchuk Apr 16, 2025
4bb94c7
v0.0.6
Inna949Festchuk Apr 16, 2025
37d618a
v0.0.7 fix bug docker-compose
Inna949Festchuk Apr 16, 2025
94c8711
v0.0.7 fix bug celery
Inna949Festchuk Apr 16, 2025
dc0321b
v0.0.7 fix bug docker-compose
Inna949Festchuk Apr 16, 2025
760b2c3
v0.0.7
Inna949Festchuk Apr 17, 2025
084d717
Create test_and_coverage.yaml
Inna949Festchuk Apr 17, 2025
6c96d74
v0.0.8 test Python Coverage
Inna949Festchuk Apr 17, 2025
b33e506
Update test_and_coverage.yaml
Inna949Festchuk Apr 17, 2025
4b385a1
Create test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
6de46f9
v0.0.8
Inna949Festchuk Apr 17, 2025
7086ad8
Merge branch 'master' of https://github.com/Inna949Festchuk/python-fi…
Inna949Festchuk Apr 17, 2025
cd7691e
v0.0.8
Inna949Festchuk Apr 17, 2025
37c5b8b
v0.0.8
Inna949Festchuk Apr 17, 2025
f708ec8
Update test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
65322a3
v0.0.8 add CI tests
Inna949Festchuk Apr 17, 2025
f22acc6
Update test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
e589da2
Update test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
68ec080
Update test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
f670be9
Update test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
58e4a70
Update test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
d26494b
Update test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
0d453ab
Update test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
3eb2a7c
Update test_and_coverage.yml
Inna949Festchuk Apr 17, 2025
9ecf7c6
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
647ef98
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
fe542de
Update requirements.txt
Inna949Festchuk Apr 18, 2025
52faaad
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
8a5cab9
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
86bacbb
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
1d7bd12
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
98f5a87
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
63c2cb9
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
d507e42
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
8fa1296
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
ccf5015
Update test_and_coverage.yml
Inna949Festchuk Apr 18, 2025
784864b
Delete .DS_Store
Inna949Festchuk Apr 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions .github/workflows/test_and_coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: 'coverage'
on:
push:
branches:
- master
- main
pull_request:
branches:
- master
- main
jobs:
coverage:
runs-on: ubuntu-latest
steps:
- name: Get Cover
uses: orgoro/[email protected]
with:
coverageFile: python-final-diplom/reference/netology_pd_diplom/.coverage.xml
token: ${{ secrets.GITHUB_TOKEN }}

# name: 'Тестирование и покрытие кода'

# on:
# push:
# branches:
# - master
# - main
# pull_request:

# jobs:
# build:
# runs-on: ubuntu-latest

# steps:
# - name: Checkout repository
# uses: actions/checkout@v3

# - name: Setup Python 3.10
# uses: actions/setup-python@v3
# with:
# python-version: '3.10'

# - name: Install dependencies
# run: |
# python -m pip install --upgrade pip
# pip install -r requirements.txt
# pip install pytest pytest-cov coverage

# - name: Show project directory structure
# run: |
# echo "Current directory: $(pwd)"
# ls -la
# ls -la reference

# - name: Run tests with coverage
# run: |
# export DJANGO_SETTINGS_MODULE=reference.netology_pd_diplom.netology_pd_diplom.settings
# cd reference
# pytest --cov=netology_pd_diplom --cov-report=xml:coverage.xml tests/
# env:
# PYTHONPATH: ${{ github.workspace }}/reference
# DJANGO_SETTINGS_MODULE: reference.netology_pd_diplom.netology_pd_diplom.settings

# - name: Upload coverage to Codecov
# uses: codecov/codecov-action@v3
# with:
# token: ${{ secrets.CODECOV_TOKEN }}
# files: coverage.xml
# flags: unittests
# fail_ci_if_error: true





3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,6 @@ venv.bak/

# mypy
.mypy_cache/

/Users/apple/Documents/Full-stack-Python-developer/my_diplom/redis-7.2.7
reference/netology_pd_diplom/dump.rdb
43 changes: 43 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,3 +230,46 @@ _Важно: не нарушайте дедлайн сдачи, возника
* выполненная базовая часть проекта,
* наличие собственных комментариев к коду,
* использование сторонних библиотек и фреймворков.

## Дополнительное задание
> Отказ от django signals, с дальнейшей интеграцией в проект фреймворка Celery для по-настоящему асинхронных задач
Рекомендую начать с использования любой из нижеследующих инструкций.
- https://realpython.com/asynchronous-tasks-with-django-and-celery/

или
- https://stackabuse.com/asynchronous-tasks-in-django-with-redis-and-celery/

> Вижу вы покрыли код тестами, предлагаю добавить красивую кнопку с текущим покрытием у себя в Гитхабе
https://github.com/marketplace/actions/python-coverage

> Опробовать автогенерацию документации Open API в рамках пакета DRF-Spectacular. После внедрения обязательно внимательно просмотрите страницу Swagger. Тут сразу можно будет оценить для себя разницу с Postman и огромный потенциал для плодотворной работы в команде с несколькими разработчиками. P.S. Используйте чаще docstring к классам и функциям
https://drf-spectacular.readthedocs.io/en/latest/readme.html

> Попробовать простой DRF тротлинг, и можно проверить его работу добавление отдельного TestCase
https://www.django-rest-framework.org/api-guide/throttling/

> Добавить возможность авторизации с 1-2 социальных сетей, тут можно ознакомится с такой крутой библиотекой
https://github.com/python-social-auth/social-app-django

> Наверняка пользовались админкой в ходе создания проекта, предлагаю сделать ей мощный тюнинг через эти библиотеки на выбор:
https://github.com/otto-torino/django-baton
https://django-jet-reboot.readthedocs.io/en/latest/

> После добавления Celery можно добавить загрузку аватаров пользователей и картинок товаров с последующей асинхронной обработкой их в фоновом режиме, например создание миниатюр различного размера для быстрой загрузки. Для этого есть множество библиотек на выбор:
https://easy-thumbnails.readthedocs.io/en/latest/
https://django-versatileimagefield.readthedocs.io/en/latest/
https://django-imagekit.readthedocs.io/en/latest/

> Очень часто в коммерческих проектах для перехвата ошибок, которые возникают у пользователей внедряют Sentry или Rollbar. Он позволяет быть в курсе насколько стабильно работает проект и к тому же хранит полные traceback ошибок, так чтобы можно было их исследовать. Будет большой плюс в резюме от наличия знаний по этой технологии. Попробуйте внедрить ее на базовом уровне и создать APIView, который вызывает исключение, что увидеть его в консоли Sentry или RollBar
https://blog.sentry.io/monitoring-performance-and-errors-in-a-django-application-with-sentry/
https://docs.sentry.io/platforms/python/integrations/django/
RollBar
https://docs.rollbar.com/docs/django
https://docs.rollbar.com/docs/celery

> внедрить кэширование запросов к БД с использованием Redis, посмотреть насколько уменьшится время отклика системы. Вот эти библиотеки на выбор могут помочь с кэшированием запросов к БД:
https://github.com/noripyt/django-cachalot
https://github.com/Suor/django-cacheops

> и последнее только по желанию, часто в проектах бывают задачи поиска причин медленной работы запроса. Например, из-за неправильного ORM запроса к БД. Рекомендую ознакомиться с пакетом https://github.com/jazzband/django-silk
проанализировать запросы в Postman и посмотреть какие из них вызывают каскад вторичных запросов, которые перегружают СУБД. Лично у меня вызывает удовлетворение, если ранее запрос выполнялся 400-500 мс, а сейчас за 3-4 мс, после того как я выявил проблему через Silk и оптимизировал запрос. Возможно, и Вам понравится)
8 changes: 8 additions & 0 deletions reference/netology_pd_diplom/.coveragrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[run]
branch = True # Включаем измерение ветвления (условия if/else)
omit = tests/* # Исключаем папку с тестами из анализа покрытия

[report]
show_missing = True # Показывать непокрытые участки кода
skip_covered = False # Отображать покрытый код
precision = 2 # Точность отчета — два знака после запятой
2 changes: 2 additions & 0 deletions reference/netology_pd_diplom/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.env
enviroments.sh
2 changes: 2 additions & 0 deletions reference/netology_pd_diplom/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,5 @@ venv.bak/

# mypy
.mypy_cache/

enviroments.sh
23 changes: 23 additions & 0 deletions reference/netology_pd_diplom/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Устанавливаем базовый образ Python и Alpine Linux
FROM python:3.10-alpine

# Установка компилятора gcc для Alpine Linux
RUN apk add --no-cache gcc musl-dev

# Устанавливаем рабочую директорию в контейнере
WORKDIR /app

# Копируем файл requirements.txt локального проекта в WORKDIR контейнера
COPY ./requirements.txt ./requirements.txt

# Устанавливаем зависимости
RUN pip install -r requirements.txt

# Указываем порт, который будет слушать сервер
EXPOSE 8000

# Копируем файлы локального проекта в WORKDIR контейнера
COPY . .

# Команда на запуск сервера
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
144 changes: 143 additions & 1 deletion reference/netology_pd_diplom/README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,151 @@
# Пример API-сервиса для магазина

[Документация по запросам в PostMan](https://documenter.getpostman.com/view/5037826/SVfJUrSc)
[Исходная документация по запросам в PostMan](https://documenter.getpostman.com/view/5037826/SVfJUrSc)

## Разворачиваем проект
более подробно:

https://realpython.com/asynchronous-tasks-with-django-and-celery/
https://stackabuse.com/asynchronous-tasks-in-django-with-redis-and-celery/

### Установка Redis на Windows

- [Загрузите zip-файл Redis](https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100) и распакуйте его в какую-нибудь директорию.
- Найдите файл с именем `redis-server.exe` и дважды щелкните по нему, чтобы запустить сервер в командном окне.
- Аналогично найдите другой файл с именем `redis-cli.exe` и дважды щелкните по нему, чтобы открыть программу в отдельном командном окне.
- В командном окне, запустив клиент CLI, проверьте, может ли клиент взаимодействовать с сервером, выполнив команду, и если все пройдет хорошо , должен быть возвращен pingответ `PONG`

### Установка Redis на Mac OSX / Linux

- [Загрузите файл tarball](https://redis.io/download) Redis и распакуйте его в какой-нибудь каталог.
- Запустите `makefile`, чтобы собрать программу
```bash
make install
```
- Откройте окно терминала и выполните
```bash
redis-server
```
- В другом окне терминала запустите клиент CLI
```bash
redis-cli
```
проверьте, может ли клиент взаимодействовать с сервером, выполнив команду `ping`, и если все пройдет хорошо , должен быть возвращен ответ `PONG`
```bash
127.0.0.1:6379> ping
```

### Установка Redis с помощью docer-compose
Создайте `.yml` файл следующего содержания
```
version: '3.1'

services:

redis:
image: redis
ports:
- "6379:6379"
```

Запустить сборку
```
docker-compose up -d
```

1. Установка виртуального окружения Python и зависимостей requirements.txt, в том числе и `Celery`

2. Откройте три отдельных окна терминала перейдите в папку в которой находится `manage.py` и запустите почередно:
```bash
(venv) $ python manage.py runserver
$ redis-server # — единственный из трех, который вы можете запустить за пределами своей виртуальной среды
(venv) $ python -m celery -A netology_pd_diplom worker
```

## Разворачиваем проект с помощью Docker и Docker-compose

1. Клонировать приоект

2. Перейти в рабочую дерриктороию

3. Загрузить все переменные сред
```bash
export DEBUG=True
export SECRET_KEY="your_secret_key_here" # Отправил почтой
export ALLOWED_HOSTS=localhost,127.0.0.1 # Или * - доступ с любого адреса
export DB_ENGINE=django.db.backends.sqlite3
export DB_NAME=db.sqlite3
export EMAIL_HOST_PASSWORD="your_email_password" # Пароль привязанный к почтовому сервису (Настройки для mail.ru, справка https://help.mail.ru/mail/security/protection/external/) Отправил почтой
```

для PostgreSQl
```bash
export DEBUG=True
export SECRET_KEY="your_secret_key_here"
export ALLOWED_HOSTS=localhost,127.0.0.1
export DB_ENGINE=django.db.backends.postgresql
export DB_NAME="your_postgres_db_name"
export POSTGRES_USER="your_postgres_db_user"
export POSTGRES_PASSWORD="your_postgres_db_pass"
export EMAIL_HOST_PASSWORD="your_email_host_password"
```

Кроме того, если видишь сообщение Compose can now delegate builds to bake for better performance,
можешь включить использование нового инструмента Bake для сборки образов, установив переменную окружения:
```bash
export COMPOSE_BAKE=true
```

5. Запустить сборку (--build для пересборки)
```bash
docker-compose up -d --build
```

---
## Дополнительное задание
> Отказ от django signals, с дальнейшей интеграцией в проект фреймворка Celery для по-настоящему асинхронных задач
Рекомендую начать с использования любой из нижеследующих инструкций.
- https://realpython.com/asynchronous-tasks-with-django-and-celery/

или
- https://stackabuse.com/asynchronous-tasks-in-django-with-redis-and-celery/

> Вижу вы покрыли код тестами, предлагаю добавить красивую кнопку с текущим покрытием у себя в Гитхабе
https://github.com/marketplace/actions/python-coverage

> Опробовать автогенерацию документации Open API в рамках пакета DRF-Spectacular. После внедрения обязательно внимательно просмотрите страницу Swagger. Тут сразу можно будет оценить для себя разницу с Postman и огромный потенциал для плодотворной работы в команде с несколькими разработчиками. P.S. Используйте чаще docstring к классам и функциям
https://drf-spectacular.readthedocs.io/en/latest/readme.html

> Попробовать простой DRF тротлинг, и можно проверить его работу добавление отдельного TestCase
https://www.django-rest-framework.org/api-guide/throttling/

> Добавить возможность авторизации с 1-2 социальных сетей, тут можно ознакомится с такой крутой библиотекой
https://github.com/python-social-auth/social-app-django

> Наверняка пользовались админкой в ходе создания проекта, предлагаю сделать ей мощный тюнинг через эти библиотеки на выбор:
https://github.com/otto-torino/django-baton
https://django-jet-reboot.readthedocs.io/en/latest/

> После добавления Celery можно добавить загрузку аватаров пользователей и картинок товаров с последующей асинхронной обработкой их в фоновом режиме, например создание миниатюр различного размера для быстрой загрузки. Для этого есть множество библиотек на выбор:
https://easy-thumbnails.readthedocs.io/en/latest/
https://django-versatileimagefield.readthedocs.io/en/latest/
https://django-imagekit.readthedocs.io/en/latest/

> Очень часто в коммерческих проектах для перехвата ошибок, которые возникают у пользователей внедряют Sentry или Rollbar. Он позволяет быть в курсе насколько стабильно работает проект и к тому же хранит полные traceback ошибок, так чтобы можно было их исследовать. Будет большой плюс в резюме от наличия знаний по этой технологии. Попробуйте внедрить ее на базовом уровне и создать APIView, который вызывает исключение, что увидеть его в консоли Sentry или RollBar
https://blog.sentry.io/monitoring-performance-and-errors-in-a-django-application-with-sentry/
https://docs.sentry.io/platforms/python/integrations/django/
RollBar
https://docs.rollbar.com/docs/django
https://docs.rollbar.com/docs/celery

> внедрить кэширование запросов к БД с использованием Redis, посмотреть насколько уменьшится время отклика системы. Вот эти библиотеки на выбор могут помочь с кэшированием запросов к БД:
https://github.com/noripyt/django-cachalot
https://github.com/Suor/django-cacheops

> и последнее только по желанию, часто в проектах бывают задачи поиска причин медленной работы запроса. Например, из-за неправильного ORM запроса к БД. Рекомендую ознакомиться с пакетом https://github.com/jazzband/django-silk
проанализировать запросы в Postman и посмотреть какие из них вызывают каскад вторичных запросов, которые перегружают СУБД. Лично у меня вызывает удовлетворение, если ранее запрос выполнялся 400-500 мс, а сейчас за 3-4 мс, после того как я выявил проблему через Silk и оптимизировал запрос. Возможно, и Вам понравится)

---

## **Получить исходный код**

Expand Down
Loading