Created
November 12, 2016 11:28
Revisions
-
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,41 @@ <html> <head> <title>Flask FieldList Demo</title> </head> <body> <h1>Add Class</h1> {% if fileform %} <div> <p>Add class from file:</p> <form action="" method="post" enctype="multipart/form-data" name="fileform"> {{ fileform.hidden_tag() }} <p><input type="submit" name="upload" value="Upload"></p> </form> </div> <hr> {% endif %} <div> <form action="" method="post" name="classform"> {{ classform.hidden_tag() }} Class Name: {{ classform.name }}<br> Day: {{ classform.day }}<br> <br> <div> <table> <tr> <th> Student Number </th> <th> Name </th> </tr> {% for student in classform.students %} <tr> <td>{{ student.student_id }}</td> <td>{{ student.student_name }}</td> </tr> {% endfor %} </table> </div> <p><input type="submit" name="addclass" value="Add Class"></p> </form> </div> </body> </html> This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,70 @@ from flask import Flask, render_template, request, url_for from flask.ext.wtf import Form from wtforms import StringField, FieldList, FormField, SelectField from wtforms.validators import DataRequired from werkzeug.datastructures import MultiDict app = Flask(__name__) app.config['SECRET_KEY']='asdfjlkghdsf' # normally student data is read in from a file uploaded, but for this demo we use dummy data student_info=[("123","Bob Jones"),("234","Peter Johnson"),("345","Carly Everett"), ("456","Josephine Edgewood"),("567","Pat White"),("678","Jesse Black")] class FileUploadForm(Form): pass class StudentForm(Form): student_id = StringField('Student ID', validators = [DataRequired()]) student_name = StringField('Student Name', validators = [DataRequired()]) class AddClassForm(Form): name = StringField('classname', validators=[DataRequired()]) day = SelectField('classday', choices=[(1,"Monday"),(2,"Tuesday"),(3,"Wednesday"),(4,"Thursday"),(5,"Friday")], coerce=int) students = FieldList(FormField(StudentForm), min_entries = 5) # show at least 5 blank fields by default @app.route('/', methods=['GET', 'POST']) def addclass(): fileform = FileUploadForm() classform = AddClassForm() # Check which 'submit' button was called to validate the correct form if 'addclass' in request.form and classform.validate_on_submit(): # Add class to DB - not relevant for this example. return redirect(url_for('addclass')) if 'upload' in request.form and fileform.validate_on_submit(): # get the data file from the post - not relevant for this example. # overwrite the classform by populating it with values read from file classform = PopulateFormFromFile() return render_template('addclass.html', classform=classform) return render_template('addclass.html', fileform=fileform, classform=classform) def PopulateFormFromFile(): classform = AddClassForm() # normally we would read the file passed in as an argument and pull data out, # but let's just use the dummy data from the top of this file, and some hardcoded values classform.name.data = "Super Awesome Class" classform.day.data = 4 # Thursday # pop off any blank fields already in student info while len(classform.students) > 0: classform.students.pop_entry() for student_id, name in student_info: studentform = StudentForm() studentform.student_id = student_id studentform.student_name = name classform.students.append_entry(studentform) return classform if __name__ == '__main__': app.run(debug=True, port=5001)