Skip to content

app-generator/django-tasks-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A super simple Django & Celery integration - This library is actively supported by AppSeed.


Features:

  • Create/Revoke Celery Tasks
  • View LOGS & Output
  • Minimal Configuration
  • Available TASKS (provided as starting samples)
    • users_in_db() - List all registered users
    • execute_script() - let users execute the scripts defined in CELERY_SCRIPTS_DIR (CFG parameter)

Django Tasks Manager - View Running Tasks.


How to use it


Install the package via PIP

$ pip install django-tasks-manager
// OR
$ pip install git+https://github.com/app-generator/django-tasks-manager.git

Include the new routing

# core/urls.py

from django.urls import path, include     # <-- UPDATE: Add 'include' HELPER

urlpatterns = [
    ...
    
    path("", include("django_tm.urls")),  # <-- New Routes

    ...
]

Create Scrips & LOGS directories - The Recomended place is in the root of the project:

$ mkdir celery_scripts # Used in Settings -> CELERY_SCRIPTS_DIR
$ mkdir celery_logs    # Used in Settings -> CELERY_SCRIPTS_DIR
  • Make sure the user that executes the app has write permission.
  • Copy the sample scripts in the scripts directory.
  • All scripts will be available in the UI, ready to be executed by the manager.

Update Configuration Add os object import

import os # <-- NEW

Update Configuration: Include the new APPS

INSTALLED_APPS = [
    ...                  
    'django_tm',              # Django Tasks Manager   # <-- NEW
    'django_celery_results',  # Django Celery Results  # <-- NEW
]

Update Configuration: Include the new templates

TEMPLATE_DIR_TASKS = os.path.join(BASE_DIR, "django_tm/templates")     # <-- NEW

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',   
        'DIRS': [TEMPLATE_DIR_TASKS],                                  # <-- Updated 
        'APP_DIRS': True,
    },
]

Update Configuration: New CELERY_ Section

#############################################################
# Celery configurations
# https://docs.celeryq.dev/en/stable/django/first-steps-with-django.html

# !!!
# BASE_DIR points to the ROOT of the project
# Note: make sure you have 'os' object imported
# !!!

# !!!
# BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# !!! 

# Working Directories required write permission
CELERY_SCRIPTS_DIR        = os.path.join(BASE_DIR, "celery_scripts" )
CELERY_LOGS_DIR           = os.path.join(BASE_DIR, "celery_logs"    )

CELERY_BROKER_URL         = os.environ.get("CELERY_BROKER", "redis://localhost:6379")
CELERY_RESULT_BACKEND     = os.environ.get("CELERY_BROKER", "redis://localhost:6379")

CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT    = 30 * 60
CELERY_CACHE_BACKEND      = "django-cache"
CELERY_RESULT_BACKEND     = "django-db"
CELERY_RESULT_EXTENDED    = True
CELERY_RESULT_EXPIRES     = 60*60*24*30 # Results expire after 1 month
CELERY_ACCEPT_CONTENT     = ["json"]
CELERY_TASK_SERIALIZER    = 'json'
CELERY_RESULT_SERIALIZER  = 'json'

#############################################################
#############################################################

Start the App

$ # Set up the database
$ python manage.py makemigrations
$ python manage.py migrate
$
$ # Create the superuser
$ python manage.py createsuperuser
$
$ # Start the application (development mode)
$ python manage.py runserver # default port 8000
  • Authenticate as superuser
  • Access the Tasks page: http://127.0.0.1:8000/tasks

Start the Celery Manager (another terminal) & Update Environment

Export DJANGO_SETTINGS_MODULE using the value provided in manage.py

$ export DJANGO_SETTINGS_MODULE=cfg.settings  

The value used export should be taken from manage.py:

def main():
    
    """Run administrative tasks."""
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cfg.settings")  # <-- VALUE to be exported

    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        ...

Note: Redis server is expected on port 6379 (default). In case Redis runs on other PORT, please update the configuration: CELERY_BROKER_URL and CELERY_RESULT_BACKEND.

$ celery --app=django_tm.celery.app worker --loglevel=info 

Screens

View all tasks

Django Tasks Manager - View All Tasks.


View Task LOG

Django Tasks Manager - View Task LOG.


Links & Resources

  • Free Support via Email and Discord
  • Django Tasks Manager - free sample that explains:
    • Project Creation (minimal files added)
    • Install & Generate Django Core
    • Install Django-TM (this package)
    • Update Configuration
    • Start the app
    • Use the Tasks Manager


Django Tasks Manager - Open-source library provided by AppSeed