Innovate anywhere, anytime withruncode.io Your cloud-based dev studio.
Django

Django Custom Management Commands

2022-07-20

In Django project, We could manage by executing some commands which could be invoked through the manage.py.

For example:

# Start the webserver
python manage.py runserver

Management Command is used to create our own actions with manage.py.

If your app is in projectdirectory then create the directories projectdirectory/app/management/commands.

Create an empty file called __init__.py in both the management and commands directories. This will make that every other python file in the commands directory can be executed via manage.py command.

If you create the file project/app/management/commands/management_command.py. Django will register a manage.py command for each Python module in that directory whose name doesn’t begin with an underscore, then it can be run as manage.py management_command.

Example: Management command to create elasticsearch index.

In the app which the command is used for make the following directory structure:

management/

           __init__.py

               commands/

                   __init__.py

                       create_index.py

#in create_index.py file add the following code.

import json, requests

from django.core.management.base import BaseCommand, CommandError

class Command(BaseCommand):

help = 'create elasticsearch index'

def handle(self, *args, **options):

    data = {

        "settings": {

            "number_of_shards": 4,

                "number_of_replicas": 1

                    },

        "mappings": {

        "notebook": {

        "properties": {

        "title": { "type": "string", "boost": 4 },

            "description": { "type": "string", "boost": 2 },

                "content": { "type": "string" }

                    }

                }

            }

        }

        url = 'http://127.0.0.1:9200/my_index/'

        response = requests.put(url, data=json.dumps(data))

        print(response.text)

In the above example, I'm using management command to create a my_index with title, description and content. Now run the following command to create index.

python manage.py create_index

Above command should return the response '{"acknowledged":true}' after successful index creation.