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