2015-06-17 9 views
7

Sono abbastanza nuovo in Python/Flask e specialmente nei linguaggi di scripting quindi per favore nuda con me.Python Flask chiama le funzioni usando i pulsanti

Una volta premuto il pulsante nel template del flask mi piacerebbe richiamare una funzione python definita in app.py che ho reso disponibile per essere chiamata all'interno del template digitando quanto segue di seguito dove definisco la funzione :

funzione Esempio in app.py:

@app.route('/foo') 
def foo(x,y): 
    pass 
app.jinja_env.globals.update(foo=foo) 

Template:

<button type="button" onclick="myFunction(this)" name="enable" id="{{counter}}"> Enable </button> 

nel mio tasto ho l'attributo onclick solo per testare che il corretto pulsante di molti viene premuto utilizzando JavaScript come ad esempio:

{% block scripts %} 
    {{ super() }} 
    <script> 
    function myFunction(elem){ 
     if(confirm('Are you sure you want to ' + elem.name) == true){ 
      alert("its done.");    
     } 
     else { 
      return false; 
     }   
    } 
    </script> 
{% endblock %} 

Il problema che sto affrontando è che ho bisogno della funzione che sto mettendo a disposizione all'interno del modello in modo da corrispondere al pulsante corretto. Ad esempio, se il pulsante dice Abilita, allora devo chiamare la funzione di abilitazione definita già o altrimenti se il pulsante corrisponde a falso, mi piacerebbe che fosse usata la funzione di disabilitazione.

Mi sembra di andare nella direzione giusta ma non riesco a superare questa parte. Si prega di essere il più dettagliato possibile.

risposta

11

Se si desidera eseguire la funzione senza generare una richiesta al server, la funzione deve essere definita in JavaScript. Altrimenti, è necessario attivare una richiesta HTTP.

Ora nel tuo caso, se tutto quello che stai cercando di fare è abilitare/disabilitare i pulsanti, avrebbe senso fare tutto ciò in javascript (non è necessario andare al server).

Esempio:

<button type="button" onclick="disableButton(this)" name="enable">Enable</button> 

javascript

function disableButtonState(elem) { 
    if(confirm('Are you sure you want to disable this button?') == true) { 
     elem.disabled = true; 
     alert("its done.");    
    } 
    else { 
     return false; 
    }   
} 
</script> 

Tuttavia, se ciò che si vuole è quello di chiamare un metodo sul server che, ad esempio, invia una e-mail, allora si dovrebbe utilizzare un form POST/GET o AJAX POST/GET

Esempio:

app.py

@app.route('/foo', methods=['GET', 'POST']) 
def foo(x=None, y=None): 
    # do something to send email 
    pass 

modello

<form action="/foo" method="post"> 
    <button type="submit" value="Send Email" /> 
</form> 

Quando si fa clic sul pulsante "Send Email" una richiesta HTTP POST viene inviata a "/ foo" sulla vostra applicazione. La funzione foo può ora estrarre alcuni dati dalla richiesta e fare qualsiasi cosa voglia fare sul lato server e quindi restituire una risposta al browser web del client.

Suggerire di passare attraverso lo Flask Tutorial per ottenere una migliore comprensione delle interazioni client/server quando si tratta di applicazioni Web create con Flask.

+0

Grazie per la risposta.Quindi, da quello che mi stai dicendo, ho solo bisogno di usare JavaScript per la mia situazione specifica. Il più grande problema che ho di fronte è cercare di chiamare la funzione Python all'interno del JS. puoi indicarmi la direzione giusta o dare un esempio? – Sean

+0

Non è possibile chiamare una funzione python direttamente da JavaScript poiché in questo caso il tuo JavaScript è in esecuzione su un browser sul client e la tua funzione Python esiste sul server. L'unico modo per rendere possibile la comunicazione è inviare una richiesta HTTP al tuo server. Questo è ciò che la mia risposta sta suggerendo. Se quello che stai cercando di fare è puramente visivo, come disabilitare o nascondere un pulsante, questo può essere ottenuto completamente in JavaScript. È questo che intendi? – junnytony

+0

Vedere la mia modifica per manipolare il pulsante con javascript, se è quello che stai cercando di fare – junnytony

Problemi correlati