Django
Django é un framework in Python con l’obiettivo di creare un’applicazione in tempi relativamente brevi.
É modulare, quindi aggiungere e rimuovere funzionalitá é veramente semplice.
Start a new project
Let’s look at what startproject
created:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
These files are:
- The outer
mysite/
root directory is a container for your project. manage.py
: A command-line utility that lets you interact with this Django project in various ways. You can read all the details aboutmanage.py
in django-admin and manage.py.- The inner
mysite/
directory is the actual Python package for your project. Its name is the Python package name you’ll need to use to import anything inside it (e.g.mysite.urls
). mysite/__init__.py
: An empty file that tells Python that this directory should be considered a Python package. If you’re a Python beginner, read more about packages in the official Python docs.mysite/settings.py
: Settings/configuration for this Django project. Django settings will tell you all about how settings work.mysite/urls.py
: The URL declarations for this Django project; a “table of contents” of your Django-powered site. You can read more about URLs in URL dispatcher.mysite/asgi.py
: An entry-point for ASGI-compatible web servers to serve your project. See How to deploy with ASGI for more details.mysite/wsgi.py
: An entry-point for WSGI-compatible web servers to serve your project. See How to deploy with WSGI for more details.
Far partire il server
python manage.py runserver server:porta
Ogni volta bisogna creare un app, poiché all’interno di un progetto possono esserci più app.
python manage.py startapp nomeapp
Dentro app:
- nelle view definisci cosa deve ritornare il server
- si crea un file chiamato urls.py che è il router
Dentro invece la cartella del progetto si definisce urls.py (non devo crearlo) che utilizza l’app di prima.
Bisogna poi:
- configurare le impostazioni del db su
progetto/settings.py
- container Docker con postgres installato e funzionante
- questo è un comodo Dockerfile:
version: '3.8'
services:
db:
image: postgres:14.1-alpine
restart: always
environment:
- POSTGRES_DB=.
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=docker
ports:
- '5432:5432'
volumes:
- db:/var/lib/postgresql/data
volumes:
db:
driver: local
Migrazioni
Ogni volta che si effettua un cambiamento allo schema del db bisogna rifare le migrazioni.
Le migrazioni sono come Django traduce le app installate in tabelle del database.
Quindi, prima si fanno le migrazioni dell’app creata:
python manage.py makemigrations polls
e poi
python manage.py migrate
Vedere SQL eseguito e controllare migrazioni
python manage.py sqlmigrate nomeapp numero
Controllare:
python manage.py check
Modelli
I modelli servono per definire a tutti gli effetti le entità del database.
Vanno definit all’interno di models.py
, si usa un approccio a classi e vanno usati campi specifici di Django.
Un piccolo esempio:
Quasi sempre va definito il metodo __str__
altrimenti in fase di debug ci ritroviamo una rappresentazione inutile.
Superadmin
Creating an admin user
First we’ll need to create a user who can login to the admin site. Run the following command:
$ python manage.py createsuperuser
Enter your desired username and press enter.
Username: admin
You will then be prompted for your desired email address:
Email address: admin@example.com
The final step is to enter your password. You will be asked to enter your password twice, the second time as a confirmation of the first.
Password: **********
Password (again): *********
Superuser created successfully.
Ok, ma l’app non c’è.
Devo registrare che esiste nella parte admin.py
di nomeapp, quindi vado lì:
Runnare i test
python manage.py test
Sono contenuto all’interno del file tests.py o al limite in ogni sottocartella.
FAQ
-
Mentre si definisce un modello, qual è la differenza tra
null=True
eblank=True
?null=True
: nel database puo avere campo null, ma non in un form di inserimentoblank=True
: lo marca come non obbligatorio, ad esempio in un form
-
Come effettuo un aggiornamento di un’applicazione Django? Come faccio ad aggiornare un’applicazione Django paleolitico al giorno d’oggi?
- nel progetto, installa con pip
django-upgrade
e runnagit ls-files -- '*.py' | xargs django-upgrade --target-version 4.2
- dovrai comunque metterci le mani, in quanto non riuscirà a fare tutto il lavoro per te
- nel progetto, installa con pip