Vai al contenuto

Django | Installazione

Prima di Django

Scegliere i nomi per il progetto in Django

Ricoda di pensare prima al nome del progetto e dei componenti. Non inserire nomi che possono andare in conflitto con lo stesso Django, come django e test.

Dove mettere il codice?

Non è una buona idea inserire il codice Python nella root del tuo server web, perché rischi la possibilità che le persone possano visualizzare il tuo codice sul web. Non va bene per la sicurezza. Metti il ​​tuo codice in una directory al di fuori della root del documento, come /home/mycod

Avviare il progetto

Iniziamo nel creare un progetto Django

django-admin startproject mysite

Mappa del progetto iniziale

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • la cartella iniziale mysite/ ingloba tutto il progetto, il suo nome non va ad interferire con Django è può essere rinominata anche successivamente.
  • manage.py ti consente di interagire con il progetto Django in vari modi .

Avviamo il server

entriamo nella cartella di progetto e avviamo il progetto

cd mysite
python manage.py runserver

La shell ci ritornerà questo messaggio:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

May 21, 2022 - 15:50:53
Django version 4.0, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Se andiamo all’indirizzo http://127.0.0.1:8000/ che ci indica (è un indirizzo locale) vedremo la finestra di Welcome dedicata a Django, in alternativa il progetto non è stato creato correttamente ed avremo una pagina di errore.

Se vogliamo cambiare porta possiamo specificarla nel comando di apertura server:

python manage.py runserver 8080

Il server si riaggiorna automaticamente durante la programmazione e non serve riavviarlo o aggiornare la pagina.

Creare un’app di votazioni

Applicazione vs Progetto in Django

L’applicazione in un progetto Django ha una specifica attività, mentre un progetto è un contenitore di configurazioni. Possiamo avere più app in un progetto ma non più progetti collegati all’app.

Creare l’app

python manage.py startapp polls

Ora è stata aggiunta una cartella al nostro pack con questa struttura:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

Scrivere la prima view

Nel file polls/views.py scrivere:

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

Ora per richiamare la views, dobbiamo aggiungere il file urls.py all’interno della cartella polls.

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]
Il passo successivo è puntare l'URL di configurazione al modulo polls.urls nel file della cartella di progetto mysite/urls.py. Aggiungeremo all'importazione django.ulrs anche il modulo include e aggiorniamo la lista degli urlpatterns con il nuovo urls.
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

Appena avrete inserito l’app la Wecome page automatica di Django non sarà più visibile ma dovrete andare all’indirizzo appena aggiunto http://localhost:8000/polls/

Setup di Django

Apri il file mysite/settings.py e potresti dover modificare, essendo in italia, le seguenti voci:

LANGUAGE_CODE = 'it-IT'

TIME_ZONE = 'Europe/Rome'

Sucessivamente dobbiamo fare una migrazione di queste modifiche, con la voce:

python manage.py migrate

Creazione di modelli Django

Un modello è l’unica e definitiva fonte di informazioni sui tuoi dati. Contiene i campi e i comportamenti essenziali dei dati che stai archiviando. Django segue il principio DRY. L’obiettivo è definire il tuo modello di dati in un unico posto e ricavarne automaticamente le cose.

Ciò include le migrazioni: a differenza di Ruby On Rails, ad esempio, le migrazioni sono interamente derivate dal file dei modelli e sono essenzialmente una cronologia che Django può scorrere per aggiornare lo schema del database in modo che corrisponda ai modelli correnti.

Struttura dei nostri modelli

Nella nostra app per sondaggi creeremo due modelli: Domanda e Scelta. Una domanda ha una domanda e una data di pubblicazione. Una Scelta ha due campi: il testo della scelta e un conteggio dei voti. Ogni Scelta è associata a una Domanda.

Questi concetti sono rappresentati dalle classi Python. Modifica il file polls/models.py in modo che assomigli a questo:

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Attivare i moduli

Le app in Django sono “estendibile” e possono essere inserite in qualsiasi progetto Django.

Per includere l’app nel nostro progetto, dobbiamo aggiungere un riferimento alla sua classe di configurazione nell’impostazione INSTALLED_APPS. La classe PollsConfig si trova nel file polls/apps.py, quindi il suo percorso punteggiato è “polls.apps.PollsConfig“. Modifica il file mysite/settings.py e aggiungi quel percorso punteggiato all’impostazione INSTALLED_APPS.

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Ora Django saprà che deve includere l’app polls. Facciamo partire il comando:

python manage.py makemigrations polls

La shell ci risponderà in questo modo:

Migrations for 'polls':
  polls/migrations/0001_initial.py
    - Create model Question
    - Create model Choice

Ora vediamo quale SQL verrebbe eseguito dalla migrazione. Il comando sqlmigrate prende i nomi di migrazione e restituisce il loro SQL:

python manage.py sqlmigrate polls 0001

La risposta sarà:

BEGIN;
--
-- Create model Question
--
CREATE TABLE "polls_question" (
    "id" serial NOT NULL PRIMARY KEY,
    "question_text" varchar(200) NOT NULL,
    "pub_date" timestamp with time zone NOT NULL
);
--
-- Create model Choice
--
CREATE TABLE "polls_choice" (
    "id" serial NOT NULL PRIMARY KEY,
    "choice_text" varchar(200) NOT NULL,
    "votes" integer NOT NULL,
    "question_id" integer NOT NULL
);
ALTER TABLE "polls_choice"
  ADD CONSTRAINT "polls_choice_question_id_c5b4b260_fk_polls_question_id"
    FOREIGN KEY ("question_id")
    REFERENCES "polls_question" ("id")
    DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id");

COMMIT;

Ora eseguiamo una nuova migrazione:

python manage.py migrate

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *