In the Django framework, a project refers to the collection of configuration files and code for a particular website. Django groups business logic into what it calls apps, which are the modules of the Django framework. There’s plenty of documentation on how to structure your projects and the apps within them, but when it comes time to package an installable Django app, information is harder to find.
In this tutorial, you’ll learn how to take an app out of a Django project and package it so that it’s installable. Once you’ve packaged your app, you can share it on PyPI so that others can fetch it through pip install
.
In this tutorial, you’ll learn:
- What the differences are between writing stand-alone apps and writing apps inside of projects
- How to create a
setup.cfg
file for publishing your Django app - How to bootstrap Django outside of a Django project so you can test your app
- How to test across multiple versions of Python and Django using
tox
- How to publish your installable Django app to PyPI using Twine
Be sure to follow along with the examples by downloading the source code at the link below:
Download the sample code: Click here to get the code you'll use to learn how to write an installable Django app in this tutorial.
Prerequisites
This tutorial requires some familiarity with Django, pip
, PyPI, pyenv
(or an equivalent virtual environment tool), and tox
. To learn more about these topics, check out:
- Django Tutorials
- What Is Pip? A Guide for New Pythonistas
- How to Publish an Open-Source Python Package to PyPI
- Managing Multiple Python Versions With pyenv
- Getting Started With Testing in Python
Starting a Sample Django App in a Project
This tutorial includes a working package to help guide you through the process of making an installable Django app. You can download the source code at the link below:
Download the sample code: Click here to get the code you'll use to learn how to write an installable Django app in this tutorial.
Even if you originally intend to make your Django app available as a package, you’re likely to start inside a project. To demonstrate the process of moving from Django project to installable Django app, I’ve made two branches available in the repo. The project branch is the starting state of an app inside of a Django project. The master branch is the finished installable app.
You can also download the finished app at the PyPI realpython-django-receipts package page. You can install the package by running pip install realpython-django-receipts
.
The sample app is a short representation of the line items on a receipt. In the project branch, you’ll find a directory named sample_project
that contains a working Django project. The directory looks like this:
sample_project/
│
├── receipts/
│ ├── fixtures/
│ │ └── receipts.json
│ │
│ ├── migrations/
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ │
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
│
├── sample_project/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
│
├── db.sqlite3
├── manage.py
├── resetdb.sh
└── runserver.sh
The most current version of Django at the time this tutorial was written was 3.0.4, and all testing was done with Python 3.7. None of the steps outlined in this tutorial should be incompatible with earlier versions of Django—I’ve used these techniques since Django 1.8. However, some changes are necessary if you’re using Python 2. To keep the examples simple, I’ve assumed Python 3.7 across the code base.
Creating the Django Project From Scratch
The sample project and receipts app were created using the Django admin
command and some small edits. To start, run the following code inside of a clean virtual environment:
$ python -m pip install Django
$ django-admin startproject sample_project
$ cd sample_project
$ ./manage.py startapp receipts
This creates the sample_project
project directory structure and a receipts
app subdirectory with template files that you’ll use to create your installable Django app.
Next, the sample_project/settings.py
file needs a few modifications:
- Add
'127.0.0.1'
to theALLOWED_HOSTS
setting so you can test locally. - Add
'receipts'
to theINSTALLED_APPS
list.
You’ll also need to register the receipts
app’s URLs in the sample_project/urls.py
file. To do so, add path('receipts/', include('receipts.urls'))
to the url_patterns
list.
Exploring the Receipts Sample App
Read the full article at https://realpython.com/installable-django-app/ »
[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]
from Planet Python
via read more
No comments:
Post a Comment