commit
85ee829ea8
30 changed files with 1649 additions and 0 deletions
@ -0,0 +1,36 @@
@@ -0,0 +1,36 @@
|
||||
# Editors |
||||
*~ |
||||
*.sw[po] |
||||
|
||||
# Python |
||||
*.py[cod] |
||||
__pycache__ |
||||
|
||||
# Virtual environment |
||||
.env |
||||
venv |
||||
|
||||
# Logs |
||||
logs |
||||
*.log |
||||
pip-log.txt |
||||
|
||||
# Unit test / coverage reports |
||||
.coverage |
||||
.tox |
||||
nosetests.xml |
||||
htmlcov |
||||
|
||||
# Translations |
||||
*.mo |
||||
*.pot |
||||
|
||||
# Databases |
||||
sqlite.db |
||||
|
||||
# Local configuration |
||||
config.env |
||||
|
||||
# Local overrides and variable content |
||||
local/ |
||||
var/ |
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
# Changelog |
||||
All notable changes to test-wagtail will be documented in this file. |
||||
|
||||
The format is based on [Keep a Changelog](http://keepachangelog.com/) |
||||
and this project adheres to [Semantic Versioning](http://semver.org/). |
||||
|
||||
## [Unreleased] |
||||
### Added |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
This software is developped by Cliss XXI. |
@ -0,0 +1,104 @@
@@ -0,0 +1,104 @@
|
||||
# -*- mode: makefile-gmake -*-
|
||||
## Définition des variables
|
||||
# Le nom de l'exécutable Python à utiliser ou son chemin absolu
|
||||
# (ex. : python ou python3).
|
||||
PYTHON_EXE := python3 |
||||
# S'il faut utiliser un environnement virtuel (yes ou no).
|
||||
USE_VENV := yes |
||||
# Configuration de l'environnement virtuel.
|
||||
VENV_DIR := venv |
||||
VENV_OPT := --system-site-packages |
||||
|
||||
# Définis les chemins et options des exécutables.
|
||||
PYTHON_EXE_BASENAME := $(shell basename $(PYTHON_EXE)) |
||||
VENV_PYTHON := --python=$(PYTHON_EXE_BASENAME) |
||||
ifeq ($(USE_VENV), yes) |
||||
PYTHON := $(VENV_DIR)/bin/$(PYTHON_EXE_BASENAME) |
||||
PIP := $(VENV_DIR)/bin/pip |
||||
else |
||||
PYTHON := $(shell which $(PYTHON_EXE)) |
||||
PIP := $(shell which pip) |
||||
endif |
||||
|
||||
# Charge la configuration du 'config.env' s'il existe
|
||||
ifneq ("$(wildcard config.env)", "") |
||||
include config.env |
||||
endif |
||||
# ... et définis l'environnement à utiliser.
|
||||
ifdef DJANGO_SETTINGS_MODULE |
||||
ENV = $(shell echo $(DJANGO_SETTINGS_MODULE) | cut -d. -f3) |
||||
else |
||||
ENV = production |
||||
endif |
||||
|
||||
# Définition des cibles -------------------------------------------------------
|
||||
|
||||
.PHONY: clean-pyc clean-build clear-venv help |
||||
.DEFAULT_GOAL := help |
||||
|
||||
# commentaire d'une cible : #-> interne ##-> aide production+dev ###-> aide dev
|
||||
help: ## affiche cette aide
|
||||
ifeq ($(ENV), production) |
||||
@perl -nle'print $& if m{^[a-zA-Z_-]+:[^#]*?## .*$$}' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' |
||||
else |
||||
@perl -nle'print $& if m{^[a-zA-Z_-]+:[^#]*?###? .*$$}' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?###? "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' |
||||
endif |
||||
|
||||
clean: clean-build clean-pyc ## nettoie tous les fichiers temporaires
|
||||
|
||||
clean-build: ### nettoie les fichiers de construction du paquet
|
||||
rm -rf build/ |
||||
rm -rf dist/ |
||||
rm -rf *.egg-info |
||||
|
||||
clean-pyc: ### nettoie les fichiers temporaires python
|
||||
find . -name '*.pyc' -exec rm -f {} + |
||||
find . -name '*.pyo' -exec rm -f {} + |
||||
find . -name '*~' -exec rm -f {} + |
||||
|
||||
init: create-venv config.env update ## initialise l'environnement et l'application
|
||||
|
||||
config.env: # TODO: lancer une commande interactive
|
||||
cp config.env.example config.env |
||||
|
||||
update: install-deps migrate static ## mets à jour l'application et ses dépendances
|
||||
touch test-wagtail/wsgi.py |
||||
|
||||
install-deps: ## installe les dépendances de l'application
|
||||
$(PIP) install -r requirements/$(ENV).txt |
||||
|
||||
migrate: ## mets à jour le schéma de la base de données
|
||||
$(PYTHON) manage.py migrate |
||||
|
||||
static: ## collecte les fichiers statiques
|
||||
ifeq ($(ENV), production) |
||||
@echo "Collecte des fichiers statiques..." |
||||
$(PYTHON) manage.py collectstatic --no-input --verbosity 0 |
||||
endif |
||||
|
||||
## Cibles liées à l'environnement virtuel
|
||||
|
||||
create-venv: $(PYTHON) |
||||
|
||||
$(PYTHON): |
||||
ifeq ($(USE_VENV), yes) |
||||
virtualenv $(VENV_OPT) $(VENV_PYTHON) $(VENV_DIR) |
||||
else |
||||
@echo "\033[31mErreur !\033[0m Impossible de trouver l'exécutable Python $(PYTHON)" |
||||
@exit 1 |
||||
endif |
||||
|
||||
clear-venv: ## supprime l'environnement virtuel
|
||||
-rm -rf $(VENV_DIR) |
||||
|
||||
## Cibles pour le développement
|
||||
|
||||
test: ### lance les tests de l'application
|
||||
DJANGO_SETTINGS_MODULE="test-wagtail.settings.test" \
|
||||
$(PYTHON) manage.py test --parallel 4 |
||||
|
||||
serve: ### démarre un serveur local pour l'application
|
||||
$(PYTHON) manage.py runserver |
||||
|
||||
lint: ### vérifie la syntaxe et le code python
|
||||
flake8 test-wagtail |
@ -0,0 +1,98 @@
@@ -0,0 +1,98 @@
|
||||
# test-wagtail |
||||
|
||||
Une courte description du projet. |
||||
|
||||
[](https://github.com/pydanny/cookiecutter-django/) |
||||
|
||||
## Installation |
||||
### Requirements |
||||
|
||||
On a Debian-based host - running at least Debian Stretch, you will need the |
||||
following packages: |
||||
- python3 |
||||
- virtualenv |
||||
- python3-psycopg2 (optional, in case of a PostgreSQL database) |
||||
|
||||
Note: if you're serving the application with uWSGI and NGINX on a sub location, ensure |
||||
that you've added `route-run = fixpathinfo:` to your uWSGI configuration (from |
||||
[v2.0.11](https://uwsgi-docs.readthedocs.io/en/latest/Changelog-2.0.11.html#fixpathinfo-routing-action)). |
||||
|
||||
### Step by step |
||||
|
||||
In waiting for a complete `Makefile`, you will have to follow those steps to |
||||
install the application. |
||||
|
||||
It assumes that you have downloaded the last release of test-wagtail, |
||||
extracted it and that you moved to that folder. |
||||
|
||||
1. Start by creating a new virtual environment under `./venv` and activate it: |
||||
|
||||
$ virtualenv --system-site-packages ./venv |
||||
$ source ./venv/bin/activate |
||||
|
||||
2. Install the required Python packages depending on your environment: |
||||
|
||||
$ pip install -r requirements/production.txt |
||||
... or ... |
||||
$ pip install -r requirements/development.txt |
||||
|
||||
3. Configure the application by setting the proper environment variables |
||||
depending on your environment. You can use the `config.env.example` which |
||||
give you the main variables with example values. |
||||
|
||||
$ cp config.env.example config.env |
||||
$ nano config.env |
||||
|
||||
Note that this `./config.env` file will be loaded by default when the |
||||
application starts. If you don't want that, just move this file away or set |
||||
the `DJANGO_READ_CONFIG_FILE` environment variable to `false`. |
||||
|
||||
4. Create the database tables - it assumes that you have created the database |
||||
and set the proper configuration to use it: |
||||
|
||||
$ ./manage.py migrate |
||||
|
||||
That's it! You should now be able to start the Django development server to |
||||
check that everything is working fine with: |
||||
|
||||
$ ./manage.py runserver |
||||
|
||||
## Structure |
||||
### Overview |
||||
|
||||
All the application files - e.g. Django code including settings, templates and |
||||
statics - are located into the `test-wagtail/`. It should |
||||
permit in a near future to distribute the application as a Python package and |
||||
install it system-wide. |
||||
|
||||
Two environments are defined - either for requirements and settings: |
||||
- `development`: for local application development and testing. It uses a |
||||
SQLite3 database and enable debugging by default, add some useful settings |
||||
and applications for development purpose - i.e. the `django-debug-toolbar`. |
||||
- `production`: for production. It checks that configuration is set and |
||||
correct, try to optimize performances and enforce some settings - i.e. HTTPS |
||||
related ones. |
||||
|
||||
### Local changes |
||||
|
||||
You can override and extend statics and templates locally. This can be useful |
||||
if you have to change the logo for a specific instance for example. For that, |
||||
just put your files under the `local/static/` and `local/templates/` folders. |
||||
|
||||
Regarding the statics, do not forget to collect them after that. Note also that |
||||
the `local/` folder is ignored by *git*. |
||||
|
||||
### Variable content |
||||
|
||||
All the variable content - e.g. user-uploaded media, collected statics - are |
||||
stored inside the `var/` folder. It is also ignored by *git* as it's specific |
||||
to each application installation. |
||||
|
||||
So, you will have to configure your Web server to serve the `var/media/` and |
||||
`var/static/` folders, which should point to `/media/` and `/static/`, |
||||
respectively. |
||||
|
||||
## License |
||||
|
||||
test-wagtail is developed by Cliss XXI and licensed under the |
||||
[AGPLv3+](LICENSE). |
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
# Base directory of the app instance, where the local and var folders are |
||||
# located. Default is the current directory. |
||||
# BASE_DIR= |
||||
|
||||
# Database configuration as an URL. |
||||
# /!\ It must be set in production. |
||||
# DJANGO_DATABASE_URL=psql://user:password@127.0.0.1:5432/test-wagtail |
||||
|
||||
# Email configuration as an URL. Default is the local SMTP server in |
||||
# production and the console in development. |
||||
# DJANGO_EMAIL_URL=smtp+tls://localhost:587 |
||||
|
||||
# Default email address to use for various automated correspondence. |
||||
# /!\ It must be set in production. |
||||
# DEFAULT_FROM_EMAIL=webmaster@example.org |
||||
|
||||
# Environment to use within the application. |
||||
# Note that if you want to change the default value, this variable should be |
||||
# either set by your uWSGI server or defined in your OS environment. |
||||
# DJANGO_SETTINGS_MODULE=test-wagtail.settings.production |
||||
|
||||
# The secret key used to provide cryptographic signing. It should be set to |
||||
# a unique, unpredictable value. On a GNU/Linux system, you could generate a |
||||
# new one with: |
||||
# $ head -c50 /dev/urandom | base64 |
||||
# /!\ It must be set in production. |
||||
# DJANGO_SECRET_KEY=CHANGEME!!! |
||||
|
||||
# A coma-separated string representing the host/domain names that this Django |
||||
# site can serve. |
||||
# DJANGO_ALLOWED_HOSTS=example.org, |
||||
|
||||
# Turn on/off debug mode. Note that it's always disabled in production. |
||||
# DJANGO_DEBUG=off |
||||
|
||||
# Location on which the application is served. |
||||
# APP_LOCATION=/ |
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
#!./venv/bin/python |
||||
import os |
||||
import sys |
||||
|
||||
import environ |
||||
|
||||
DEFAULT_DJANGO_SETTINGS_MODULE = 'test-wagtail.settings.production' |
||||
|
||||
if __name__ == "__main__": |
||||
env = environ.Env() |
||||
|
||||
# Load configuration from config.env file |
||||
if (env.bool('DJANGO_READ_CONFIG_FILE', default=True) and |
||||
os.path.isfile('config.env')): |
||||
env.read_env('config.env') |
||||
|
||||
# Set the default settings module to use |
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', env( |
||||
'DJANGO_SETTINGS_MODULE', default=DEFAULT_DJANGO_SETTINGS_MODULE |
||||
)) |
||||
|
||||
try: |
||||
from django.core.management import execute_from_command_line |
||||
except ImportError: |
||||
# The above import may fail for some other reason. Ensure that the |
||||
# issue is really that Django is missing to avoid masking other |
||||
# exceptions on Python 2. |
||||
try: |
||||
import django # noqa |
||||
except ImportError: |
||||
raise ImportError( |
||||
"Couldn't import Django. Are you sure it's installed and " |
||||
"available on your PYTHONPATH environment variable? Did you " |
||||
"forget to activate a virtual environment?" |
||||
) |
||||
raise |
||||
|
||||
execute_from_command_line(sys.argv) |
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
# This file is here because many Platforms as a Service look for |
||||
# requirements.txt in the root directory of a project. |
||||
-r requirements/production.txt |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
# Django |
||||
# ------------------------------------------------------------------------------ |
||||
django >=2.0,<2.1 # https://www.djangoproject.com/ |
||||
django-environ ==0.4.5 # https://github.com/joke2k/django-environ |
||||
wagtail |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
-r base.txt |
||||
|
||||
# Django |
||||
# ------------------------------------------------------------------------------ |
||||
django-debug-toolbar # https://github.com/jazzband/django-debug-toolbar |
||||
django-extensions # https://github.com/django-extensions/django-extensions |
@ -0,0 +1,3 @@
@@ -0,0 +1,3 @@
|
||||
-r base.txt |
||||
|
||||
# PRECAUTION: avoid production dependencies that aren't in development. |
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
[flake8] |
||||
exclude = |
||||
.git, |
||||
.tox, |
||||
venv, |
||||
*/migrations/*, |
||||
*/static/*, |
||||
# assets & compilation |
||||
assets, |
||||
build, |
||||
dist, |
||||
node_modules |
||||
max-line-length = 80 |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
default_app_config = 'test-wagtail.base.apps.BaseConfig' |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig |
||||
|
||||
|
||||
class BaseConfig(AppConfig): |
||||
name = 'test-wagtail.base' |
||||
verbose_name = "Base" |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
from django.urls import path |
||||
from django.views.generic import TemplateView |
||||
|
||||
urlpatterns = [ |
||||
path('', TemplateView.as_view(template_name='pages/home.html'), |
||||
name='home'), |
||||
] |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
from .base import * # noqa |
@ -0,0 +1,277 @@
@@ -0,0 +1,277 @@
|
||||
""" |
||||
Django settings for test-wagtail project. |
||||
|
||||
For more information on this file, see |
||||
https://docs.djangoproject.com/en/stable/topics/settings/ |
||||
|
||||
For the full list of settings and their values, see |
||||
https://docs.djangoproject.com/en/stable/ref/settings/ |
||||
""" |
||||
import os.path |
||||
|
||||
import environ |
||||
|
||||
# ENVIRONMENT VARIABLES AND PATHS |
||||
# ------------------------------------------------------------------------------ |
||||
# Load environment variables |
||||
env = environ.Env() |
||||
|
||||
# Package - e.g. Django project - root and apps directories |
||||
root_dir = environ.Path(__file__) - 2 |
||||
apps_dir = root_dir.path('apps') |
||||
|
||||
# Base directory of the app instance |
||||
# Note that it should be defined in OS environment variables in case of a |
||||
# multi-instances application. |
||||
base_dir = env.path('BASE_DIR', default=str(root_dir - 1)) |
||||
|
||||
# Local directory used for static and templates overrides |
||||
local_dir = base_dir.path('local') |
||||
|
||||
# Directory for variable stuffs, i.e. user-uploaded media |
||||
var_dir = base_dir.path('var') |
||||
if not os.path.isdir(var_dir()): |
||||
os.mkdir(var_dir(), mode=0o755) |
||||
|
||||
# Whether config.env should be loaded here |
||||
READ_CONFIG_FILE = env.bool('DJANGO_READ_CONFIG_FILE', default=True) |
||||
if READ_CONFIG_FILE: |
||||
# OS environment variables take precedence over variables from config.env |
||||
env.read_env(str(base_dir.path('config.env'))) |
||||
|
||||
# Location on which the application is served |
||||
APP_LOCATION = env('APP_LOCATION', default='/') |
||||
|
||||
# GENERAL |
||||
# ------------------------------------------------------------------------------ |
||||
|
||||
WAGTAIL_SITE_NAME = "test-wagtail" |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#debug |
||||
DEBUG = env.bool('DJANGO_DEBUG', default=True) |
||||
|
||||
# Local time zone for this installation |
||||
TIME_ZONE = 'Europe/Paris' |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#language-code |
||||
LANGUAGE_CODE = 'fr' |
||||
|
||||
# https://docs.djangoproject.com/en/dev/ref/settings/#site-id |
||||
SITE_ID = 1 |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#use-i18n |
||||
USE_I18N = True |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#use-l10n |
||||
USE_L10N = True |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#use-tz |
||||
USE_TZ = True |
||||
|
||||
# DATABASES |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#databases |
||||
# https://django-environ.readthedocs.io/en/stable/#supported-types |
||||
DATABASES = { |
||||
'default': env.db('DJANGO_DATABASE_URL', default='sqlite:///{}'.format( |
||||
base_dir('sqlite.db') |
||||
)), |
||||
} |
||||
|
||||
# URLS |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#root-urlconf |
||||
ROOT_URLCONF = 'test-wagtail.urls' |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#wsgi-application |
||||
WSGI_APPLICATION = 'test-wagtail.wsgi.application' |
||||
|
||||
# APP CONFIGURATION |
||||
# ------------------------------------------------------------------------------ |
||||
DJANGO_APPS = [ |
||||
'django.contrib.admin', |
||||
'django.contrib.auth', |
||||
'django.contrib.contenttypes', |
||||
'django.contrib.sessions', |
||||
'django.contrib.messages', |
||||
'django.contrib.staticfiles', |
||||
] |
||||
|
||||
|
||||
WAGTAIL_APPS = [ |
||||
'wagtail.contrib.forms', |
||||
'wagtail.contrib.redirects', |
||||
'wagtail.embeds', |
||||
'wagtail.sites', |
||||
'wagtail.users', |
||||
'wagtail.snippets', |
||||
'wagtail.documents', |
||||
'wagtail.images', |
||||
'wagtail.search', |
||||
'wagtail.admin', |
||||
'wagtail.core', |
||||
|
||||
'modelcluster', |
||||
'taggit', |
||||
] |
||||
|
||||
|
||||
# Project dependencies |
||||
THIRD_PARTY_APPS = [] |
||||
|
||||
# Project applications |
||||
LOCAL_APPS = [ |
||||
'test-wagtail.base', |
||||
] |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#installed-apps |
||||
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS + WAGTAIL_APPS |
||||
|
||||
# PASSWORDS |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#password-hashers |
||||
PASSWORD_HASHERS = [ |
||||
# https://docs.djangoproject.com/en/stable/topics/auth/passwords/#using-argon2-with-django |
||||
# 'django.contrib.auth.hashers.Argon2PasswordHasher', |
||||
'django.contrib.auth.hashers.PBKDF2PasswordHasher', |
||||
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', |
||||
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', |
||||
'django.contrib.auth.hashers.BCryptPasswordHasher', |
||||
] |
||||
|
||||
# https://docs.djangoproject.com/en/stable/topics/auth/passwords/#password-validation |
||||
AUTH_PASSWORD_VALIDATORS = [ |
||||
{ |
||||
'NAME': ('django.contrib.auth.password_validation.' |
||||
'UserAttributeSimilarityValidator'), |
||||
}, |
||||
{ |
||||
'NAME': ('django.contrib.auth.password_validation.' |
||||
'MinimumLengthValidator'), |
||||
}, |
||||
{ |
||||
'NAME': ('django.contrib.auth.password_validation.' |
||||
'CommonPasswordValidator'), |
||||
}, |
||||
{ |
||||
'NAME': ('django.contrib.auth.password_validation.' |
||||
'NumericPasswordValidator'), |
||||
}, |
||||
] |
||||
|
||||
# MIDDLEWARE |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#middleware |
||||
MIDDLEWARE = [ |
||||
'django.middleware.security.SecurityMiddleware', |
||||
'django.contrib.sessions.middleware.SessionMiddleware', |
||||
'django.middleware.common.CommonMiddleware', |
||||
'django.middleware.csrf.CsrfViewMiddleware', |
||||
'django.contrib.auth.middleware.AuthenticationMiddleware', |
||||
'django.contrib.messages.middleware.MessageMiddleware', |
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware', |
||||
'wagtail.core.middleware.SiteMiddleware', |
||||
'wagtail.contrib.redirects.middleware.RedirectMiddleware', |
||||
|
||||
] |
||||
|
||||
# STATIC |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#static-files |
||||
STATIC_ROOT = var_dir('static') |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#static-url |
||||
STATIC_URL = os.path.join(APP_LOCATION, 'static/') |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#staticfiles-dirs |
||||
STATICFILES_DIRS = [ |
||||
root_dir('static'), |
||||
] |
||||
if os.path.isdir(local_dir('static')): |
||||
STATICFILES_DIRS.insert(0, local_dir('static')) |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/contrib/staticfiles/#staticfiles-finders |
||||
STATICFILES_FINDERS = [ |
||||
'django.contrib.staticfiles.finders.FileSystemFinder', |
||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
||||
] |
||||
|
||||
# MEDIA |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#media-root |
||||
MEDIA_ROOT = var_dir('media') |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#media-url |
||||
MEDIA_URL = os.path.join(APP_LOCATION, 'media/') |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#file-upload-directory-permissions |
||||
FILE_UPLOAD_DIRECTORY_PERMISSIONS = 0o755 |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#file-upload-permissions |
||||
FILE_UPLOAD_PERMISSIONS = 0o644 |
||||
|
||||
# TEMPLATES |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#templates |
||||
TEMPLATES = [ |
||||
{ |
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates', |
||||
'DIRS': [ |
||||
root_dir('templates'), |
||||
], |
||||
'OPTIONS': { |
||||
'debug': DEBUG, |
||||
'loaders': [ |
||||
'django.template.loaders.filesystem.Loader', |
||||
'django.template.loaders.app_directories.Loader', |
||||
], |
||||
'context_processors': [ |
||||
'django.template.context_processors.debug', |
||||
'django.template.context_processors.request', |
||||
'django.contrib.auth.context_processors.auth', |
||||
'django.template.context_processors.media', |
||||
'django.template.context_processors.static', |
||||
'django.template.context_processors.tz', |
||||
'django.contrib.messages.context_processors.messages', |
||||
], |
||||
}, |
||||
}, |
||||
] |
||||
if os.path.isdir(local_dir('templates')): |
||||
TEMPLATES[0]['DIRS'].insert(0, local_dir('templates')) |
||||
|
||||
# FIXTURES |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#fixture-dirs |
||||
FIXTURE_DIRS = ( |
||||
root_dir('fixtures'), |
||||
) |
||||
|
||||
# EMAIL |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/topics/email/#email-backends |
||||
# https://django-environ.readthedocs.io/en/stable/#supported-types |
||||
vars().update(env.email_url( |
||||
'DJANGO_EMAIL_URL', default='smtp://localhost:25')) |
||||
|
||||
DEFAULT_FROM_EMAIL = env('DEFAULT_FROM_EMAIL', default='webmaster@localhost') |
||||
# Use the same email address for error messages |
||||
SERVER_EMAIL = DEFAULT_FROM_EMAIL |
||||
|
||||
# ADMIN |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#admins |
||||
ADMINS = [ |
||||
("""Cliss XXI""", 'tech@cliss21.com'), |
||||
] |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#managers |
||||
MANAGERS = ADMINS |
||||
|
||||
# SESSIONS AND COOKIES |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#session-cookie-path |
||||
SESSION_COOKIE_PATH = APP_LOCATION |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#csrf-cookie-path |
||||
CSRF_COOKIE_PATH = APP_LOCATION |
||||
|
||||
# ------------------------------------------------------------------------------ |
||||
# APPLICATION AND 3RD PARTY LIBRARY SETTINGS |
||||
# ------------------------------------------------------------------------------ |
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
""" |
||||
Development settings. |
||||
|
||||
- use Console backend for emails sending by default |
||||
- add the django-debug-toolbar |
||||
""" |
||||
from .base import * # noqa |
||||
from .base import env |
||||
|
||||
# GENERAL |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#secret-key |
||||
SECRET_KEY = env('DJANGO_SECRET_KEY', default='CHANGEME!!!') |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#allowed-hosts |
||||
ALLOWED_HOSTS = env.list('DJANGO_ALLOWED_HOSTS', default=[ |
||||
'localhost', |
||||
'0.0.0.0', |
||||
'127.0.0.1', |
||||
]) |
||||
|
||||
# EMAIL |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/topics/email/#email-backends |
||||
# https://django-environ.readthedocs.io/en/stable/#supported-types |
||||
vars().update(env.email_url( |
||||
'DJANGO_EMAIL_URL', default='consolemail://')) |
||||
|
||||
# ------------------------------------------------------------------------------ |
||||
# APPLICATION AND 3RD PARTY LIBRARY SETTINGS |
||||
# ------------------------------------------------------------------------------ |
||||
|
||||
# DJANGO DEBUG TOOLBAR |
||||
# ------------------------------------------------------------------------------ |
||||
# https://django-debug-toolbar.readthedocs.io/en/stable/installation.html |
||||
MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware'] # noqa: F405 |
||||
INSTALLED_APPS += ['debug_toolbar'] # noqa: F405 |
||||
|
||||
INTERNAL_IPS = ['127.0.0.1'] |
||||
|
||||
DEBUG_TOOLBAR_CONFIG = { |
||||
'DISABLE_PANELS': [ |
||||
'debug_toolbar.panels.redirects.RedirectsPanel', |
||||
], |
||||
'SHOW_TEMPLATE_CONTEXT': True, |
||||
# Uncomment if jQuery is already loaded by your assets: |
||||
# 'JQUERY_URL': '', |
||||
} |
||||
|
||||
# DJANGO EXTENSIONS |
||||
# ------------------------------------------------------------------------------ |
||||
# https://django-extensions.readthedocs.io/en/stable/index.html |
||||
INSTALLED_APPS += ['django_extensions'] # noqa: F405 |
@ -0,0 +1,103 @@
@@ -0,0 +1,103 @@
|
||||
""" |
||||
Production settings. |
||||
|
||||
- validate the configuration |
||||
- disable debug mode |
||||
- load secret key from environment variables |
||||
- set other production configurations |
||||
""" |
||||
import os |
||||
|
||||
from django.core.exceptions import ImproperlyConfigured |
||||
|
||||
from .base import * # noqa |
||||
from .base import env, var_dir |
||||
|
||||
# CONFIGURATION VALIDATION |
||||
# ------------------------------------------------------------------------------ |
||||
# Ensure that the database configuration has been set |
||||
if not env('DJANGO_DATABASE_URL', default=None): |
||||
raise ImproperlyConfigured( |
||||
"No database configuration has been set, you should check " |
||||
"the value of your DATABASE_URL environment variable." |
||||
) |
||||
|
||||
# Ensure that the default email address has been set |
||||
if not env('DEFAULT_FROM_EMAIL', default=None): |
||||
raise ImproperlyConfigured( |
||||
"No default email address has been set, you should check " |
||||
"the value of your DEFAULT_FROM_EMAIL environment variable." |
||||
) |
||||
|
||||
# GENERAL |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#debug |
||||
DEBUG = False |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#secret-key |
||||
SECRET_KEY = env('DJANGO_SECRET_KEY') |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#allowed-hosts |
||||
ALLOWED_HOSTS = env.list('DJANGO_ALLOWED_HOSTS', default=[]) |
||||
|
||||
# TEMPLATES |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#templates |
||||
TEMPLATES[0]['OPTIONS']['debug'] = DEBUG # noqa F405 |
||||
TEMPLATES[0]['OPTIONS']['loaders'] = [ # noqa F405 |
||||
('django.template.loaders.cached.Loader', [ |
||||
'django.template.loaders.filesystem.Loader', |
||||
'django.template.loaders.app_directories.Loader', |
||||
]), |
||||
] |
||||
|
||||
# LOGGING |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/topics/logging/ |
||||
LOGGING = { |
||||
'version': 1, |
||||
'disable_existing_loggers': False, |
||||
'formatters': { |
||||
'verbose': { |
||||
'format': '%(asctime)s - %(levelname)s - %(module)s: %(message)s', |
||||
}, |
||||
}, |
||||
'handlers': { |
||||
'mail_admins': { |
||||
'level': 'ERROR', |
||||
'class': 'django.utils.log.AdminEmailHandler' |
||||
}, |
||||
'file': { |
||||
'level': 'DEBUG', |
||||
'class': 'logging.handlers.TimedRotatingFileHandler', |
||||
'filename': var_dir('log/test-wagtail.log'), |
||||
'formatter': 'verbose', |
||||
'when': 'midnight', |
||||
'interval': 1, |
||||
'backupCount': 30, |
||||
}, |
||||
}, |
||||
'loggers': { |
||||
'django': { |
||||
'level': 'WARNING', |
||||
'handlers': ['file'], |
||||
'propagate': True, |
||||
}, |
||||
'django.request': { |
||||
'level': 'WARNING', |
||||
'handlers': ['file', 'mail_admins'], |
||||
'propagate': True, |
||||
}, |
||||
'test-wagtail': { |
||||
'level': 'INFO', |
||||
'handlers': ['file', 'mail_admins'], |
||||
'propagate': True, |
||||
}, |
||||
}, |
||||
} |
||||
if not os.path.isdir(var_dir('log')): |
||||
os.mkdir(var_dir('log'), mode=0o750) |
||||
|
||||
# ------------------------------------------------------------------------------ |
||||
# APPLICATION AND 3RD PARTY LIBRARY SETTINGS |
||||
# ------------------------------------------------------------------------------ |
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
""" |
||||
With these settings, tests run faster. |
||||
""" |
||||
from .base import * # noqa |
||||
from .base import env |
||||
|
||||
# GENERAL |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#debug |
||||
DEBUG = False |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#secret-key |
||||
SECRET_KEY = env('DJANGO_SECRET_KEY', default='CHANGEME!!!') |
||||
|
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#test-runner |
||||
TEST_RUNNER = 'django.test.runner.DiscoverRunner' |
||||
|
||||
# CACHES |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#caches |
||||
CACHES = { |
||||
'default': { |
||||
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', |
||||
'LOCATION': '', |
||||
}, |
||||
} |
||||
|
||||
# PASSWORDS |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#password-hashers |
||||
PASSWORD_HASHERS = ['django.contrib.auth.hashers.MD5PasswordHasher'] |
||||
|
||||
# TEMPLATES |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#templates |
||||
TEMPLATES[0]['OPTIONS']['debug'] = DEBUG # noqa: F405 |
||||
TEMPLATES[0]['OPTIONS']['loaders'] = [ # noqa: F405 |
||||
('django.template.loaders.cached.Loader', [ |
||||
'django.template.loaders.filesystem.Loader', |
||||
'django.template.loaders.app_directories.Loader', |
||||
]), |
||||
] |
||||
|
||||
# EMAIL |
||||
# ------------------------------------------------------------------------------ |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#email-backend |
||||
EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend' |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#email-host |
||||
EMAIL_HOST = 'localhost' |
||||
# https://docs.djangoproject.com/en/stable/ref/settings/#email-port |
||||
EMAIL_PORT = 1025 |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
{% extends "base.html" %} |
||||
|
||||
{% block title %}Page introuvable{% endblock %} |
||||
|
||||
{% block content %} |
||||
<p>La page que vous demandez semble introuvable...</p> |
||||
{% endblock %} |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
{% extends "base.html" %} |
||||
|
||||
{% block title %}Erreur interne{% endblock %} |
||||
|
||||
{% block content %} |
||||
<p>Une erreur inattendue est survenue...</p> |
||||
{% endblock %} |
@ -0,0 +1,43 @@
@@ -0,0 +1,43 @@
|
||||
{% load staticfiles %}<!DOCTYPE html> |
||||
<html class="no-js" lang="fr"> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
||||
<title> |
||||
{% block title %}{% endblock %} |
||||
{% block title_suffix %}- test-wagtail{% endblock %} |
||||
</title> |
||||
|
||||
<meta name="description" content=""> |
||||
<meta name="keywords" content=""> |
||||
|
||||
{% block css %} |
||||
<link rel="stylesheet" href="{% static "css/app.css" %}"> |
||||
{% endblock %} |
||||
|
||||
{% block extra_head %}{% endblock %} |
||||
</head> |
||||
<body> |
||||
<div class="container"> |
||||
|
||||
{% if messages %} |
||||
{% for message in messages %} |
||||
<div class="callout{% if message.tags %} {{ message.tags }}{% endif %}">{{ message }}</div> |
||||
{% endfor %} |
||||
{% endif %} |
||||
|
||||
{% block content %} |
||||
<p>Utilisez ce modèle pour démarrer rapidement une nouvelle application.</p> |
||||
{% endblock %} |
||||
|
||||
</div><!-- .container --> |
||||
|
||||
{% block modal %}{% endblock %} |
||||
|
||||
{% block javascript %} |
||||
<script src="{% static "js/app.js" %}"></script> |
||||
{% endblock %} |
||||
</body> |
||||
</html> |
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
{% extends "base.html" %} |
||||
|
||||
{% block title %}Accueil{% endblock %} |
||||
|
||||
{% block content %} |
||||
<h1>Bienvenue !</h1> |
||||
<p>Cette page ne dira pas grand chose de plus, à vous de la personnaliser.</p> |
||||
{% endblock content %} |
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
from django.conf import settings |
||||
from django.contrib import admin |
||||
from django.urls import include, path |
||||
|
||||
from wagtail.core import urls as wagtail_urls |
||||
from wagtail.admin import urls as wagtailadmin_urls |
||||
from wagtail.documents import urls as wagtaildocs_urls |
||||
|
||||
|
||||
urlpatterns = [ |
||||
|
||||
path('django-admin/', admin.site.urls), |
||||
|
||||
# Wagtail's applications |
||||
path('admin/', include(wagtailadmin_urls)), |
||||
path('documents/', include(wagtaildocs_urls)), |
||||
|
||||
|
||||
# Local applications |
||||
# ... |
||||
] |
||||
|
||||
if settings.DEBUG: |
||||
from django.conf.urls.static import static |
||||
from django.views import defaults as default_views |
||||
|
||||
# This allows the error pages to be debugged during development, just visit |
||||
# these url in browser to see how these error pages look like. |
||||
urlpatterns += [ |
||||
path('400/', default_views.bad_request, |
||||
kwargs={'exception': Exception('Bad Request!')}), |
||||
path('403/', default_views.permission_denied, |
||||
kwargs={'exception': Exception('Permission Denied')}), |
||||
path('404/', default_views.page_not_found, |
||||
kwargs={'exception': Exception('Page not Found')}), |
||||
path('500/', default_views.server_error), |
||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) |
||||
|
||||
if 'debug_toolbar' in settings.INSTALLED_APPS: |
||||
import debug_toolbar |
||||
urlpatterns.insert(0, path('__debug__/', include(debug_toolbar.urls))) |
||||
|
||||
# Root application |
||||
urlpatterns += [ |
||||
|
||||
path('', include(wagtail_urls)), |
||||
|
||||
] |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
""" |
||||
WSGI config for test-wagtail project. |
||||
|
||||
This module contains the WSGI application used by Django's development server |
||||
and any production WSGI deployments. It should expose a module-level variable |
||||
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover |
||||
this application via the ``WSGI_APPLICATION`` setting. |
||||
""" |
||||
import os |
||||
|
||||
from django.core.wsgi import get_wsgi_application |
||||
|
||||
# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks |
||||
# if running multiple sites in the same mod_wsgi process. To fix this, use |
||||
# mod_wsgi daemon mode with each site in its own daemon process, or use |
||||
# os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings.production" |
||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', |
||||
'test-wagtail.settings.production') |
||||
|
||||
# This application object is used by any WSGI server configured to use this |
||||
# file. This includes Django's development server, if the WSGI_APPLICATION |
||||
# setting points here. |
||||
application = get_wsgi_application() |
Loading…
Reference in new issue