Forum >> Principianti >> Vorrei scrivere una WEB-UI

Pagina: 1

Ciao al forum.


Sono tornato, ma spero di non essere inopportuno.

Sto analizzando un po di cose per iniziare a scrivere una interfaccia al browser, per eseguire delle piccole azioni di domotica (accendere qualche luce e amenità simili).

Considerato che dovrei scrivere per un SBC (tipo il lampone) allora mi sono orientato a python perché anche il programma per attivare le uscite (GPIO) è già pronto in python.

Forse ho tanta confusione, dovrei magari cominciare dalla parte del modello (MVC) e quindi venire al view. Ma credo che sto facendo il percorso inverso. Spero di cominciare a prendere qualche orientamento. Infatti pensavo di cominciare con Bottle (o Flask).

Ho fatto una prima bozza della pagina da presentare, contiene un qualche pezzetto di javascript per avere qualche rappresentazione dinamica. Pensavo di mettere un paio di sliders per determinare un temporizzatore.

Ora se provo con Bottle a prendere la pagina in html non mi rileva nulla e tutto appare 404. Forse per il fatto che ci sono delle immagini, ma sono appena alla sotto-directory dove inizia l' html. Provando anche con un semplice file di una immagine, non lo trova.

Almeno questo è il tentativo:

#! /usr/bin/env python

from bottle import Bottle
from bottle import run
from bottle import static_file as s_file
from bottle import route
from bottle import error

app = Bottle()

@route('/<filepath:path>')
def server_static(filepath):
    return s_file(filepath, root='/media/Datasave/Projects/HomAut/')

@error(404)
def error404(error):
    return '<h1 style="text-align: center;">Nothing here, sorry</h1>'

run(app, host='0.0.0.0', port=8080, debug=True)
Il percorso è corretto, ma tutto il contenuto è 404. Poi la risposta dal browser è la sua e la funzione di errore scritta non viene intercettata.

Se faccio con il metodo semplificato

sudo python -m http.server --bind 127.0.0.1 --directory /media/Datasave/Projects/HomAut/ 80
Le risposte sono accettate e si vede la pagina in html. Anche i file singoli della pagina sono accessibili.

Diciamo che queste sono le problematiche del view. Dal lato della esecuzione dei comandi sarei propenso a disegnare un demone che dovrebbe prendere i comandi da multiprocessing.connection oppure da d-bus. Quest' ultimo non ne conosco le potenzialità. Comunque rimaniamo sul fatto di capire come e cosa implementare l' interfaccia per i comandi da passare all' attuatore.



Ciao mi viene subito da pensare che sia un problema di permessi, verifica come prima cosa questo.

Se lo esegui con sudo e va, questo mi sembra un discreto indizio.

Fammi sapere.

Cya
Ho studiato il caso. Rileggendo il tutorial del manuale.

Devo dire che non inficiano i permessi. Ho messo i permessi di root, perché da qualche parte si descrive questa eventualità, ma forse si tratta di metterli a nobody. Ultime prove dalla shell di python sono avviate non come root.

Il risultato è vicino al possibile, ma bottle non scende nella sotto directory.


>>> from bottle import run, route, static_file
>>> import os
>>> CWD = os.getcwd() + "/"
>>> @route('/<name>')
... def server_static(name):
...     return static_file(name, root=CWD)
Al primo tentativo, sbagliavo la CWD, perché richiede lo slash finale.
Allora dovrei capire in quale caso si permette di scendere anche nelle sottocartelle. Altrimenti dovrei modificare la struttura dei files.
Di fatto la richiesta degli altri files è interna al file html caricato come statico.




--- Ultima modifica di F _ in data 2018-12-15 13:43:30 ---

--- Ultima modifica di F _ in data 2018-12-15 13:55:11 ---
Ci sono alcune cose che non mi tornano nel tuo discorso.

Prima di tutto i permessi a nobody sono una cosa brutta e non solo perché non hai il controllo delle tue azioni, le lasci al caso, ma proprio perché non stai ragionando sul caso specifico. Vabbé poi nemmeno i permessi dati come root sono una grande scelta (eufemismo). I permessi devi usarli con saggezza ed essere consapevole di quello che stai facendo. Non è mai una grande idea fare girare script con l'utente root, certo ti evitano dei problemi di comprensione, ma te ne aprono altri di sicurezza che non sono assolutamente da sfidare, insomma non la farei mai se non per esigenze particolari (e penserei ugualmente ad un'altra soluzione), cosa che tu in questo caso non hai.

Anche os.getcwd() forse non ti sta aiutando. Infatti ti restituisce la posizione corrente in cui lo script è lanciato, ma è quello che cerchi? Cioè se lo lanci in altre posizioni ovviamente non troverai quello che cerchi e ne perderai il controllo, forse dovresti usare qualcosa di diverso che ragioni su percorsi assoluti indipendentemente da dovi lanci lo script, dai un'occhiata ai metodi di os.path per averne più dettagli.

Ti va di contestualizzare un po' portando esempi concreti di errori ottenuti?

Allora dovrei capire in quale caso si permette di scendere anche nelle sottocartelle. Altrimenti dovrei modificare la struttura dei files. Di fatto la richiesta degli altri files è interna al file html caricato come statico.

Qui, ad esempio, non ti seguo del tutto, dammi maggiori dettagli.

A presto.
Grazie delle preziose risposte.

Per i permessi, convengo che il programma non si dovrebbe lanciare da root. Questo è già un caso risolto se usato con bottle, Quelli di nobody li ho letti qui (in fondo alla pagina) a riguardo agli script CGI. Ma forse non serve che siano di proprietà di quell' utente.

Mentre se usassi il framework http di python non è possibile avviarlo da utente, perché non può aprire il socket. Da capirci per quale ragione uno riesce e l' altro no. Rimango per tanto al caso bottle.

Il fatto di usare CWD mi serve limitatamente, perché il sorgente risiede con tutto il resto. Hai ragione a consigliare di usare un percorso assoluto, purtroppo ancora non ho stabilito la posizione finale del programma. Un po perché sto provando con il portatile e poi finite le prove, lo passo ad un computer headless.

Per quello che fa bottle, ho riscontrato che passato il file index.html che contiene chiamate a files nelle sotto cartelle, non li fa passare. Si può prendere altri file da un comando GET al server con un diverso percorso. Per questo allora ho spostato i file delle immagini richiesti dal file index.html.

Mentre con http.server.py non ho questo tipo di limitazione.


Devo ammettere che è un campo assolutamente nuovo che richiede diversi tentativi (studi) per capire come mettere insieme la parte in html e javascript con la parte di gestione in python.

Forse, quando capirò come funzionano i templates di bottle, potrei mettere meno javascript e sostituirli con i templates.





Pagina: 1



Esegui il login per scrivere una risposta.