Skip to main content

An app for a cleaner Django

Project description

Django CI

Django the Domain Driven Design way

This is a proof of concept to model django apps on a domain driven design way. The idea is to move Django app related stuff under infrastructure folder, so ideally an app folder structure would be:

app_folder/
    application/
    domain/
    infrastructure/
        migrations/
        admin.py
        models.py
        __init__.py
    __init__.py

Installation

To install from source, download the source code, then run this:

python setup.py install

Or install with pip

pip install django-ddd

Configuration

Select your desired app folder structure and add these settings to your project.

CUSTOM_MODELS_MODULE

Where Django should look for your app models.

Default: models

Example: infrastructure.models

CUSTOM_MIGRATIONS_MODULE

Where Django should look for your app migrations.

Default migrations

Example: infrastructure.migrations

CUSTOM_ADMIN_MODULE

Where Django should look for your app admin configuration.

Default admin

Example: infrastructure.admin

Usage

To use custom locations

Install django-ddd to your project requirements and add settings so Django can find your apps modules as seen on configuration. You don't need to add django-ddd to INSTALLED_APPS

Then, on your package apps.py import django-ddd custom app config:

from django_ddd.apps_config import CleanAppConfig

class AppNameConfig(CleanAppConfig):
    name = "app_name" # package folder name

Add your new application to INSTALLED_APPS

INSTALLED_APPS = [
    # ...
    "app_name.infrastructure.apps.AppNameConfig",
    # ...
]

This should be done explicitly after this ticket.

To use start_clean_app

This command creates a new Django app with a Domain Driven Design structure.

To use it, you need to add django-ddd to your INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
    "django_ddd",
    # ...
]

Then, just call:

python manage.py start_clean_app app_name

This will create a new context with previously seen structure:

app_name/
    application/
    domain/
    infrastructure/
        migrations/
        admin.py
        models.py
        __init__.py
    __init__.py

Here all Django details are under infrastructure folder. Package level __init__.py has route to app config:

default_app_config = "app_name.infrastructure.apps.AppNaemAppConfig"

You can move this folder to your sources and add it to INSTALLED_APPS so Django can recognize it.

Contributing / Running project locally

Build the docker image:

docker build . -t django-ddd-dev

Run tests:

 docker run -v $(pwd)/.:/usr/src/app django-ddd-dev bash -c "pipenv run python manage.py test"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Django-ddd-0.1.11.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

Django_ddd-0.1.11-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file Django-ddd-0.1.11.tar.gz.

File metadata

  • Download URL: Django-ddd-0.1.11.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for Django-ddd-0.1.11.tar.gz
Algorithm Hash digest
SHA256 045be877798f06f810e108b73052abbf72b8470f74187d9cebabfe99d1af0c58
MD5 f5e838ff98d1c3ddb682cad210d1f352
BLAKE2b-256 249f6ec8908c98dd1f4d9cea4e768bdf049a6d5af7338919dd0531fcf1c62800

See more details on using hashes here.

File details

Details for the file Django_ddd-0.1.11-py3-none-any.whl.

File metadata

  • Download URL: Django_ddd-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for Django_ddd-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 6f6d61abc533479ad0975e72f12038378bda9b1ed036b9b60e315703fe7639c5
MD5 3b88436913743605ec7d8a02bcaef5aa
BLAKE2b-256 a275419366d8271facf6d2a44004ca5e679820d3ff6ed17bee5d8b7d2a795e11

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page