====== Django API ====== **General Information** Interacting with the Django Python API. API Reference: https://docs.djangoproject.com/en/1.11/ref/models/querysets/ **Checklist** * [[django_install|Django Installed]] * [[django_configuration|Django Configured]] ---- ====== 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() ----