Il mio ultimo progettino era un CMS per un sito di news. Doveva essere un semplice codice d’esempio, poi ci ho preso un po’ la mano e in un’oretta e mezza ho sviluppato un piccolo CMS.
Ovviamente non è né lo stato dell’arte né un prodotto che si può rilasciare per un uso professionale: è un esperimento, ma vorrei parlarvene lo stesso nella speranza che possa portare qualcuno a sviluppare un bel prodotto e magari una passione per il settore! 🙂
Il prodotto
Il prodotto che ho usato è Flask, che permette di creare pagine web in Python.
So che la soluzione tipicamente adoperata sul web è il PHP e che per il Python tipicamente si usa Django, ma Flask è:
- Dannatamente leggero
- Dannatamente semplice
Si può scrivere, per capirci, una pagina in un dieci righe di codice.
Anche il mio CMS, ad esempio, non supera le 100 righe. Mica male eh?
Inoltre supporta la possibilità di definire facilmente dove finisce una pagina. Potete dirgli in sostanza:
Tutte le pagine nella sottodirectory “news” con un ID richiamano alla funzione X.
Le soluzioni adottate
Template
Il template, fatto con Bootstrap, è dentro il codice. C’è una stringa che ha il codice HTML che viene poi modificato dalla funzione.
Ok, so che esistono funzioni come render_template, flask_bootstrap e che usare i segnaposto è brutto, ma funziona. Era un codice di test, ricordate? Non ho badato molto alla correttezza del codice originale, e ora non ho voglia di cambiare ciò che funziona.
KISS.
Database
E le notizie come sono salvate?
In origine erano anch’esse inserite nel codice del programma.
Alla terza news veniva un blob schifoso e ho deciso di mettere tutto esterno.
Ho usato un file di testo che contiene le news in un formato:
Id\titolo|notizia|data
I più sgamati avranno capito che uso un dizionario, uno split e un altro split.
In pratica con un for uso la barra inversa per creare un dizionario dove ad ogni ID sia associata la pappardella titolo|notizia|data.
Usare un database? Sì, si potrebbe fare. Ma era una cosa assolutamente di test, dunque ho preferito questa soluzione su file.
Immagini
Il sistema supportava anche le immagini, poi ho preferito inserirle direttamente nel codice della notizia per dare più libertà di posizionamento e, soprattutto, la possibilità di mettere più immagini per articolo.
Elaborazione
Ogni qual volta qualcuno chieda un url del tipo
/news/<id>
Si attiva la procedura di lettura news.
Per prima cosa si ricarica il database, ciò permette dunque di inserire una news o di modificarne una senza fermare tutto. Quando si dice il progresso… 😀
Il programma cerca nel dizionario la news con l’ID richiesto.
Poi fa effettivamente lo split, integra titolo, news e data nel template e dà il return, che nella logica del software corrisponde alla pagina che apparirà.
Home page
E se si apre l’home page? All’inizio dava errore, dunque ho cambiato questo comportamento.
Quando si apre la home si usa il medesimo template delle news, e ciò fa risparmiare codice prezioso.
Solo che il testo della news è, questa volta, costituito da un folle insieme di for e if che creano un’anteprima degli ultimi tre articoli, con link per continuare a leggerli.
Sidebar
In origine lo spazio della sidebar era occupato dalle foto: è una delle ragioni della rimozione…
Ora c’è una sidebar con contenuto statico e dinamico.
Il contenuto statico è semplicemente un insieme di link social, nulla di speciale.
Quello dinamico, invece, mostra l’ultima news pubblicata sul sito.
Da fare
Ovviamente mancano varie cose a questo progetto. Anche se non è inteso per l’uso vorrei comunque renderlo decente, e i prossimi punti sono:
- Sistema di modifica online delle news
- Possibilità di usare delle “immagini in evidenza”
- Miglioramento delle anteprima con eliminazione dei tag HTML della pagina originale
- Supporto ai database
- Integrazione con Telegram
Altre idee? 🙂
Qualche screen
Ecco qualche screen. Alcune sono notizie assurde giusto per aver contenuti, non avevo il Lorem ipsum!
Pingback: Come sono diventato famoso grazie a Stefano Parisi e Wikipedia – ComputerBlog