Skip to main content

Django Logic - easy way to implement state-based business logic

Project description


Build Status Coverage Status

Django Logic is a lightweight workflow framework aims to solve an open problem "Where to put the business logic in Django?".

Full documentation for the project is available at wiki

The Django-Logic package provides a set of tools helping to build a reliable product within a limited time. Here is the functionality the package offers for you:

  • Implement state-based business processes combined into Processes.
  • Provides a business logic layer as a set of conditions, side-effects, permissions, and even celery-tasks combined into a transition class.
  • In progress states
  • REST API actions - every transition could be turned into a POST request action within seconds by extending your ViewSet and Serialiser of Django-Rest-Framework
  • Background transitions via django-logic-celery.
  • Draw your business processes to get a full picture of all transitions and conditions.
  • Easy to read the business process
  • One and only one way to implement business logic. You will be able to extend and improve the Django-Logic functionality and available handlers. However, the business logic will remain the same and by following SOLID principles.
  • Test your business logic by unit-tests as pure functions.
  • Protects from overwritten states, locks, etc. already implemented in Django Logic and you could control the behaviour.
  • Several states can be combined under the same Model.


Use the package manager pip to install Django-Logic.

pip install django-logic




from django_logic import Process, Transition

class ApprovalProcess(Process):
    transitions = [
        Transition(action_name='approve', sources=['draft'], target='approved'),
        Transition(action_name='void', sources=['draft', 'approved'], target='void'),

Nested processes

Display process

Drawing a process with the following elements:

  • Process - a transparent rectangle
  • Transition - a grey rectangle
  • State - a transparent ellipse
  • Process' conditions and permissions are defined inside of related process as a transparent diamond
  • Transition' conditions and permissions are defined inside of related transition's process as a grey diamond

From this diagram you can visually check that the following the business requirements have been implemented properly:

  • Personnel involved: User and Staff
  • Lock has to be available before any actions taken. It's defined by a condition is_lock_available.
  • User is able to lock and unlock an available locker.
  • Staff is able to lock, unlock and put a locker under maintenance if such was planned.

Drawing such diagram requires installing graphviz.

pip install graphviz

Run this command

from django_logic.display import * 
from demo.process import LockerProcess
display_process(LockerProcess, state='open', skip_main_process=True)

Bind the process with a model

from django.db import models
from demo.process import LockerProcess
from django_logic.process import ProcessManager

class Lock(ProcessManager.bind_state_fields(status=LockerProcess), models.Model):
    status = models.CharField(choices=LockerProcess.states,, max_length=16, blank=True)


Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.



Project status

Under development

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-logic-0.1.0.tar.gz (11.2 kB view hashes)

Uploaded Source

Built Distributions

django_logic-0.1.0-py3.7.egg (27.8 kB view hashes)

Uploaded Source

django_logic-0.1.0-py3-none-any.whl (11.9 kB view hashes)

Uploaded Python 3

Supported by

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