Nano Hash - криптовалюты, майнинг, программирование

TypeError: «Обязательный» объект не является итерируемым Flask WTF Forms

Я следую http://code.tutsplus.com/tutorials/intro-to-flask-signing-in-and-out--net-29982 руководство по разработке моего собственного приложения.

Я попытался создать форму подписки, но столкнулся с этой ошибкой:

TypeError: 'Required' object is not iterable 

Страница моих маршрутов

from cafe_klatch import app
from flask import render_template,request,flash
from forms import ContactForm, SignupForm
from models import db


@app.route('/')
@app.route('/index')

def index():
    return render_template('index.html')

@app.route('/contact', methods = ['GET','POST'])

def contact():
    form1 = ContactForm()

    if request.method == 'POST':
        if form.validate() == False:
            flash('All fields are required.')
            return render_template('contact.html',form = form)
        else:
            return 'Form posted.'    
    elif request.method == 'GET':
        return render_template('contact.html',form = form)  


@app.route('/signup', methods =['GET','POST'])

def signup():
    form = SignupForm() 

    if request.method == 'POST':
        if form.validate() == False:
            return render_template('signup.html',form = form)
        else:
            return "[1] Create a new user [2] Sign in the user [3] redirect to the user's profile" 

    elif request.method == 'GET':
        return render_template('signup.html',form = form)         

Это мой код models.py

from flask.ext.sqlalchemy import SQLAlchemy
from werkzeug import generate_password_hash, check_password_hash

db = SQLAlchemy()

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key = True)
    userid = db.Column(db.String(30), unique = True)
    email = db.Column(db.String(100), unique = True)
    pwdhash = db.Column(db.String(100))
    birthdate = db.Column(db.DateTime)
    zipcode = db.Column(db.Integer)
    country = db.Column(db.String(100))

    def __init__(self,userid,email,password,birthdate,zipcode,country):
        self.userid = userid.title()
        self.email = email.lower()
        self.set_password(password)
        self.birthdate = birthdate
        self.zipcode = zipcode
        self.country = country

    def __repr__(self):
            return '<User %r>' % self.username    

    def set_password(self,password):
        self.pwdhash = generate_password_hash(password)

    def check_password(self,password):
        return check_password(self.pwdhash, password)            

Это мой код form.py

from flask.ext.wtf import Form
from wtforms import TextField, TextAreaField, SubmitField, IntegerField, validators, ValidationError,PasswordField, DateField
from models import db, User 
class ContactForm(Form):
  name = TextField("Name",  [validators.Required("Please enter your name.")])
  email = TextField("Email",  [validators.Required("Please enter your email address."), validators.Email("Please enter your email address.")])
  subject = TextField("Subject",  [validators.Required("Please enter a subject.")])
  message = TextAreaField("Message",  [validators.Required("Please enter a message.")])
  submit = SubmitField("Send")

class SignupForm(Form):
    userid = TextField("userid", [validators.Required("Please enter your user id")])
    email = TextField("Email", [validators.Required("Please enter your email address."), validators.Email("Please enter your email address.")])
    password = PasswordField('Password', [validators.Required("Please enter a password.")])
    birthdate = DateField("Birthdate",validators.Required("Please Enter your birthdate"))
    zipcode =  IntegerField("Zipcode",[validators.Required("Please Enter your zipcode")])
    country = TextField("country", [validators.Required("Please enter your country")])
    submit = SubmitField("Create account")

    def __init__(self, *args, **kwargs):
        Form.__init__(self, *args, **kwargs)

    def validate(self):
        if not Form.validate(self):
            return False

        user = User.query.filter_by(email = self.email.data.lower()).first()
        if user:
          self.email.errors.append("That email is already taken")
          return False
        else:
          return True    

Кто-нибудь может объяснить, где ошибка?


  • У вас есть полная трассировка для этого исключения? 11.03.2014

Ответы:


1

Вы должны передать список валидаторов, но вам не хватает [ ... ] в объявлении поля birthdate в SignupForm. Следует читать:

birthdate = DateField("Birthdate",
    [validators.Required("Please Enter your birthdate")])
10.03.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..