Table of Contents

Django API

General Information

Interacting with the Django Python API.

API Reference: https://docs.djangoproject.com/en/1.11/ref/models/querysets/

Checklist


Imports and Settings

Imports and settings to add to your Python script in order to use your Django App's built in API.


Import and Settings

#!/usr/bin/python
 
# Required module for sys.path.append
import sys
# Required module for os.environ
import os
 
# Import Django WSGI App Loading capabilities
from django.core.wsgi import get_wsgi_application
 
##- Configure Django Settings to point to your App -##
# sys.path = where manage.py is
sys.path.append('/home/django/myprojecthere')
 
# Settings Module = projectname.settings
os.environ["DJANGO_SETTINGS_MODULE"] = 'myprojecthere.settings'
application = get_wsgi_application()
 
# Import Django App Model (from 'myapphere' app)
from myapphere.models import AssetEntry

Using Your Apps API

Different ways to get your app data.

Load Objects

Objects can be retrieved just like in views.py.

Field lookup reference: https://docs.djangoproject.com/en/1.11/ref/models/querysets/#field-lookups


Load All Objects

# Load all assets (just like in views.py)
asset_list = AssetEntry.objects.order_by('asset_type', 'asset_env', 'asset_name')
 
# Print all names (see your models.py for available fields)
for node in asset_list:
  print(node.asset_name)


Load Multiple Objects that Match a filter

# Load with a filter on device type (get all servers)
asset_list = AssetEntry.objects.filter(asset_type__iexact="servers")
 
# Print all retrieved objects
for node in asset_list:
    print("-> Node Name is: " + node.asset_name)
    print("Device Type is: " + node.asset_type)


Load Single Object

# Load single object
single_asset = AssetEntry.objects.get(asset_name__iexact="server99")
 
# Print the name and os
print("Single Asset: " + single_asset.asset_name + " (OS: " + single_asset.asset_os + ")")

Add New Objects

Create a new object and then save it to the database.


Two Steps: Create object and then save it to the database

# Set variables that will be used to create a new object
new_name = "server99"
new_type = "Servers"
new_description = "API Added Server"
new_env = "Prod"
new_os = "CentOS 7"
new_hardware = "Virtual"
 
# Create the new object
new_entry = AssetEntry(asset_name = new_name, asset_type = new_type, asset_description = new_description, asset_env = new_env, asset_os = new_os, asset_hardware = new_hardware)
 
# Attempt to add new object to the database
try:
  new_entry.save()
  print("--> Entry added successfully.")
except:
  print("---> ERROR adding entry!")


One Step: Create object in the database

# Set variables that will be used to create a new object
new_name = "server99"
new_type = "Servers"
new_description = "API Added Server"
new_env = "Prod"
new_os = "CentOS 7"
new_hardware = "Virtual"
 
# Create the new object directly
new_entry = AssetEntry.objects.create(asset_name = new_name, asset_type = new_type, asset_description = new_description, asset_env = new_env, asset_os = new_os, asset_hardware = new_hardware)

Change Existing Objects

Changing an existing object in the database.

# Load all assets (just like in views.py)
asset_list = AssetEntry.objects.order_by('asset_type', 'asset_env', 'asset_name')
 
# Change server99's OS to Ubuntu 18.04
for node in asset_list:
  if node.asset_name == "server99":
    node.asset_os = "Ubuntu 18.04"
 
    # Attempt to save object change to the database
    try:                                                                                       
      node.save()
      print("--> Change saved successfully.")
    except:
      print("---> ERROR saving change!")

Delete Objects

Deleting objects using the API.

# Retrieve a single object
single_asset = AssetEntry.objects.get(asset_name__iexact="server99")
 
# Delete the object
single_asset.delete()