├── .dockerignore ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── docker-compose.yml ├── env-example ├── manage.py ├── project ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py ├── requirements.dev.in ├── requirements.dev.txt ├── requirements.in └── requirements.txt /.dockerignore: -------------------------------------------------------------------------------- 1 | venv/ 2 | dumps/ 3 | _logs/ 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/python,django,venv,dotenv,direnv,jupyternotebooks 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=python,django,venv,dotenv,direnv,jupyternotebooks 4 | 5 | ### direnv ### 6 | .direnv 7 | .envrc 8 | 9 | ### Django ### 10 | *.log 11 | *.pot 12 | *.pyc 13 | __pycache__/ 14 | local_settings.py 15 | db.sqlite3 16 | db.sqlite3-journal 17 | media 18 | 19 | # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ 20 | # in your Git repository. Update and uncomment the following line accordingly. 21 | # /staticfiles/ 22 | 23 | ### Django.Python Stack ### 24 | # Byte-compiled / optimized / DLL files 25 | *.py[cod] 26 | *$py.class 27 | 28 | # C extensions 29 | *.so 30 | 31 | # Distribution / packaging 32 | .Python 33 | build/ 34 | develop-eggs/ 35 | dist/ 36 | downloads/ 37 | eggs/ 38 | .eggs/ 39 | lib/ 40 | lib64/ 41 | parts/ 42 | sdist/ 43 | var/ 44 | wheels/ 45 | pip-wheel-metadata/ 46 | share/python-wheels/ 47 | *.egg-info/ 48 | .installed.cfg 49 | *.egg 50 | MANIFEST 51 | 52 | # PyInstaller 53 | # Usually these files are written by a python script from a template 54 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 55 | *.manifest 56 | *.spec 57 | 58 | # Installer logs 59 | pip-log.txt 60 | pip-delete-this-directory.txt 61 | 62 | # Unit test / coverage reports 63 | htmlcov/ 64 | .tox/ 65 | .nox/ 66 | .coverage 67 | .coverage.* 68 | .cache 69 | nosetests.xml 70 | coverage.xml 71 | *.cover 72 | *.py,cover 73 | .hypothesis/ 74 | .pytest_cache/ 75 | pytestdebug.log 76 | 77 | # Translations 78 | *.mo 79 | 80 | # Django stuff: 81 | 82 | # Flask stuff: 83 | instance/ 84 | .webassets-cache 85 | 86 | # Scrapy stuff: 87 | .scrapy 88 | 89 | # Sphinx documentation 90 | docs/_build/ 91 | doc/_build/ 92 | 93 | # PyBuilder 94 | target/ 95 | 96 | # Jupyter Notebook 97 | .ipynb_checkpoints 98 | 99 | # IPython 100 | profile_default/ 101 | ipython_config.py 102 | 103 | # pyenv 104 | .python-version 105 | 106 | # pipenv 107 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 108 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 109 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 110 | # install all needed dependencies. 111 | #Pipfile.lock 112 | 113 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 114 | __pypackages__/ 115 | 116 | # Celery stuff 117 | celerybeat-schedule 118 | celerybeat.pid 119 | 120 | # SageMath parsed files 121 | *.sage.py 122 | 123 | # Environments 124 | .env 125 | .venv 126 | env/ 127 | venv/ 128 | ENV/ 129 | env.bak/ 130 | venv.bak/ 131 | pythonenv* 132 | 133 | # Spyder project settings 134 | .spyderproject 135 | .spyproject 136 | 137 | # Rope project settings 138 | .ropeproject 139 | 140 | # mkdocs documentation 141 | /site 142 | 143 | # mypy 144 | .mypy_cache/ 145 | .dmypy.json 146 | dmypy.json 147 | 148 | # Pyre type checker 149 | .pyre/ 150 | 151 | # pytype static type analyzer 152 | .pytype/ 153 | 154 | # profiling data 155 | .prof 156 | 157 | ### dotenv ### 158 | 159 | ### JupyterNotebooks ### 160 | # gitignore template for Jupyter Notebooks 161 | # website: http://jupyter.org/ 162 | 163 | */.ipynb_checkpoints/* 164 | 165 | # IPython 166 | 167 | # Remove previous ipynb_checkpoints 168 | # git rm -r .ipynb_checkpoints/ 169 | 170 | ### Python ### 171 | # Byte-compiled / optimized / DLL files 172 | 173 | # C extensions 174 | 175 | # Distribution / packaging 176 | 177 | # PyInstaller 178 | # Usually these files are written by a python script from a template 179 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 180 | 181 | # Installer logs 182 | 183 | # Unit test / coverage reports 184 | 185 | # Translations 186 | 187 | # Django stuff: 188 | 189 | # Flask stuff: 190 | 191 | # Scrapy stuff: 192 | 193 | # Sphinx documentation 194 | 195 | # PyBuilder 196 | 197 | # Jupyter Notebook 198 | 199 | # IPython 200 | 201 | # pyenv 202 | 203 | # pipenv 204 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 205 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 206 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 207 | # install all needed dependencies. 208 | 209 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 210 | 211 | # Celery stuff 212 | 213 | # SageMath parsed files 214 | 215 | # Environments 216 | 217 | # Spyder project settings 218 | 219 | # Rope project settings 220 | 221 | # mkdocs documentation 222 | 223 | # mypy 224 | 225 | # Pyre type checker 226 | 227 | # pytype static type analyzer 228 | 229 | # profiling data 230 | 231 | ### venv ### 232 | # Virtualenv 233 | # http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ 234 | [Bb]in 235 | [Ii]nclude 236 | [Ll]ib 237 | [Ll]ib64 238 | [Ll]ocal 239 | [Ss]cripts 240 | pyvenv.cfg 241 | pip-selfcheck.json 242 | 243 | # End of https://www.toptal.com/developers/gitignore/api/python,django,venv,dotenv,direnv,jupyternotebooks -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.11 2 | 3 | ENV PYTHONDONTWRITEBYTECODE 1 4 | ENV PYTHONUNBUFFERED 1 5 | ENV PYTHONIOENCODING utf-8 6 | ENV DEBIAN_FRONTEND=noninteractive 7 | ENV LANG=C.UTF-8 8 | 9 | RUN apt-get -qq update \ 10 | # && apt-get -qq upgrade -y \ 11 | && apt-get -y install locales postgresql-client \ 12 | && rm -rf /var/lib/apt/lists/* \ 13 | && apt-get clean 14 | 15 | COPY ./ /app 16 | WORKDIR /app 17 | 18 | RUN pip install -r requirements.dev.txt 19 | 20 | EXPOSE 8000 21 | 22 | # CMD ["gunicorn", "--bind", "0.0.0.0", "--chdir=/app/project", "wsgi:application"] 23 | CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2018, GbP 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | * Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Djangazzo 2 | Djangazzo is a ready-to-go django environment built with docker compose for fast developing without ops overhead. 3 | 4 | ## Dev Env with docker-compose 5 | Customise .env file if needed. 6 | Remember: never commit/push a secret env file on repositories. 7 | 8 | ## docker-compose 9 | First time we need to build the stack 10 | 11 | ```console 12 | docker-compose build 13 | ``` 14 | 15 | Then 16 | 17 | ```console 18 | docker-compose up [-d to detach] 19 | ``` 20 | 21 | Execute management command inside docker-compose 22 | 23 | ```console 24 | docker-compose run --rm django python manage.py makemigrations 25 | docker-compose run --rm django python manage.py migrate 26 | docker-compose run --rm django python manage.py createsuperuser 27 | docker-compose run --rm django python manage.py startapp myamazingapp 28 | docker-compose run --rm django python manage.py collectstatic 29 | ``` 30 | 31 | These files are created by django inside docker so they are owned by root. 32 | Change permission to solve the issue 33 | 34 | ```console 35 | sudo chown -R $USER:$USER . 36 | ``` 37 | 38 | now we can open the browser to http://localhost:8000 and profit. 39 | 40 | 41 | ## POSTGRESQL 42 | Postgres11 on its docker, it exposes the 5432 port \ 43 | You can connect using a psql client installed locally 44 | 45 | ```console 46 | psql -U postgres -h 0.0.0.0 -p 5432 47 | ``` 48 | 49 | ## REDIS 50 | 51 | ## MAILHOG 52 | 53 | In development, it is often nice to be able to see emails that are being sent from your application. For that reason local SMTP server MailHpg with a web interface is available as docker container. 54 | 55 | Container mailhog will start automatically when you will run all docker containers. 56 | 57 | With [MailHog](https://github.com/mailhog/MailHog) running, to view messages that are sent by your application, open your browser and go to http://127.0.0.1:8025 58 | 59 | 60 | # So Long, and Thanks for All the Fish 61 | 62 | issue&&PR || GTFO 63 | 64 | enjoy. 65 | 66 | ## **Authors** 67 | 68 | * **G Pullara** 69 | 70 | See also the list of [contributors](https://github.com/gionniboy/djangazzo/contributors) who participated in this project. 71 | 72 | 73 | ### **License** 74 | This project is licensed under the BSD 3-Clause License - see the [LICENSE](LICENSE) file for details 75 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | # $Id: docker-compose.yml v.0.5 $ $Date: 2018/05/10 $ $Author: GB 'gionniboy' Pullara $ 2 | # Docker-compose -- Build Django/Postgres/Redis/MailHog dev env based on docker containers. 3 | 4 | version: "3.7" 5 | 6 | services: 7 | django: 8 | build: 9 | context: . 10 | dockerfile: ./Dockerfile 11 | shm_size: "2gb" 12 | image: djangazzo/django:latest 13 | # user: ${CURRENT_UID:-} 14 | env_file: 15 | - env-example 16 | volumes: 17 | - .:/app 18 | networks: 19 | - djangazzo 20 | ports: 21 | - "8000:8000" 22 | depends_on: 23 | - postgres 24 | - redis 25 | - mailhog 26 | restart: unless-stopped 27 | 28 | postgres: 29 | image: postgres:15-alpine 30 | env_file: 31 | - .env 32 | volumes: 33 | - postgres_data_local:/var/lib/postgresql/data 34 | networks: 35 | - djangazzo 36 | ports: 37 | - "5432:5432" 38 | restart: unless-stopped 39 | 40 | redis: 41 | image: redis:7-alpine 42 | networks: 43 | - djangazzo 44 | ports: 45 | - "6379:6379" 46 | restart: unless-stopped 47 | 48 | mailhog: 49 | image: mailhog/mailhog:v1.0.1 50 | networks: 51 | - djangazzo 52 | ports: 53 | - "8025:8025" 54 | restart: unless-stopped 55 | 56 | volumes: 57 | postgres_data_local: {} 58 | 59 | networks: 60 | djangazzo: 61 | -------------------------------------------------------------------------------- /env-example: -------------------------------------------------------------------------------- 1 | #AWS_ACCESS_KEY_ID= 2 | #AWS_SECRET_ACCESS_KEY= 3 | DJANGO_SETTINGS_MODULE=project.settings 4 | SECRET_KEY=supersecretkeyfordjangazzo 5 | TERM=xterm-256color 6 | DATABASE_URL=postgres://postgres:postgres@postgres/postgres 7 | REDIS_URL=redis://cache:6379/0 8 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError as exc: 10 | raise ImportError( 11 | "Couldn't import Django. Are you sure it's installed and " 12 | "available on your PYTHONPATH environment variable? Did you " 13 | "forget to activate a virtual environment?" 14 | ) from exc 15 | execute_from_command_line(sys.argv) 16 | -------------------------------------------------------------------------------- /project/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gionniboy/djangazzo/4f965b576b089c3c41c525fa6da8797ffd3faf28/project/__init__.py -------------------------------------------------------------------------------- /project/settings.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import dj_database_url 4 | 5 | 6 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 7 | SECRET_KEY = os.environ.get("SECRET_KEY") 8 | 9 | # SECURITY WARNING: never run debug true in production! 10 | DEBUG = True 11 | 12 | ALLOWED_HOSTS = [ 13 | "*" 14 | ] 15 | 16 | # Application definition 17 | INSTALLED_APPS = [ 18 | "django.contrib.admin", 19 | "django.contrib.auth", 20 | "django.contrib.contenttypes", 21 | "django.contrib.sessions", 22 | "django.contrib.messages", 23 | "django.contrib.staticfiles", 24 | "django.contrib.sites", 25 | ] 26 | 27 | MIDDLEWARE = [ 28 | "django.middleware.security.SecurityMiddleware", 29 | "django.contrib.sessions.middleware.SessionMiddleware", 30 | "django.middleware.locale.LocaleMiddleware", 31 | "django.middleware.common.CommonMiddleware", 32 | "django.middleware.csrf.CsrfViewMiddleware", 33 | "django.contrib.auth.middleware.AuthenticationMiddleware", 34 | "django.contrib.messages.middleware.MessageMiddleware", 35 | "django.middleware.clickjacking.XFrameOptionsMiddleware", 36 | ] 37 | 38 | ROOT_URLCONF = "project.urls" 39 | 40 | TEMPLATES = [ 41 | { 42 | "BACKEND": "django.template.backends.django.DjangoTemplates", 43 | "DIRS": [], 44 | "APP_DIRS": True, 45 | "OPTIONS": { 46 | "context_processors": [ 47 | "django.template.context_processors.debug", 48 | "django.template.context_processors.request", 49 | "django.contrib.auth.context_processors.auth", 50 | "django.template.context_processors.i18n", 51 | "django.template.context_processors.media", 52 | "django.template.context_processors.static", 53 | "django.template.context_processors.tz", 54 | "django.contrib.messages.context_processors.messages", 55 | ], 56 | }, 57 | }, 58 | ] 59 | 60 | WSGI_APPLICATION = "project.wsgi.application" 61 | 62 | 63 | # Databases 64 | # https://docs.djangoproject.com/en/3.1/ref/settings/#databases 65 | DATABASES = { 66 | "default": dj_database_url.parse( 67 | os.environ.get( 68 | "DATABASE_URL", "postgres://postgres:postgres@localhost/postgres" 69 | ) 70 | ) 71 | } 72 | DATABASES["default"]["ATOMIC_REQUESTS"] = True 73 | 74 | # Caching 75 | # https://github.com/jazzband/django-redis 76 | CACHES = { 77 | "default": { 78 | "BACKEND": "django_redis.cache.RedisCache", 79 | "LOCATION": os.environ.get("REDIS_URL", "redis://localhost:6379"), 80 | "OPTIONS": { 81 | "CLIENT_CLASS": "django_redis.client.DefaultClient", 82 | "PICKLE_VERSION": -1, # Use latest pickle protocol 83 | }, 84 | } 85 | } 86 | CACHE_TIMEOUT = 300 87 | 88 | # Password validation 89 | # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators 90 | AUTH_PASSWORD_VALIDATORS = [ 91 | { 92 | "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", 93 | }, 94 | { 95 | "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", 96 | }, 97 | { 98 | "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", 99 | }, 100 | { 101 | "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", 102 | }, 103 | ] 104 | 105 | # PASSWORDS 106 | # https://docs.djangoproject.com/en/dev/ref/settings/#password-hashers 107 | PASSWORD_HASHERS = [ 108 | # https://docs.djangoproject.com/en/dev/topics/auth/passwords/#using-argon2-with-django 109 | "django.contrib.auth.hashers.Argon2PasswordHasher", 110 | "django.contrib.auth.hashers.PBKDF2PasswordHasher", 111 | "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher", 112 | "django.contrib.auth.hashers.BCryptSHA256PasswordHasher", 113 | "django.contrib.auth.hashers.BCryptPasswordHasher", 114 | ] 115 | 116 | # Internationalization 117 | # https://docs.djangoproject.com/en/2.0/topics/i18n/ 118 | LANGUAGE_CODE = "en-us" 119 | TIME_ZONE = "UTC" 120 | USE_I18N = True 121 | USE_L10N = True 122 | USE_TZ = True 123 | 124 | 125 | # Static files (CSS, JavaScript, Images) 126 | # https://docs.djangoproject.com/en/3.1/howto/static-files/ 127 | STATIC_HOST = os.environ.get("DJANGO_STATIC_HOST", "") 128 | STATIC_URL = f"{STATIC_HOST}/static/" 129 | STATIC_ROOT = f"{BASE_DIR}/static" 130 | 131 | 132 | # MAILHOG 133 | EMAIL_SUBJECT_PREFIX = "[DJANGAZZO]" # used on error reporting 134 | EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" 135 | EMAIL_HOST = "mailhog" 136 | EMAIL_PORT = 1025 137 | EMAIL_HOST_USER = None 138 | EMAIL_HOST_PASSWORD = None 139 | EMAIL_USE_TLS = False 140 | 141 | # django-debug-toolbar 142 | # https://django-debug-toolbar.readthedocs.io/en/latest/installation.html#prerequisites 143 | INSTALLED_APPS += ["debug_toolbar"] # noqa F405 144 | 145 | # https://django-debug-toolbar.readthedocs.io/en/latest/installation.html#middleware 146 | MIDDLEWARE += ["debug_toolbar.middleware.DebugToolbarMiddleware"] # noqa F405 147 | 148 | # https://django-debug-toolbar.readthedocs.io/en/latest/configuration.html#debug-toolbar-config 149 | DEBUG_TOOLBAR_CONFIG = { 150 | "DISABLE_PANELS": [ 151 | "debug_toolbar.panels.redirects.RedirectsPanel", 152 | ], 153 | "SHOW_TEMPLATE_CONTEXT": True, 154 | } 155 | 156 | # django-extensions 157 | # https://django-extensions.readthedocs.io/en/latest/installation_instructions.html#configuration 158 | INSTALLED_APPS += ["django_extensions"] # noqa F405 159 | 160 | # TEMPLATES 161 | # https://docs.djangoproject.com/en/dev/ref/settings/#templates 162 | TEMPLATES[0]["OPTIONS"]["debug"] = DEBUG # noqa F405 163 | -------------------------------------------------------------------------------- /project/urls.py: -------------------------------------------------------------------------------- 1 | """project URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/2.0/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path 18 | 19 | urlpatterns = [ 20 | path('admin/', admin.site.urls), 21 | ] 22 | -------------------------------------------------------------------------------- /project/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for project project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /requirements.dev.in: -------------------------------------------------------------------------------- 1 | -r requirements.in 2 | 3 | autopep8 4 | coverage 5 | django-coverage-plugin 6 | django-debug-toolbar 7 | django-extensions 8 | django-test-plus 9 | flake8 10 | isort 11 | pylint 12 | pytest 13 | pytest-cov 14 | pytest-django 15 | pytest-sugar 16 | Werkzeug 17 | -------------------------------------------------------------------------------- /requirements.dev.txt: -------------------------------------------------------------------------------- 1 | # 2 | # This file is autogenerated by pip-compile with Python 3.11 3 | # by the following command: 4 | # 5 | # pip-compile requirements.dev.in 6 | # 7 | argon2-cffi==21.3.0 8 | # via -r requirements.in 9 | argon2-cffi-bindings==21.2.0 10 | # via argon2-cffi 11 | asgiref==3.7.2 12 | # via django 13 | astroid==2.15.6 14 | # via pylint 15 | autopep8==2.0.2 16 | # via -r requirements.dev.in 17 | cffi==1.15.1 18 | # via argon2-cffi-bindings 19 | coverage[toml]==7.2.7 20 | # via 21 | # -r requirements.dev.in 22 | # django-coverage-plugin 23 | # pytest-cov 24 | dill==0.3.7 25 | # via pylint 26 | dj-database-url==2.0.0 27 | # via -r requirements.in 28 | django==4.2.3 29 | # via 30 | # -r requirements.in 31 | # dj-database-url 32 | # django-debug-toolbar 33 | # django-extensions 34 | # django-redis 35 | django-coverage-plugin==3.1.0 36 | # via -r requirements.dev.in 37 | django-debug-toolbar==4.1.0 38 | # via -r requirements.dev.in 39 | django-extensions==3.2.3 40 | # via -r requirements.dev.in 41 | django-redis==5.3.0 42 | # via -r requirements.in 43 | django-test-plus==2.2.3 44 | # via -r requirements.dev.in 45 | flake8==6.1.0 46 | # via -r requirements.dev.in 47 | iniconfig==2.0.0 48 | # via pytest 49 | isort==5.12.0 50 | # via 51 | # -r requirements.dev.in 52 | # pylint 53 | lazy-object-proxy==1.9.0 54 | # via astroid 55 | markupsafe==2.1.3 56 | # via werkzeug 57 | mccabe==0.7.0 58 | # via 59 | # flake8 60 | # pylint 61 | packaging==23.1 62 | # via 63 | # pytest 64 | # pytest-sugar 65 | platformdirs==3.10.0 66 | # via pylint 67 | pluggy==1.2.0 68 | # via pytest 69 | psycopg2-binary==2.9.6 70 | # via -r requirements.in 71 | pycodestyle==2.11.0 72 | # via 73 | # autopep8 74 | # flake8 75 | pycparser==2.21 76 | # via cffi 77 | pyflakes==3.1.0 78 | # via flake8 79 | pylint==2.17.5 80 | # via -r requirements.dev.in 81 | pytest==7.4.0 82 | # via 83 | # -r requirements.dev.in 84 | # pytest-cov 85 | # pytest-django 86 | # pytest-sugar 87 | pytest-cov==4.1.0 88 | # via -r requirements.dev.in 89 | pytest-django==4.5.2 90 | # via -r requirements.dev.in 91 | pytest-sugar==0.9.7 92 | # via -r requirements.dev.in 93 | redis==4.6.0 94 | # via django-redis 95 | sqlparse==0.4.4 96 | # via 97 | # django 98 | # django-debug-toolbar 99 | termcolor==2.3.0 100 | # via pytest-sugar 101 | tomlkit==0.12.1 102 | # via pylint 103 | typing-extensions==4.7.1 104 | # via dj-database-url 105 | werkzeug==2.3.6 106 | # via -r requirements.dev.in 107 | wrapt==1.15.0 108 | # via astroid 109 | -------------------------------------------------------------------------------- /requirements.in: -------------------------------------------------------------------------------- 1 | argon2-cffi 2 | Django 3 | dj-database-url 4 | django-redis 5 | psycopg2-binary 6 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # 2 | # This file is autogenerated by pip-compile with Python 3.11 3 | # by the following command: 4 | # 5 | # pip-compile requirements.in 6 | # 7 | argon2-cffi==21.3.0 8 | # via -r requirements.in 9 | argon2-cffi-bindings==21.2.0 10 | # via argon2-cffi 11 | asgiref==3.7.2 12 | # via django 13 | cffi==1.15.1 14 | # via argon2-cffi-bindings 15 | dj-database-url==2.0.0 16 | # via -r requirements.in 17 | django==4.2.3 18 | # via 19 | # -r requirements.in 20 | # dj-database-url 21 | # django-redis 22 | django-redis==5.3.0 23 | # via -r requirements.in 24 | psycopg2-binary==2.9.6 25 | # via -r requirements.in 26 | pycparser==2.21 27 | # via cffi 28 | redis==4.6.0 29 | # via django-redis 30 | sqlparse==0.4.4 31 | # via django 32 | typing-extensions==4.7.1 33 | # via dj-database-url 34 | --------------------------------------------------------------------------------