Dans tous les cas, veuillez vous référer aux liens suivants indispensables pour démarrer:
Rappel: Word-Wide-Web (www) inventé par le CERN en 1989
Résumé:
Django s'inspire du modèle MVC (disons plutot MVT).
La structure du framework sépare les données ( models ) qui sont séparées des traitements ( controller ) qui sont eux-mêmes séparés de la vue ( view / template ).
Environnement développement Projet Application
Les projets sont organisés suivant une hiérarchie de répertoires et de fichiers organisés en arbre.
Installation des librairies à partir des dépôts ou des sources
.
└── demo
├── demo
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
.
└── demo
├── boutique
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── demo
...
└── manage.py
INSTALLED_APPS = [
...
'boutique',
]
from boutique import views
urlpatterns = [
...
path('', 'views.home', name='home'),
[
def home(request):
return render(request, 'boutique/home.html')
class Article(models.Model):
name = models.CharField("Name", max_length=200, null=True, blank=False)
#description = models.TextField("Description", null=True, blank=True)
(.venv) $> python manage.py makemigrations
(.venv) $> python manage.py migrate
from boutique import models
admin.site.register(models.Article)
from django import forms
from boutique import models
class ArticleForm(forms.ModelForm):
class Meta:
model = models.Article
fields = ['name', 'description', ]
urlpatterns = [
...
path('article/', 'views.article', name='article'),
]
...
from boutique.forms import ArticleForm
def article(request):
formulaire = ArticleForm()
return render(request, 'boutique/article.html', context={'formulaire': ArticleForm()})
{{ formulaire.as_p }}
WSGI ASGI supervisor nginx daphne gunicorn
#> apt -y install build-essential git wget curl unzip python3-venv python3-pip
#> apt -y install libz-dev libjpeg-dev libfreetype6-dev python-dev
#> apt -y install supervisor nginx redis openssl libnss3-tools ssl-cert
#> apt -y install certbot python3-certbot-nginx
#> apt -y install iptables fail2ban
#> apt -y install sqlite3
#> openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
#> adduser shop
#> adduser shop www-data (ajouter shop au groupe de nginx)
Copier par ftp ou git le projet derrière /home/shop
#> su - shop
On se retrouve donc en donc /home/shop
[program:shop]
directory = /home/shop
command=/home/shop/.venv/bin/gunicorn
--chdir /home/shop/demo
--bind 127.0.0.1:8000
--user shop
--group www-data
--log-level error
demo.wsgi:application
user=root
stopasgroup=true
stopsignal=SIGINT
autostart=true
autorestart=true
redirect_stderr=true
redirect_stdout=true
#> supervisorctl reread #> supervisorct update
#> supervisorct restart shop
# virtualhost
server {
if ($host = shop.domain.com) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80;
server_name shop.domain.comg;
return https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name shop.domain.com;
set $base_path /home/shop;
keepalive_timeout 5;
client_max_body_size 4G;
access_log /var/log/nginx/shop.domain.com-access.log;
error_log /var/log/nginx/shop.domain.com-error.log;
ssl_certificate /etc/letsencrypt/live/shop.domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/shop.domain.com/privkey.pem;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
set $root_path $base_path/demo;
root $root_path;
location /static/ {
alias $root_path/staticfiles/;
}
location /media/ {
alias $root_path/media/;
}
location /favicon.ico {
alias $root_path/staticfiles/img/logo.png;
}
location /robots.txt {
alias $root_path/staticfiles/robots.txt;
}
location / {
include proxy_params;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:8000;
}
}
#> systemctl restart nginx
INSTALLED_APPS = [
'daphne',
...
]
[program:demo]
directory = /home/shop
command=/home/shop/.venv/bin/daphne
--bind 127.0.0.1
--port 8000
--access-log -
--proxy-headers
demo.asgi:application
user=root
stopasgroup=true
stopsignal=SIGINT
autostart=true
autorestart=true
redirect_stderr=true
redirect_stdout=true
Application django CMS visioconférence Blog