Appendix D. Repository and Unit of Work Patterns with Django
Suppose you wanted to use Django instead of SQLAlchemy and Flask. How might things look? The first thing is to choose where to install it. We put it in a separate package next to our main allocation code:
├──
src
│
├──
allocation
│
│
├──
__init__
.
py
│
│
├──
adapters
│
│
│
├──
__init__
.
py
...
│
├──
djangoproject
│
│
├──
alloc
│
│
│
├──
__init__
.
py
│
│
│
├──
apps
.
py
│
│
│
├──
migrations
│
│
│
│
├──
0001
_initial
.
py
│
│
│
│
└──
__init__
.
py
│
│
│
├──
models
.
py
│
│
│
└──
views
.
py
│
│
├──
django_project
│
│
│
├──
__init__
.
py
│
│
│
├──
settings
.
py
│
│
│
├──
urls
.
py
│
│
│
└──
wsgi
.
py
│
│
└──
manage
.
py
│
└──
setup
.
py
└──
tests
├──
conftest
.
py
├──
e2e
│
└──
test_api
.
py
├──
integration
│
├──
test_repository
.
py
...
Tip
The code for this appendix is in the appendix_django branch on GitHub:
git clone https://github.com/cosmicpython/code.git cd code git checkout appendix_django
Repository Pattern with Django
We used a plug-in called
pytest-django
to help with test
database management.
Rewriting the first repository test was a minimal change—just rewriting some raw SQL with a call to the Django ORM/QuerySet language:
First repository test adapted (tests/integration/test_repository.py)
from
djangoproject.alloc
import
models
as
django_models
@pytest.mark.django_db
def
test_repository_can_save_a_batch
():
batch
=
model
.
Batch
(
"batch1" ...
Get Architecture Patterns with Python now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.