Notez ce qu'il faut faire si vous arrêtez de lire les fichiers CSS et image après avoir créé une application Django conformément au didacticiel et l'avoir déployée dans un environnement de production.
Cette diapositive est facile à comprendre, il est donc préférable de la lire https://tell-k.github.io/djangocongressjp2019/#43
Django gère les fichiers statiques différemment pendant le développement et en production. Pour changer ceci est DEBUG = True / False dans setting.py.
Comme django est conçu pour être développé en le divisant en dossiers pour chaque application, les fichiers CSS et image, qui sont des fichiers statiques, sont également placés dans le dossier de l'application. Par conséquent, alors que DEBUG = True, ce qui signifie en cours de développement, tous les dossiers nommés / static / sous le dossier spécifié par STATIC_URL et STATICFILES_DIRS écrits dans setting.py sont gérés par Alias appelé / static /.
Par exemple, si vous avez un fichier comme project / app1 / static / base.css Il le traite comme s'il s'agissait de http://hoge.com/static/base.css.
Si vous utilisez cette fonction dans l'environnement de production, le processus principal sera inutilement surchargé et cela peut entraîner des vulnérabilités, vous devez donc désactiver cette fonction dans l'environnement de production. Si vous déployez une application Django avec Apache2 etc. pour forcer cela, seul l'exemple d'écran sera affiché à moins que DEBUG = False.
Lorsque DEBUG = True, Django a fourni un fichier statique avec Alias / static /, mais lorsque DEBUG = False, il ne sera pas fourni, donc dans l'exemple précédent, http://hoge.com/static/ Cela signifie que base.css n'existe pas. Si vous fournissez ceci avec Apache etc., vous pouvez obtenir la même opération que pendant le développement.
Collectez les fichiers statiques en un seul endroit avec python manage.py collectstatic et écrivez l'emplacement collecté dans apahce2.conf afin qu'Apache2 le fournisse en tant que / static /. C'est la même chose que le Tutoriel Django Girls .
Créez un dossier appelé statique directement sous le projet comme indiqué ci-dessous et récupérez-le.
/home/xxxx/django/proj1/
proj1
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── myvenv
│ └── ...
├── static Où collecter les fichiers statiques
│ ├── hoge.jpg
│ └── base.css
└── requirements.txt
Spécifie où collecter les fichiers statiques (STATIC_ROOT). Dans ce qui suit, / home / xxxx / django / proj1 / static / sera STATIC_ROOT.
proj1/mysite/setting.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Lorsque vous exécutez la commande collectstatics, les fichiers statiques sont collectés dans le PATH de STATIC_ROOT.
terminal
cd /home/xxxx/django/proj1
python manage.py collectstatics
Je veux traiter /home/xxxx/django/proj1/static/base.css comme http://hoge.com/static/base.css, alors ajoutez Alias au dossier et donnez la permission (Exiger tout accordé).
/etc/apache2/apache2.conf
Alias /static/ /home/xxxx/django/proj1/static/
<Directory /home/xxxx/django/proj1/static>
Require all granted
</Directory>
J'ai changé les paramètres, alors redémarrez Apache2.
terminal
sudo /etc/init.d/apache2 restart
Puisque collectstatics copie simplement le fichier, vous pouvez vérifier l'opération en vérifiant si le fichier est copié dans STATIC_ROOT.
Si vous n'avez pas réussi à enregistrer Apache2, vous devriez voir Django wsgi Apache2: 'AH01630: client refusé par la configuration du serveur' dans votre journal des erreurs Apache2. Assurez-vous que le contenu de apache2.conf est le même que STATIC_ROOT.
Si vous conservez les paramètres par défaut, vous pouvez voir le journal des erreurs Apache2 ci-dessous.
terminal
tail -f /var/log/apache2/error.log
Recommended Posts