【发布时间】:2019-03-21 05:26:00
【问题描述】:
在 Flask/Python 中解决问题。如果出现其中一些错误,我已经能够在它们出现时将它们压扁;但是,我似乎无法深入了解这一点。
我有一个允许用户登录的简单表单。
但是每次我加载页面时都会遇到这个错误:
jinja2.exceptions.UndefinedError: 'shop.forms.LoginForm object' 没有属性'submit'
以下是我正在使用的代码,在此先感谢。
附言我看过关于 hidden_tag() 属性的类似帖子,但建议的修复方法不适用于这种情况。
routes.py
import os
from flask import render_template, url_for, request, redirect, flash
from shop import app, db
from shop.models import Author, Book, User
from shop.forms import RegistrationForm, LoginForm
from flask_login import login_user, current_user, logout_user, login_required
@app.route("/login", methods=['GET', 'POST'])
def login():
form = LoginForm()
if request.method == 'POST':
user = User.query.filter_by(email=form.email.data).first()
if user is not None and user.verify_password(form.password.data):
login_user(user)
return redirect(url_for('home'))
return render_template('login.html', title='Login', form=form)
forms.py
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo
class LoginForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
sumbit = SubmitField('Login')
login.html
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
{% extends "layout.html" %}
{% block content %}
<form method="POST" action="">
{{ form.csrf_token }}
<div class="">
{{ form.email.label }} {{ form.email}}
</div>
<div class="">
{{ form.password.label }} {{ form.password}}
</div>
<div class="">
{{ form.submit() }}
</div>
</form>
{% endblock content %}
</body>
</html>
编辑:从提交中删除 () 并不能解决问题。只需从模板中完全删除按钮的实例。见下文:
【问题讨论】:
标签: html flask jinja2 flask-wtforms