Powielenie formularzy na stronie

0

Witajcie ponownie,
Tym razem mam mały problem z kolejnym zadaniem w Pythonie. Mam do zrobienia web apkę, w której muszę wywołać 3 osobne metody z parametrami przekazanymi w formularzu.
Użyłem formularza z Flask'a i wszystko pięknie śmiga dla jednej metody (screen). Jak natomiast dodać na tej samej stronie 2 kolejne formularze wywołujące inne metody mojego modułu 'dbServiceModule'? Nie chciałbym robić dodatkowych endpointów/podstron. Musze otworzyć nową klasę która dziedziczy po Form i utworzyć nowe obiekty? Jak poradzić sobie przy tym z tempaltem 'index.html'? Źródła zamieszczam poniżej.

screenshot-20191230153953.png

from flask import Flask, render_template, flash, request
from wtforms import Form, TextField, TextAreaField, validators, StringField, SubmitField
import dbServiceModule, re


# App config.
DEBUG = True
app = Flask(__name__)
app.config.from_object(__name__)
app.config['SECRET_KEY'] = '7d441f27d441f27567d441f2b6176a'

class MyForms(Form):
    name = TextField('Name:', validators=[validators.required()])
    
    @app.route("/", methods=['GET', 'POST'])
    def AnnualPaymentsDep():
        form = MyForms(request.form)
        
        print(form.errors)
        if request.method == 'POST':
            name=request.form['name']
            print(name)
        
        if form.validate():
            try:
                output = re.sub("[{}'']", "", dbServiceModule.Service.sumOfAnnualPaymentsForDeps(name))
                flash(output)
            except:
                flash('Błąd: Niewłaściwa nazwa departamentu. ')
        else:
            flash('Błąd: Wypełnij pole. ')
        
        return render_template('index.html', form=form)


if __name__ == "__main__":
    app.run()

/templates/index.html

<title>Accounting WebApp</title>
        	 	<link rel="stylesheet" media="screen" href="static/bootstrap.min.css">
        	 	<link rel="stylesheet" href="static/bootstrap-theme.min.css">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
<div class="container"></br>
<h2>Accounting WebApp </h2></br>
<form action="" method="post" role="form">{{ form.csrf }}
<div class="form-group">
      <label for="name">Suma rocznych wypłat dla działu:</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Podaj nazwę działu"></div>
<button type="submit" class="btn btn-success">Zatwierdź</button>
</form>{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}

{% for message in messages %}
{% if "Błąd" not in message[1]: %}
<div class="alert alert-info">
                <strong>Suma rocznych wypłat dla wskazanego działu: </strong> {{ message[1] }} USD</div> 
{% endif %}

{% if "Błąd" in message[1]: %}
<div class="alert alert-warning">
                {{ message[1] }}</div>
{% endif %}
{% endfor %}
{% endif %}
{% endwith %}

0

Wystarczy sam kod formularza zapisać do osobnej metody, a następnie posługiwać się tą metodą we wszystkich miejscach gdzie będzie potrzebny ten formularz.

0

Dzięki za odpowiedź. Powieliłem metodę, ale mimo to mam jeden formularz... Co z templatem html, jak to ugryźć? Nie znam się kompletnie na froncie...

0

W template też musisz powielić formularz. Jego nazwa będzie taka sama jak zmiennej po stronie widoku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1