Working with Django
Import existing Django models, etc. in an Airplane task
Airplane works with Django! You can write Python tasks like you normally would,
plus a few additional lines of code to configure Django.
In brief
In brief
Add the following code to the beginning of your Airplane task:
pythonCopied1import os2import sys3# Assumes this task is run from the parent directory4# Airplane will use the directory that requirements.txt is in5sys.path.insert(0, os.getcwd())6# Importing from myproject.wsgi configures Django7# Replace myproject with your Django project name8from myproject.wsgi import application
This configures your Python path to allow importing from the root directory, then initializes Django
so you Django models, etc. are properly set up.
You'll need to configure the task Environment Variables the
same way you'd configure Django in production. For example, you should set
DATABASE_URL
if you
need to connect to a database.Walkthrough
Walkthrough
In this guide, we'll use the following example layout (replace
myproject
with the name of your
Django project—myapp
is an example Django application you might want to import from):Copied1requirements.txt2airplane/3my_airplane_task.py4myapp/5__init__.py6models.py7myproject/8__init__.py
To import from Django, add the following code to the top of your file:
pythonCopied1# DJANGO SETUP2import os3import sys4# Assumes this task is run from the parent directory5# Airplane will use the directory that requirements.txt is in6sys.path.insert(0, os.getcwd())7# Importing from myproject.wsgi configures Django8from myproject.wsgi import application9# END DJANGO SETUP1011# You can now import e.g. models from myapp12from myapp.models import MyModel1314import airplane1516@airplane.task()17def my_task():18print(MyModel.objects.all())
In lines 4-10, we've added the current directory to the Python path, which allows us to import from
e.g.
myapp
. This code assumes your working directory is your project root—Airplane will find
requirements.txt
to determine the project root and uses that as the working directory when running
your task.In line 14, you can see an example of importing a model—without the setup code, this normally fails.
You'll need to configure the task Environment Variables the
same way you'd configure Django in production. For example, you should set
DATABASE_URL
if you
need to connect to a database.Finally, in line 17 you can use your model like you would in a normal Django handler.