Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tough-dev-school/education-backend
Django-based backend for our learning management system
https://github.com/tough-dev-school/education-backend
django django-application django-rest-framework python real-world
Last synced: 3 days ago
JSON representation
Django-based backend for our learning management system
- Host: GitHub
- URL: https://github.com/tough-dev-school/education-backend
- Owner: tough-dev-school
- License: mit
- Created: 2019-10-27T19:01:23.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2024-10-29T12:47:00.000Z (3 months ago)
- Last Synced: 2024-10-29T13:09:48.814Z (3 months ago)
- Topics: django, django-application, django-rest-framework, python, real-world
- Language: Python
- Homepage: https://tough-dev.school
- Size: 4.71 MB
- Stars: 367
- Watchers: 8
- Forks: 65
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Backend for [tough-dev.school](https://tough-dev.school/)
![CI](https://github.com/tough-dev-school/education-backend/actions/workflows/ci.yml/badge.svg) [![Maintainability](https://api.codeclimate.com/v1/badges/fe9fb0b64052a426f355/maintainability)](https://codeclimate.com/github/f213/education-backend/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/fe9fb0b64052a426f355/test_coverage)](https://codeclimate.com/github/f213/education-backend/test_coverage)
Django-based production project, integrated with Tinkoff, Dashamail, Postmark, S3 and telegram. Frontend is built on vue.js in the [separate repo](https://github.com/tough-dev-school/lms-frontend-v2).
## Configuration
Configuration is stored in `src/core/.env`, for examples see `src/core/.env.ci`
## Installing on a local machine
This project requires python 3.11. Deps are managed by [Poetry](https://python-poetry.org/).
Install requirements:
```bash
poetry install --no-root
```Configure postgres and redis. It's convenient to use docker and docker-compose:
```bash
docker compose up -d
```If you don't have access to de-anonymized db image use `postgres:13.6-alpine` in `docker-compose.yml` instead:
```yaml
postgres:
image: postgres:13.6-alpine
...
```Run the server:
```bash
cp src/core/.env.ci src/core/.envpoetry run python src/manage.py migrate
poetry run python src/manage.py createsuperusermake server
```Testing:
```bash
# run lint
make lint# run unit tests
make test
```## Backend Code requirements
### Style
* Obey [django's style guide](https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style).
* Configure your IDE to use [flake8](https://pypi.python.org/pypi/flake8) for checking your python code. For running flake8 manualy, do `cd src && flake8`
* Prefer English over your native language in comments and commit messages.
* Commit messages should contain the unique id of issue they are linked to (refs #100500)
* Every model and a model method should have a docstring.### Code organisation
* KISS and DRY.
* Obey [django best practices](http://django-best-practices.readthedocs.io/en/latest/index.html)
* If you want to implement some business logic — make a service for that. Service examples: [UserCreator](https://github.com/tough-dev-school/education-backend/blob/master/src/users/services/user_creator.py#L22), [OrderCreator](https://github.com/tough-dev-school/education-backend/blob/master/src/orders/services/order_creator.py#L11)
* **No logic is allowed within the views or templates**. Only services and models.
* Use PEP-484 [type hints](https://www.python.org/dev/peps/pep-0484/) when possible.
* Prefer [Manager](https://docs.djangoproject.com/en/1.10/topics/db/managers/) methods over static methods.
* Do not use [signals](https://docs.djangoproject.com/en/1.10/topics/signals/) for business logic. Signals are good only for notification purposes.
* No l10n is allowed in python code, use [django translation](https://docs.djangoproject.com/en/1.10/topics/i18n/translation/).