cookiecutter-django-rest
a factory for building bleeding edge, best practiced, scalable, rest apis
You need to make a scalable api on a deadline. You deeply care about the quality of your work.
cookiecutter-django-rest
takes care of the details so you can focus on making your api awesome. Scaffolding a project takes seconds and it gives you authentication, user accounts, and the docs and tests to support them. Just add your own resources to the api and start shipping. ✨ 💅
Highlights
- Modern Python development with Python 3.6+
- Bleeding edge Django 2.0+
- Fully dockerized, local development via docker-compose.
- PostgreSQL 9.6+
- Start off with full test coverage, continuous integration, and continuous deployment.
- Complete Django Rest Framework integration
- Auto deployment to Heroku included. Also since we’re using containers we can easily deploy anywhere.
- Always current dependencies and security updates enforced by pyup.io.
- A slim but robust foundation – just enough to maximize your productivity, nothing more.
Quick Start
Install cookiecutter:
brew install cookiecutter
Scaffold your project:
cookiecutter gh:agconti/cookiecutter-django-rest
Example of the result: https://github.com/agconti/piedpiper-web
Try creating a user!
curl -d '{"username":"'"$RANDOM"'", "password":"test", "email":"test@test.com", "first_name":"test", "last_name":"user"}' \
-H "Content-Type: application/json" \
-X POST https://piedpiper-prod.herokuapp.com/api/v1/users/
Release notes
Release 0.8.0 #468
- [x] Upgrade to Django 2.0 #505
- [x] Fully Dockerize app #325
- [x] Update ReadMe overview to be more descriptive #470
- [x] Remove IA Diagram from README #469
- [x] Add code of conduct to repo #473
- [x] cannot connect to postgres db #450
- [x] fab init: #425
- [x] Nose not picking up tests #416
- [x] Add users app config. Rename models.py to signals.py #414
- [x] Fix python3 print statements #388
- [x] CORS #364
Release 0.7.0 #327
- [x] Upgrade to Django 1.10 #328
- [x] Add auth password validators #253
- [x] Update manage.py with new django 1.10 content. #252
- [x] Update MIDDLEWARE_CLASSES setting to MIDDLEWARE #209
- [x] Update to Django 1.10 logging configuration #208
- [x] Update mkdocs to 0.16.1 #334
- [x] Update gevent to 1.2.0 #336
- [x] Update coverage to 4.3 #339
- [x] Update coverage to 4.3.1 #341
- [x] Remove django-secure #356
- [x] Update gevent to 1.2.1 #360
- [x] Update newrelic to 2.78.0.57 #353
- [x] Update whitenoise to 3.2.3 #352
- [x] Update django to 1.10.5 #351
- [x] Update newrelic to 2.78.0.57 #350
- [x] Update dj-database-url to 0.4.2 #349
- [x] Update django-model-utils to 2.6.1 #348
- [x] Import Error #337
- [x] Update whitenoise to 3.3.0 #363
- [x] Update markdown to 2.6.8 #362
- [x] Update ipdb to 0.10.2 #361
- [x] Update djangorestframework to 3.5.4 #372
- [x] Update flake8 to 3.3.0 #371
- [x] Update ipython to 5.2.2 #369
- [x] Update djangorestframework to 3.5.4 #374
- [x] Update flake8 to 3.3.0 #373
- [x] Update django-versatileimagefield to 1.6.3 #376
- [x] Update boto to 2.46.1 #379
- [x] Staticfiles dirs is a list of lists #386
- [x] Update psycopg2 to 2.7 #384
- [x] Update django to 1.10.6 #383
- [x] Update newrelic to 2.80.1.61 #382
- [x] Update ipython to 5.3.0 #381
- [x] Update gunicorn to 19.7.0 #387
- [x] Update django-rq to 0.9.5 #394
- [x] Update newrelic to 2.82.0.62 #395
- [x] Update mkdocs to 0.16.2 #393
- [x] Update psycopg2 to 2.7.1 #392
- [x] Update djangorestframework to 3.6.2 #391
- [x] Update django-model-utils to 3.0.0 #402
- [x] Update mkdocs to 0.16.3 #401
- [x] Update django to 1.11 #400
- [x] Update pytz to 2017.2 #398
- [x] Update django-filter to 1.0.2 #397
- [x] Update gunicorn to 19.7.1 #396
- [x] Update ipython to 6.0.0 #407- [ ] Update newrelic to 2.86.0.65 #411
- [x] Update fabric to 1.13.2 #409
- [x] Update ipdb to 0.10.3 #408
- [x] Update django-versatileimagefield to 1.7.0 #406
- [x] Update django-filter to 1.0.4 #420
- [x] Update newrelic to 2.86.1.66 #419
- [x] Update coverage to 4.4.1 #417
- [x] Update djangorestframework to 3.6.3 #415
Release 0.6.0 #167
- [x] Update travis badge to private repo #26
- [x] django-configuration conflicts with pycharm python console #234
- [x] Add jwt and oauth2 for third parties (social) #239
- [x] Upgrade gevent to secure version #322
- [x] Update newrelic to 2.76.0.55 #321
- [x] Update factory-boy to 2.8.1 #320
- [x] Update boto to 2.45.0 #319
- [x] Update pytz to 2016.10 #314
- [x] Update django-versatileimagefield to 1.6.2 #313
- [x] Update boto to 2.44.0 #312
- [x] Update fabric to 1.13.1 #311
- [x] Update django-filter to 1.0.1 #303
- [x] Update flake8 to 3.2.1 #302
- [x] Upgrade Django to secure version, 1.9.11 #297
- [x] Update django-versatileimagefield to 1.6.1 #296
- [x] Update flake8 to 3.2.0 #294
- [x] Update newrelic to 2.74.0.54 #293
- [x] Update django-rq to 0.9.4 #288
- [x] Update mkdocs to 0.16.0
- [x] Update djangorestframework to 3.5.2 #281
- [x] Update newrelic to 2.72.1.53 #278
- [x] Update django-redis-cache to 1.7.1 #279
- [x] Add dependency caching for traivs #272
- [x] Update djangorestframework to 3.5 #275
- [x] Update newrelic to 2.72.0.52 #271
- [x] Update djangorestframework to 3.5.0 #270
- [x] Update django-rq #269
- [x] Update boto to 2.43.0 #265
- [x] Update django-filter to 0.15.3 #263
- [x] Update pytz to 2016.7 #261
- [x] Update django-filter to 0.15.2
- [x] Update whitenoise to 3.2.2
- [x] Update django-model-utils to 2.6
- [x] Update django-filter to 0.15.0
- [x] Update djangorestframework to 3.4.7
- [x] Update markdown to 2.6.7
- [x] Update newrelic to 2.70.0.51 #240
- [x] Update djangorestframework to 3.4.6 #237
- [x] Update django-redis-cache to 1.7.0 #232
- [x] Update djangorestframework to 3.4.5 #231
- [x] Update django-filter to 0.14.0 #228
- [x] Update ipython to 5.1.0 #229
- [x] Update django-model-utils to 2.5.2 #223
- [x] Update whitenoise to 3.2.1 #222
- [x] Update flake8 to 3.0.4 #219
- [x] Update django-rq to 0.9.2
- [x] Update djangorestframework to 3.4.3 #215
- [x] Update django-model-utils to 2.5.1 #213
- [x] Update djangorestframework to 3.4.2 #212
- [x] Move pyup badge to top level readme #201
- [x] Limit default pagination size to 10 #191
- [x] Update logging config to match django 1.9 changes #190
- [x] Add pyup for easy dependency management. #189
- [x] Set django storages default acl to public read #188
- [x] Update IsOwnerOrReadOnly to IsUserOrReadOnly #187
- [x] Add RQ_SHOW_ADMIN_LINK to true in config/common #186
- [x] Add
created_on_demand
versatile image field to True for local development #185 - [x] Upgrade to DRF 3.4 #184
- [x] Error when running migrate command on Azure VM #181
- [x] Update users serializer for new write only field syntax #183
- [x] Upgrade Django 1.9.7 #180
- [x] Update
IsOwnerOrReadOnly
permission docstring to be more clear #178 - [x] Upgrade
django-redis-cache
tov1.6.5
#173 - [x] Update
/users
documentation. #172 - [x] Update language in README overview #168
- [x] Add push notifications to features list #123 [ Decided against implementing ]
- [x] Implement
django-push-notifications
over django-pnm #122 [ Decided against implementing ] - [x] Upgrade auth to use jwt #21 [ Decided against implementing ]
- [x] Update dependencies #175
- [x] Add ia diagram that details the scaffolded server’s structure to docs #119
- [x] Evaluate heroku redis as a replacement for Redis To Go #99
- [x] Evaluate django-q to replace django-rq #59
- [x] Update travis badge to private repo #26
Release 0.5.0
- [x] Remove duplicate append slash setting in
config/common
#162 - [x] Add .github folder and include issue and pull request templates #160
- [x] Remove django sites configuration since its not needed for rest apis #161
- [x] Update django template loaders settings #158
- [x] Scale heroku dynos to hobby tier #157
- [x] Add django-unique-upload for unique uploads with uuids #154
- [x] Set versatile image’s field to ‘create_images_on_demand’ to false in production by default. #153
- [x] boto not add the Signature and Key to #152
- [x] Set APPEND_SLASH to False #149
Release 0.4.0
- [x] Updated drf page number pagination settings #145
- [x] Upgrade user model
pk
s touuids
#65 - [x] For connivence, separate runserver from createsuperuser #140
- [x] Add @python_2_unicode_compatible to models #139
- [x] Remove zeropush config from fab init #138
- [x] Use standard django-configurations once it releases
0.9
#63 - [x] Refactor settings to use Django class based settings instead of Django Configurations #118
- [x] Add .editorconfig file #101
- [x] Update dependencies #129
- [x] django.core.exceptions.AppRegistryNotReady: Apps aren’t loaded yet #131
- [x] Heroku link is broken in ReadMe #135
- [x] Add django configurations to features list #133
Release 0.3.0
- [x] Add travis badge to project readme #110
- [x] Allow for python 3 support for urlparse #113
- [x] Change to
api-root
from 301 to 302 #115 - [x] Upgrade to factory boy 2.6 #117
- [x] Add django 1.8 security middleware to common.py #121
- [x] Upgrade to Django 1.9 #124
- [x] Remove Django-pnm #126
Release 0.2.0
- Update heroku postgresql addon config #98
- Fix fabfile spacing #103
- Do super() in test case of users #106
- Remove auth_token from UserSerializer #104
- Set up automated testing via travis #107
Release 0.1.0
- Update users app with the appropriate test cases #1
- Add api docs for user app #2
- add tests for auth tokens #43
- Add api docs for auth #3
- Add django-storages-redux config to production. #6
- Handle “/” routing #7
- add redis to app readme prerequisites. #9
- Upgrade mkdocs to 0.14.0 #10
- Add
git init
to project ReadMe #17 - Update pg backups with schedule time #18
- Migrate the database after deploys #19
- add fab dev and qa tasks back in #20
- Update docs index to include readme #27
- Update flake8 fab task to target project dir #30
- Exclude migrations from flake8 #31
- Configure nosetests arguments #32
- Update flake8 to allow for easy debugging #37
- Add faker for mocking #41
- Remove email notifications from travis #48
- Update cookie cutter params to specify username / organization name #47
- Add github username to heroku repo deploy #46
- Update app routing to use a single DefaultRouter #45
- Exclude mkdocs site dir via gitignore #52
- Update django-pnm to 0.1.5 #54
- Update Authentication docs to include obtain
auth_token
endpoint #56 - Add caching via django-redis to features list #58
- Update ReadMe with more detailed background on project #60
- Upgrade to Django 1.8 after django-configurations has been upgraded. #8
- Add gif of scaffolding to ReadMe #66
- Fix broken heroku run command #71
- Database values are not set in Travis file #69
- Running ./manage.py test will result in “Coverage.py warning: Module walc was never imported.” #67
- Tests should have
--nologcapture
added to the NOSE_ARGS #77 - Add
contributing.md
#74 - RelatedObjectDoesNotExist: User has no auth_token. #75
- Configure Django template debug settings #82
- Update to DRF 3.2.3 #81
- Update to Django 1.8.4 #80
- Upgrade Django-pnm to 1.6 #86
- Update
RedirectView.permanent
to true forapi-root
route #90 - Upgrade dependencies #89
- Update
.travis
postgres config #88 - Add
.coveragerc
#73