Skip to content

A batteries-included, opinionated template for Django Rest Framework APIs

License

Notifications You must be signed in to change notification settings

flexy/cookiecutter-drf

This branch is 1 commit ahead of develop.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
Sep 9, 2019
Jun 2, 2021
May 10, 2019
May 10, 2019
May 10, 2019
Mar 7, 2019
May 11, 2019
May 10, 2019
Aug 9, 2019
May 10, 2019
May 10, 2019
Jun 7, 2019
Aug 5, 2018
May 10, 2019

Repository files navigation

cookiecutter-drf

Build Status codecov Code style: black

Getting Started

  1. Install cookiecutter.
  2. Generate your project from cookiecutter-drf:
cookiecutter gh:flexy/cookiecutter-drf

Features

Architecture:

  • Containerized with Docker
  • Python 3.7
  • Django 2.2
  • Web server: Gunicorn and Uvicorn
  • Databases: PostgreSQL, Redis
  • Dependency and python version management (Pipenv)
  • Tasks: Celery and Celery Beat

Utilities:

  • Better settings (django-environ, django-configurations)
  • Better logging (Sentry, logutils)
  • Common model fields and mixins (django-model-utils)

API:

  • Django Rest Framework
  • Swagger UI (drf-yasg)
  • Redoc UI (drf-yasg)
  • OpenAPI schema (drf-yasg)
  • QuerySet filtering (django-filter)

Authentication:

  • Custom user model
  • Authentication endpoints (djoser)
  • Social authentication and OAuth2 (social-auth-app-django, django-oauth-toolkit, django-rest-framework-social-oauth2)

Testing and Code Quality:

  • pytest with pytest-django
  • Easy API testing (django-rest-assured)
  • Factories (factory-boy)
  • django-debug-toolbar available locally
  • Code quality (Flake8, Black)
  • Code coverage (pytest-cov)
  • CI integration (Travis CI)

Continuous Deployment:

  • Heroku

Upcoming Features

  • Email verification
  • Better permissions

Development

Getting started

  1. Install dependencies:
pipenv install
  1. Launch the project environment:
pipenv shell
  1. Initialize pre-commit:
pre-commit install

Generate the project

cookiecutter . --no-input --overwrite-if-exists