Nous vous remercions de votre aide au cours des derniers jours. Je ne suis pas encore là. J'ai donc décidé de créer une application minimale basée sur l'exemple du chapitre cinq du manuel.Mise à jour d'un champ HTML en utilisant Flask
L'application doit avoir un champ de texte et un bouton. Chaque fois que le bouton est enfoncé, la chaîne '1' devrait être concaténée la valeur dans le champ et un flash devrait annoncer ceci.
Le code tel qu'il est affiché affiche simplement "Aucun" dans le champ.
La forme est une version simplifiée du modèle de show_entries:
{% extends "layout.html" %}
{% block body %}
{% if session.logged_in %}
<form action="{{ url_for('add_entry') }}" method="post" class="add-entry">
<h2> Integer:</h2>
<input id="text" name="text" size="10" value="{{ AO_sInteger }}" />
<input type="submit" value="Add 1" />
</form>
{% endif %}
{% endblock %}
L'application "minimale" est:
import sqlite3
from werkzeug.wrappers import Request, Response
from jinja2 import Template
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash, make_response
app = Flask(__name__)
app.config.from_object(__name__)
app.config.from_envvar('FLASKR_SETTINGS', silent=True)
app.secret_key = '\xa5M\x05\xda=Y<\xfdV\x1f#\xa6\\\xbd%\xd8\xa1mBd\xca\xc9\xb1\xfe'
app.debug = True
@app.route('/add', methods=['POST'])
def add_entry():
if not session.get('logged_in'):
abort(401)
AO_sInteger = request.form['text']
AO_sInteger = AO_sInteger+'1'
render_template('show_entries.html', AO_sInteger = AO_sInteger)
resp = make_response(render_template('show_entries.html', AO_sInteger = AO_sInteger))
resp.set_cookie('AO_sInteger', AO_sInteger)
flash('the new seed is: %s.' %(session.get('AO_sInteger')))
return redirect(url_for('show_entries'))
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
session['logged_in'] = True
flash('You were logged in')
return redirect(url_for('show_entries'))
@app.route('/logout')
def logout():
session.pop('logged_in', None)
flash('You were logged out')
return redirect(url_for('show_entries'))
@app.route('/', methods=['GET', 'POST'])
def show_entries():
try:
AO_sInteger = request.cookies.get('AO_sInteger')
except KeyError:
AO_sInteger = '42'
return render_template('show_entries.html', AO_sInteger = session.get('AO_sInteger'))
if __name__ == '__main__':
app.run()
Je me serais attendu d'avoir 42 comme l'affichage initial lorsque le cookie n'a pas été créé. Cela montre que je ne comprends pas l'ordre d'invocation des événements dans le programme.
Merci, et désolé pour le poste long.
Avner
Merci Sean, je mélange bien les deux concepts. –