web-dev-qa-db-fra.com

Envoyer des données d'une zone de texte dans Flask?

Je me demandais s'il y avait un moyen de prendre quelque chose d'une zone de texte dans le code HTML, de le nourrir dans un flacon, puis d'analyser ces données avec Python. Je pensais que cela pourrait impliquer un certain JS mais je peux me tromper. Des idées?

75
ollien

Sauf si vous voulez faire quelque chose de plus compliqué, introduire les données d'un formulaire HTML dans Flask est assez facile.

  • Créez une vue qui accepte une demande POST (my_form_post).
  • Accéder aux éléments de 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

Ceci est la Flask documentation sur accès aux données de la demande .

Si vous avez besoin de formulaires plus complexes qui nécessitent une validation, vous pouvez jeter un oeil à WTForms et comment les intégrer à Flask .

Remarque: à moins que vous n'ayez d'autres restrictions, vous n'avez vraiment pas besoin de JavaScript pour envoyer vos données (bien que vous puissiez les utiliser).

119
pacha

Déclarez un point final Flask à accepter] POST puis effectuez les étapes nécessaires. Utilisez jQuery pour publier 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
  }
});
10
Kracekumar

Toutes les interactions entre le serveur (votre flask) et le client (navigateur) passent par demande et réponse. Lorsque l'utilisateur clique sur le bouton, il envoie dans votre formulaire son navigateur envoie une demande avec ce formulaire à votre serveur (application flask ), et vous pouvez obtenir le contenu du formulaire comme:

request.args.get('form_name')
2
Denis

En supposant que vous sachiez déjà comment écrire une vue dans Flask qui répond à une URL, créez-en une qui lit les données request.post. Pour ajouter le input box À ces données de publication, créez un formulaire sur votre page avec la zone de texte. Vous pouvez ensuite utiliser jquery pour faire

var data = $('#<form-id>').serialize()

puis postez votre vue de manière asynchrone en utilisant quelque chose comme ci-dessous.

$.post('<your view url>', function(data) {
  $('.result').html(data);
});
1
Pratik Mandrekar

Cela a fonctionné 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
      }
    });
0
Anurag Sharma