首页 > 解决方案 > WTForms Flask:form_name.field_name.data = None

问题描述

我很早就开始学习 Flask/WTForms,我想知道为什么我一直没有为 form_name.field_name.data

应用程序.py:


import os

from flask import Flask, session, render_template, request, redirect, url_for
from flask_session import Session
from wtforms import Form, PasswordField, StringField, SelectField, validators
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

app = Flask(__name__)

# Create registration form class
class RegistrationForm(Form):
    username = StringField("Username")
    password = PasswordField("Password")
    name = StringField("Name")
    email = StringField("Email Address")
    city = StringField("Nearest City")

@app.route("/", methods=["GET", "POST"])
def signup():
    registration_form = RegistrationForm()
    if request.method == "GET":
        return render_template("index.html", registration_form=registration_form)
    else:
        username = registration_form.username.data
        password = registration_form.password.data
        name = registration_form.name.data
        email = registration_form.email.data
        city = registration_form.city.data
        # print for testing
        print(registration_form.data)
        print(username)
        print(password)
        print(name)
        print(email)
        print(city)
        user = {
                "username": registration_form.username.data,
                "password": registration_form.password.data,
                "name": registration_form.name.data,
                "email": registration_form.email.data,
                "city": registration_form.city.data
                }

        return render_template("success.html", user=user)

索引.html:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Index</title>
  </head>
  <body>
    <h1>Index</h1>
    <form action="/" method="POST">
      <ul>
        {% for field in registration_form %}
        <li>{{ field.label }}: {{ field }}</li>
        {% endfor %}
        <li><input type="submit"></li>
      </ul>
    </form>
  </body>
</html>

print(registration_form.data) 打印 {'username': None, 'password': None, 'name': None, 'email': None, 'city': None},但我希望用户输入值而不是 None .

同样,这些打印中的每一个都打印无,我希望用户输入值。

        print(username)
        print(password)
        print(name)
        print(email)
        print(city)

标签: flask-wtformswtforms

解决方案


推荐阅读