Forum >> Programmazione Python >> Web e Reti >> Aiuto portale web Django

Pagina: 1

Ciao a tutti,

mi sto avvicinando al mondo Python, ed in particolar modo sto provando a realizzare un semplice portale web per la visualizzazione e ricerca dei compiti di ciascun ufficio della mia azienda. Ho già realizzato una prima versione in Java, ma mi interesserebbe evolvermi dal punto di vista tecnologico, approdando a Python e Django.

Ho seguito diversi corsi/tutorial online, ma considerate le peculiarità di Django, inizio ad avere difficoltà non appena mi discosto da quanto realizzato in tali tutorial.

Chiedo un vostro aiuto per capire come impostare l'applicazione, quante e quali app creare, e come organizzare i moduli per il DB.

Nel mio caso, avrei necessità di una home page che consenta di accedere a:

- Pagina di ricerca per ufficio
- Pagina di ricerca per "funzione"
- Pagina di help

Nella pagina di ricerca dove, una volta selezionato l'ufficio di appartenenza, vengono mostrati tutti i compiti cui deve adempiere. Per "funzione" intendo semplicemente un codice ed una descrizione. Situazione simile per la ricerca per "funzione", che deve invece farmi vedere l'ufficio che deve seguire tale adempimento.

Semplificando al minimo, lato DB avrei necessità soltanto di una tabella "FUNZIONI" ed una tabella "UFFICI", relazionate 1aN (1 ufficio può avere N funzioni, mentre 1 funzione è solo di un ufficio).

Come mi conviene progettare la soluzione? Se creo diverse app (una per home page, una per ricerca ufficio, una per ricerca funzione, ed una per help), sono costretto a duplicare tutti i contenuti, o sbaglio?

Inoltre, come faccio a creare dei modelli lato db che siano visibili da tutte le app?

Vi sarei grato se mi aiutaste nella progettazione di base, eventualmente anche indicandomi esempi online.

Grazie,
Francesco


--- Ultima modifica di francescovalle84 in data 2019-08-09 13:45:23 ---
Ciao caro, che idea avevi? Se fossi in te, farei un unico model con tutte le relazioni che ti servono e molto probabilmente anche una sola app. Ma anche se fossero più di una, cosa vuol dire che duplicare i contenuti? Credo che stai facendo confusione con gli endpoint, perché nessuno ti impedisce di utilizzare diversi url a diverse risorse, ma sempre all'interno della stessa app.

Per capire i tuoi dubbi prova a progettare la tua app con relativi model e url, anche su un pezzo di carta va bene, per capire se tutti i tuoi collegamenti funzionano.

Se vuoi discuterne insieme poi siamo qui.

Cya

Daniele aka Palmux said @ 2019-08-09 15:57:30:
Ciao caro, che idea avevi? Se fossi in te, farei un unico model con tutte le relazioni che ti servono e molto probabilmente anche una sola app. Ma anche se fossero più di una, cosa vuol dire che duplicare i contenuti? Credo che stai facendo confusione con gli endpoint, perché nessuno ti impedisce di utilizzare diversi url a diverse risorse, ma sempre all'interno della stessa app.

Per capire i tuoi dubbi prova a progettare la tua app con relativi model e url, anche su un pezzo di carta va bene, per capire se tutti i tuoi collegamenti funzionano.

Se vuoi discuterne insieme poi siamo qui.

Cya


Grazie mille!! :)
In effetti una singola app potrebbe essere una buona idea! Proverò ad iniziare così! Tra qualche giorno riporterò quanto fatto per vedere se sto procedendo nel modo corretto, e spero di avere ancora un parere.




Per "duplicare i contenuti" intendo dire che in tutti i tutorial che ho seguito, ciascuna app accede esclusivamente ai propri dati. Nel caso in cui ci siano dati "condivisi" tra più app, come ci si comporta? Si duplicano le classi model?




Grazie,

Francesco


--- Ultima modifica di francescovalle84 in data 2019-08-09 18:38:35 ---
francescovalle84 said @ 2019-08-09 18:38:27:
Per "duplicare i contenuti" intendo dire che in tutti i tutorial che ho seguito, ciascuna app accede esclusivamente ai propri dati. Nel caso in cui ci siano dati "condivisi" tra più app, come ci si comporta? Si duplicano le classi model?
Non sia mai.

In linea di massima (ci possono essere delle eccezioni) accedi così:

from <nome_app>.models import <nome_model>
Cya
Ciao,

alla fine ho creato una singola App, e di conseguenza, tutte le classi in un unico file "models.py":
from django.db import models


class Office(models.Model):
code = models.CharField(max_length=5, verbose_name='Codice')
name = models.CharField(max_length=255, verbose_name='Denominazione')
valid_from = models.DateField(verbose_name='Valido da')
valid_to = models.DateField(verbose_name='Valido a', blank=True, null=True)

def __str__(self):
if self.valid_to is not None:
return '%s - %s (Valido da %s a %s)' % (self.code, self.name, self.valid_from, self.valid_to)
return '%s - %s (Valido da %s ad oggi)' % (self.code, self.name, self.valid_from)

class Meta:
ordering = ['name']
verbose_name = 'Ufficio'
verbose_name_plural = 'Uffici'


# In relazione 1-N con Office
class Function(models.Model):
code = models.CharField(max_length=5, verbose_name='Codice')
value = models.CharField(max_length=2048, verbose_name='Valore')
office = models.ForeignKey(Office, on_delete=models.SET_NULL, verbose_name='Ufficio', blank=True, null=True)

def __str__(self):
if self.office is not None:
return '%s - %s (Associato a %s)' % (self.code, self.value, self.office.name)
return '%s - %s (Non associato ad alcun ufficio)' % (self.code, self.value)

class Meta:
ordering = ['code']
verbose_name = 'Funzione'
verbose_name_plural = 'Funzioni'

Ora avrei la necessità di tenere traccia di tutte le modifiche storiche, ad esempio verificare ad una specifica data, quali funzioni erano associate a ciascun ufficio.

Questo significa che dovrei aggiungere degli attributi alla relazione, ed effettuare "query" sulla data specificata.

Due dubbi...

1. Il modo più corretto di aggiungere attributi alla relazione è inserire tali attributi dal lato N della relazione 1-N? Nel mio caso alla classe Function?

2. Potrei creare la sezione che consente di fare questa ricerca all'interno della App di amministrazione? Se si, puoi indircarmi qualche guida?

Grazie,
Francesco


--- Ultima modifica di francescovalle84 in data 2019-08-19 18:03:37 ---


Pagina: 1



Esegui il login per scrivere una risposta.