DJANGO BIGINO 18-08-2023
- Installare Python scaricarlo da Browser
- Installare Django scaricarlo da Browser
- Installare Anaconda scaricarlo da Browser
.conda activate portfolio
.pip install django
- Cd porfolio
- django-admin startproject personal_portfolio (crea progetto)
- cd personal_portfolio (entrare nella cartella dove c'è manage.py e lanciare runserver)
- Python manage.py runserver
- python manage.py startapp hello_word (crea app)
- python manage.py makemigrations (creare database e tabelle)
- python manage.py migrate (crea collegamento database in admin)
- Nel file settings.py aggiungere Import os (serve per interagire col sistema operativo WINDOWS etc.)
.Nella classe INSTALLED_APPS aggiungere nome App es: "hello_word",
.Nella sezione sotto mettere la cartella static dove metteremo immagini etc STATIC_URL="static/"
Static files (CSS, JavaScript, Images)
# nel file setting.py aggiungere queste righe
STATIC_URL = '/static/'
STATIC_ROOT = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
.Nella sezione Path aggiungere il path della cartella media
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
- Aprire admin.py e inserire il codice per visualizzare il database
from django.contrib import admin
from .models import Document
from .models import Author, Category, Journal
admin.site.register(Document)
admin.site.register(Author)
admin.site.register(Category)
admin.site.register(Journal)
- python manage.py collectstatic (collega la cartella STATIC ALL ROOT)
############################# VIEW esempio di passaggio valori ##################################
from . import models
from django.shortcuts import render, redirect
def uploadFile(request):
if request.method == "POST":
# Fetching the form data
fileTitle = request.POST["fileTitle"]
uploadedFile = request.FILES["uploadedFile"]
# Saving the information in the database
document = models.Document(
title = fileTitle,
uploadedFile = uploadedFile
)
document.save()
documents = models.Document.objects.all()
return render(request, "Core/upload-file.html", context = { # ritorna un dizionario
"files": documents
})
def index(request): # CODICE INSEGNANTE
message = ''
if request.method == 'POST':
f_name = request.POST['f_name']
email = request.POST['email']
message = request.POST['message']
#return redirect("Core/index.html")
message = message + email + f_name
return render(request,"Core/index.html",{'sum': message}) # ritorna una stringa di valori
############################# DATABASE ##################################
------RELAZIONE MOLTI A MOLTI----- provato funziona
ricordarsi che bisogna registrare le tabelle nell ADMIN.PY
from django.db import models
class Publication(models.Model):
title = models.CharField(max_length=30)
class Meta:
ordering = ['title']
def __str__(self):
return self.title
class Article(models.Model):
headline = models.CharField(max_length=100)
descrizione = models.CharField(max_length=100)
publications = models.ManyToManyField(Publication)
class Meta:
ordering = ['headline']
def __str__(self):
return self.headline
------RELAZIONE MOLTI A UNO----- provato funziona ----- provato funziona ---- esercizio dottori
*****Urls.py**************
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path("", views.save_data),
]
*****Models.py**************
from django.db import models
#from countries.moodels import Country
# Create your models here.
class regioni(models.Model):
descrizione_regione= models.CharField(max_length=60)
def __str__(self):
return self.descrizione_regione
*****View.py**************
from django.shortcuts import render,redirect
from .models import regioni, comuni, dottori
from django.http import HttpResponseRedirect
# Create your views here.
def save_data(request):
if request.method == 'POST':
field1_value = request.POST['descrizione_regione']
# Create an instance of your model and save it to the database
regioni.objects.create(descrizione_regione=field1_value) # crea un record nuovo con il dato del form
# Redirect to a success page or another view
return HttpResponseRedirect(request.path_info) # ritorna alla pagina da cui è partita l'operazione
#return redirect('input')
return render(request, 'index.html')
def save_comuni(request):
if request.method == 'POST':
field1_value = request.POST['descrizione_comuni']
# Create an instance of your model and save it to the database
comuni.objects.create(descrizione_comune=field1_value)
# Redirect to a success page or another view
return HttpResponseRedirect(request.path_info)
#return redirect('input')
return render(request, 'comuni.html')
def save_dottori(request):
if request.method == 'POST':
field1_value = request.POST['descrizione_dottore']
# Create an instance of your model and save it to the database
dottori.objects.create(descrizione_dottori=field1_value)
field2_value = request.POST['name']
dottori.objects.create(name=field2_value)
field3_value = request.POST['country']
dottori.objects.create(country=field3_value)
field4_value = request.POST['telefono']
dottori.objects.create(telefono=field4_value)
# Redirect to a success page or another view
return HttpResponseRedirect(request.path_info)
#return redirect('input')
return render(request, 'dottori.html')
------RELAZIONE MOLTI A UNO ----- provato funziona ---- esercizio regioni combo dinamica HTMX
from django.db import models
class Country(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class City(models.Model):
name = models.CharField(max_length=50)
country = models.ForeignKey(Country, on_delete=models.CASCADE)
def __str__(self):
return self.name
class cantine(models.Model):
name = models.CharField(max_length=100)
descrizione_cantine = models.CharField(max_length=500)
telefono = models.IntegerField()
comune=models.ForeignKey(City,on_delete = models.CASCADE)
# country = models.ForeignKey(Country,on_delete=models.CASCADE)
def __str__(self):
return self.name
############# VIEW COLLLEGATA AL MODELLO QUI SOPRA ###########
from django.shortcuts import render
from .forms import LocationForm
from .models import City
def index(request):
if request.method == "POST":
form = LocationForm(request.POST)
if form.is_valid():
print(form.cleaned_data["country"])
print(form.cleaned_data["city"])
else:
print(form.errors)
else:
form = LocationForm()
return render(request, 'index.html', {"form": form})
def load_cities(request):
country_id = request.GET.get("country")
cities = City.objects.filter(country_id=country_id)
############# FORM COLLLEGATA AL MODELLO QUI SOPRA ###########
from django import forms
from .models import Country, City
class LocationForm(forms.Form):
country = forms.ModelChoiceField(queryset=Country.objects.all(),
widget=forms.Select(attrs={"hx-get": "load_cities/", "hx-target": "#id_city"}))
city = forms.ModelChoiceField(queryset=City.objects.none())
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if "country" in self.data:
country_id = int(self.data.get("country"))
self.fields["city"].queryset = City.objects.filter(country_id=country_id)
############# fine ###########
------RELAZIONE MOLTI A UNO ----- provato funziona ---- esercizio con form con filtri
*****Urls.py**************
from . import views
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
app_name = "Core1"
urlpatterns = [
path("", views.uploadFile, name = "uploadFile"),
path('lista', views.index, name = 'index'),
path('bootstrap', views.BootstrapFilterView, name = 'bootstrap_form'),
]
if settings.DEBUG:
urlpatterns += static(
settings.MEDIA_URL,
document_root = settings.MEDIA_ROOT
)
*****Models.py**************
from django.db import models
class Student(models.Model):
title1 = models.CharField(max_length=120)
publish_date1 = models.DateTimeField()
views1 = models.IntegerField(default=0)
reviewed1 = models.BooleanField(default=False)
def __str__(self):
return self.title1
class Document(models.Model):
title = models.CharField(max_length = 200)
uploadedFile = models.FileField(upload_to = "Uploaded Files/")
dateTimeOfUpload = models.DateTimeField(auto_now = True)
def __str__(self):
return self.title
# Create your models here.
class Author(models.Model):
name = models.CharField(max_length=30)
def __str__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return self.name
class Journal(models.Model):
title = models.CharField(max_length=120)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
categories = models.ManyToManyField(Category)
publish_date = models.DateTimeField()
views = models.IntegerField(default=0)
reviewed = models.BooleanField(default=False)
def __str__(self):
return self.title
############# VIEW COLLLEGATA AL MODELLO QUI SOPRA ###########
*****View.py**************
from django.http import JsonResponse
from time import sleep
from django.db.models import Q, Count
from django.shortcuts import render, get_object_or_404
from . import models
from .models import Journal, Category
def is_valid_queryparam(param):
return param != '' and param is not None
def uploadFile(request):
if request.method == "POST":
# Fetching the form data
fileTitle = request.POST["fileTitle"]
uploadedFile = request.FILES["uploadedFile"]
# Saving the information in the database
document = models.Document(
title = fileTitle,
uploadedFile = uploadedFile
)
document.save()
documents = models.Document.objects.all()
return render(request, "Core/upload-file.html", context = {
"files": documents
})
def index(request):
a = 15
b = 10
return render(request,"Core/index.html",{'sum': a,'sub': b})
def BootstrapFilterView(request):
qs = Journal.objects.all()
#categories= Category.objects.all() SELEZIONA TUTTI I RECORD
#categories= Category.objects.filter(name__icontains="Lombardia").filter(name__icontains="Toscana") per il filtro AND
#categories= Category.objects.filter(Q(name__icontains="Lombardia") | Q(name__icontains="Toscana")) per il filtro OR
#categories= Category.objects.filter(Q(name__icontains="Lombardia") & Q(name__icontains="Lombardia")) per il filtro AND
categories= Category.objects.filter(Q(name__icontains="Lombardia") | Q(name__icontains="Toscana"))
title_contains_query = request.GET.get('title_contains')
title_or_author_query = request.GET.get('title_or_author')
id_exact_query = request.GET.get('id_exact')
category = request.GET.get('category')
if is_valid_queryparam(title_contains_query):
qs = qs.filter(title__icontains=title_contains_query)
elif is_valid_queryparam(id_exact_query):
qs = qs.filter(id=id_exact_query)
elif is_valid_queryparam(title_or_author_query):
qs = qs.filter(Q(title__icontains=title_or_author_query)
| Q(author__name__icontains=title_or_author_query)
).distinct()
if is_valid_queryparam(category) and category != 'Choose...':
qs = qs.filter(categories__name=category)
context = {
'queryset': qs,
'categories': categories,
}
return render(request, "Core/bootstrap_form.html", context)
############# FINE ###############################