WTForms provides a
FileField to render a file type input. It doesn't do anything special with the uploaded data. However, since Flask splits the form data (
request.form) and the file data (
request.files), you need to make sure to pass the correct data when creating the form. You can use a
CombinedMultiDict to combine the two into a single structure that WTForms understands.
form = ProfileForm(CombinedMultiDict((request.files, request.form)))
If you're using Flask-WTF, an extension to integrate Flask and WTForms, passing the correct data will be handled for you automatically.
Due to a bug in WTForms, only one file will be present for each field, even if multiple were uploaded. See this issue for more details. It will be fixed in 3.0.