François Poulain 2018-10-04 11:32:55 +02:00 commité par François Poulain
révision 85ee829ea8
30 fichiers modifiés avec 1649 ajouts et 0 suppressions

36
.gitignore externe Normal file
Voir le fichier

@ -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/

8
CHANGELOG.md Normal file
Voir le fichier

@ -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

1
CONTRIBUTORS.txt Normal file
Voir le fichier

@ -0,0 +1 @@
This software is developped by Cliss XXI.

661
LICENSE Normal file

Fichier diff supprimé car celui-ci est trop grand Voir la Diff

104
Makefile Normal file
Voir le fichier

@ -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

98
README.md Normal file
Voir le fichier

@ -0,0 +1,98 @@
# test-wagtail
Une courte description du projet.
[![Built with Cookiecutter Django](https://img.shields.io/badge/built%20with-Cookiecutter%20Django-ff69b4.svg)](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).

37
config.env.example Normal file
Voir le fichier

@ -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=/

38
manage.py Executable file
Voir le fichier

@ -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)

3
requirements.txt Normal file
Voir le fichier

@ -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

5
requirements/base.txt Normal file
Voir le fichier

@ -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

Voir le fichier

@ -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

Voir le fichier

@ -0,0 +1,3 @@
-r base.txt
# PRECAUTION: avoid production dependencies that aren't in development.

13
setup.cfg Normal file
Voir le fichier

@ -0,0 +1,13 @@
[flake8]
exclude =
.git,
.tox,
venv,
*/migrations/*,
*/static/*,
# assets & compilation
assets,
build,
dist,
node_modules
max-line-length = 80

1
test-wagtail/__init__.py Normal file
Voir le fichier

@ -0,0 +1 @@
__version__ = '0.1.0'

Voir le fichier

@ -0,0 +1 @@
default_app_config = 'test-wagtail.base.apps.BaseConfig'

Voir le fichier

@ -0,0 +1,6 @@
from django.apps import AppConfig
class BaseConfig(AppConfig):
name = 'test-wagtail.base'
verbose_name = "Base"

Voir le fichier

@ -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'),
]

Voir le fichier

@ -0,0 +1 @@
from .base import * # noqa

Voir le fichier

@ -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
# ------------------------------------------------------------------------------

Voir le fichier

@ -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

Voir le fichier

@ -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
# ------------------------------------------------------------------------------

Voir le fichier

@ -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

Voir le fichier

Voir le fichier

Voir le fichier

@ -0,0 +1,7 @@
{% extends "base.html" %}
{% block title %}Page introuvable{% endblock %}
{% block content %}
<p>La page que vous demandez semble introuvable...</p>
{% endblock %}

Voir le fichier

@ -0,0 +1,7 @@
{% extends "base.html" %}
{% block title %}Erreur interne{% endblock %}
{% block content %}
<p>Une erreur inattendue est survenue...</p>
{% endblock %}

Voir le fichier

@ -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>

Voir le fichier

@ -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 %}

48
test-wagtail/urls.py Normal file
Voir le fichier

@ -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)),
]

23
test-wagtail/wsgi.py Normal file
Voir le fichier

@ -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()