wiki:UI

Version 1 (modified by fero, 3 years ago) (diff)

Avviata la pagina di documentazione UI per sviluppatori

La logica dell'interfaccia web è presa da SANET http://sanet.sourceforge.net by Laboratori Guglielmo Marconi.

L'interfaccia si basa su una struttura a schede e a blocchi. È versatile e personalizzabile per utente.

La struttura di default è definita nel parametro RESOURCE_PAGE_BLOCKS

Dall'URL alla vista

Passi principali:

  • si accede ad un URL che è _sempre_ riferito ad una risorsa. Le risorse principali le trovate nel dizionario types_model_d in des/models.py
  • la risorsa si identifica facilmente dato che nell'url sono sempre presenti i parametri <resource_type> e <resource_id>
  • interviene il Middleware (file middleware.py) https://docs.djangoproject.com/en/dev/topics/http/middleware/ che SETTA un attributo request.resource all'istanza cui la pagina si riferisce. L'oggetto request è quello che arriva alle viste https://docs.djangoproject.com/en/1.3/topics/http/views/ (v. parametro request)
  • Poi viene chiamata la vista opportuna a seconda degli url specificati praticamente in urls.py , rest/urls.py, rest/views/urls.py

Come si crea la pagina

  • Di base prima si scarica tutto l'html
  • Poi viene richiesta via AJAX la configurazione (default_settings.RESOURCE_PAGE_BLOCKS)
  • Poi vengono prodotte le varie sezioni ed eventuali blocchi
  • Ogni blocco richiama il proprio contenuto e dispone di una parte python, una rappresentazione xml e una parte javascript. La parte js ancora non l'ho vista ma per la parte python c'è una API rappresentata dalla classe AbstractBlock che è in rest/views/blocks/__init__.py
  • Bisognerebbe creare una API per BlockWithList? un blocco che include una lista di elementi. Intanto vi ho lasciato per esercizio di provare ad implementare i blocchi gas_list e supplier_list

NOTA: nella API dei blocchi secondo me tutte le funzioni che si basano su resource_type e resource_id dovrebbero essere sostituite dal parametro resource

NOTA2: per ora la classe URN in lib/urns.py non è da usare che aggiunge confusione. Vedremo poi se reintegrarla.