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()