Je me demandais s'il existait un moyen de prendre quelque chose dans une zone de texte dans le HTML, de l'introduire dans Flask, puis d'analyser ces données avec Python. Je pensais que cela pouvait impliquer du JS, mais je peux me tromper. Une idée ?
Réponses
Trop de publicités?À moins que vous ne vouliez faire quelque chose de plus compliqué, l'introduction de données d'un formulaire HTML dans Flask est assez simple.
- Créer une vue qui accepte une requête POST (
my_form_post
). - Accéder aux éléments du formulaire dans le dictionnaire
request.form
.
templates/my-form.html
:
<form method="POST">
<input name="text">
<input type="submit">
</form>
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def my_form():
return render_template('my-form.html')
@app.route('/', methods=['POST'])
def my_form_post():
text = request.form['text']
processed_text = text.upper()
return processed_text
C'est la documentation de Flask sur accès aux données de la demande .
Si vous avez besoin de formulaires plus compliqués nécessitant une validation, vous pouvez consulter le site Formulaires WTF y comment les intégrer à Flask .
Remarque : à moins que vous n'ayez d'autres restrictions, vous n'avez pas vraiment besoin de JavaScript. du tout pour envoyer vos données (bien que vous puissiez l'utiliser).
Déclarer un endpoint Flask pour accepter le type d'entrée POST et ensuite faire les étapes nécessaires. Utilisez jQuery pour poster les données.
from flask import request
@app.route('/parse_data', methods=['GET', 'POST'])
def parse_data(data):
if request.method == "POST":
#perform action here
var value = $('.textbox').val();
$.ajax({
type: 'POST',
url: "{{ url_for('parse_data') }}",
data: JSON.stringify(value),
contentType: 'application/json',
success: function(data){
// do something with the received data
}
});
Toute interaction entre le serveur (votre application Flask) et le client (navigateur) se fait par requête et réponse. Lorsque l'utilisateur appuie sur le bouton "submit" de votre formulaire, son navigateur envoie une requête avec ce formulaire à votre serveur (application flask), et vous pouvez obtenir le contenu du formulaire comme suit :
request.args.get('form_name')
En supposant que vous savez déjà comment écrire une vue sur Flask
qui répond à une url, créez-en une qui lit l'url de l'utilisateur. request.post
données. Pour ajouter le input box
à ce post data créer un formulaire sur votre page avec la zone de texte. Vous pouvez ensuite utiliser jquery
à faire
var data = $('#<form-id>').serialize()
puis de poster dans votre vue de manière asynchrone en utilisant quelque chose comme ci-dessous.
$.post('<your view url>', function(data) {
$('.result').html(data);
});
Cela a marché pour moi.
def parse_data():
if request.method == "POST":
data = request.get_json()
print(data['answers'])
return render_template('output.html', data=data)
$.ajax({
type: 'POST',
url: "/parse_data",
data: JSON.stringify({values}),
contentType: "application/json;charset=utf-8",
dataType: "json",
success: function(data){
// do something with the received data
}
});