How to Write an Installable Django App :
by:
blow post content copied from Real Python
click here to view original post
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
.
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
pyproject.toml
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
nox
- How to publish your installable Django app to PyPI using Twine
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 by clicking the link below:
Get Your Code: Click here to download the free sample code that shows you how to write an installable Django app.
Prerequisites
This tutorial requires some familiarity with Django, pip
, PyPI, pyenv
—or an equivalent virtual environment tool—and nox
. To learn more about these, you can check out the following resources:
- Django Tutorials
- Using Python’s pip to Manage Your Projects’ Dependencies
- How to Publish an Open-Source Python Package to PyPI
- Managing Multiple Python Versions With pyenv
Starting a Sample Django App in a Project
Even if you set out to make your Django app available as a package, you’ll likely start inside a project. In the sample code, you’ll find a 000_before
directory that shows the code before the app is moved onto its own, demonstrating the process of transitioning from a Django project to an installable Django app.
You can also download the finished app at the PyPI realpython-django-receipts package page, or install the package by running python -m pip install realpython-django-receipts
.
The sample app is a short representation of the line items on a receipt. In the 000_before
folder, you’ll find a directory named sample_project
that contains a working Django project:
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
This tutorial was written using Django 5.0.7 and it was tested with Python 3.8 through 3.12. All of the steps outlined in this tutorial should be compatible with earlier versions of Django going back to Django 1.8. However, some modifications will be necessary if you’re using Python 2. For simplicity, the examples in this tutorial assume at least Python 3.8 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
$ python 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. Note that you’ll need to add the include
function as an import from django.urls
.
Exploring the Receipts Sample App
The app consists of two ORM model classes: Item
and Receipt
. The Item
class contains database field declarations for a description and a cost. The cost is contained in a DecimalField
. It’s never a good idea to use floating-point numbers to represent money. Instead, you should always use fixed-point numbers when dealing with currencies.
The Receipt
class is a collection point for Item
objects. This is achieved with a ForeignKey
on Item
that points to Receipt
. Receipt
also includes total()
for getting the total cost of Item
objects contained in the Receipt
:
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 ]
July 31, 2024 at 07:30PM
Click here for more details...
=============================
The original post is available in Real Python by
this post has been published as it is through automation. Automation script brings all the top bloggers post under a single umbrella.
The purpose of this blog, Follow the top Salesforce bloggers and collect all blogs in a single place through automation.
============================
Post a Comment