Редактировать: я решил проблему.Радио-поле в Child1Form вызывало проблемы.
Исходное сообщение: эта ошибка возникает, когда я выбираю кнопку «следующий этап» в файле stage_one_complete.В идеале нажатие этой кнопки вернет HTML-страницу ChildSignUp.У меня была такая же ошибка ранее, когда я пытался использовать команду URL перенаправления.
основное приложение.
from flask import Flask, render_template, request, redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, RadioField
from wtforms.validators import InputRequired, AnyOf, Length, Email, EqualTo, Regexp
from Project_Functions import AddUser
app = Flask(__name__)
app.config['SECRET_KEY'] = '100'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=3000)
class UserForm(FlaskForm):
SchoolCode = StringField('SchoolCode', validators=[InputRequired('Fill in this field'), AnyOf(values='Kwood500', message='invalid school code')])
FirstName = StringField('First Name', validators=[InputRequired('Fill in this field'), Length(min=2, max=20, message = 'invalid input')])
LastName = StringField('Last Name', validators=[InputRequired('Fill in this field'), Length(min=2, max=20, message = 'invalid input')])
Postcode = StringField('Postcode', validators=[InputRequired('Fill in this field'), Regexp('[A-Z][A-Z][0-9]\s[0-9][A-Z][A-Z]|[A-Z][A-Z][0-9][0-9]\s[0-9][A-Z][A-Z]', message = 'Postcode must have space, and all capitals')])
Phone = StringField('Phone', validators=[InputRequired('Fill in this field'), Length(min=10, max=11, message = 'invalid number')])
Email = StringField('Email', validators=[InputRequired('Fill in this field')])
ConfirmEmail = StringField('ConfirmEmail', validators=[InputRequired('Fill in this field'), EqualTo('Email', message = 'does not match email')])
Password = StringField('Password', validators=[InputRequired('Fill in this field')])
AddLineOne = StringField('AddressLineOne', validators=[InputRequired('Fill in this field'), Length(min=1, max=40, message = 'invalid input')])
AddLineTwo = StringField('AddressLineTwo', validators=[InputRequired('Fill in this field'), Length(min=1, max=40, message = 'invalid input')])
class Child1Form(FlaskForm):
c1_FirstName = StringField('FirstName', validators=[InputRequired('Fill in this field'), Length(min=2, max=20, message = 'invalid input')])
c1_LastName = StringField('LastName', validators=[InputRequired('Fill in this field'), Length(min=2, max=20, message = 'invalid input')])
c1_Year = RadioField('Yeargroups', choices=['7','8','9','10','11','12','13'], validators=[InputRequired('Select a year group')])
@app.route('/', methods=["GET", "POST"])
def SignUp():
form = UserForm()
if form.validate_on_submit():
first_name = form.FirstName.data
last_name = form.LastName.data
postcode = form.Postcode.data
phone = form.Phone.data
email = form.Email.data
password = form.Password.data
add_one = form.AddLineOne.data
add_two = form.AddLineTwo.data
global user_id
user_id = AddUser(first_name, last_name, postcode, phone, email, password, add_one, add_two)
return render_template('stage_one_complete.html')
return render_template('SignUp.html', form=form)
@app.route('/ChildSignUp', methods=["GET", "POST"])
def ChildSignUp():
form = Child1Form()
return render_template('ChildSignUp.html', form=form)
SignUp.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sign Up</title>
</head>
<body>
<h1>Kingswood Carpool
<br>
Sign Up
</h1>
<form method="POST" action="{{ url_for('SignUp') }}" novalidate="novalidate">
{{ form.csrf_token }}
School Code: {{ form.SchoolCode }}
{% for error in form.SchoolCode.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
First Name: {{ form.FirstName }}
{% for error in form.FirstName.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Last Name: {{ form.LastName }}
{% for error in form.LastName.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Postcode: {{ form.Postcode }}
{% for error in form.Postcode.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Phone: {{ form.Phone }}
{% for error in form.Phone.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Email: {{ form.Email }}
{% for error in form.Email.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Confirm Email: {{ form.ConfirmEmail }}
{% for error in form.ConfirmEmail.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Password: {{ form.Password }}
{% for error in form.Password.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Address Line One: {{ form.AddLineOne }}
{% for error in form.AddLineOne.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Address Line Two: {{ form.AddLineTwo }}
{% for error in form.AddLineTwo.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
<input type="submit" value="next">
</form>
</body>
</html>
ChildSignUp.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Add Child</title>
</head>
<body>
<form method="POST" action="{{ url_for('ChildSignUp') }}" novalidate="novalidate">
{{ form.csrf_token }}
Child First Name: {{ form.c1_FirstName }}
{% for error in form.c1_FirstName.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Last Name: {{ form.c1_LastName }}
{% for error in form.c1_LastName.errors %}
<li> {{ error }} </li>
{% endfor %}
<br>
Year Group: {{ form.c1_Year }}
{% for error in form.c1_Year.errors %}
<li> {{ error }} </li>
{% endfor %}
<input type="submit" value="next">
</form>
</body>
</html>
stage_one_complete.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Stage One</title>
</head>
<body>
<h1> Stage One complete!</h1>
<form>
<input type="button" value="Next Stage" onclick=location.href='http://127.0.0.1:5000/ChildSignUp'>
</form>
</body>
</html>
project_functions.py
import sqlite3
def AddUser(first_name, last_name, postcode, phone, email, password, add_one, add_two):
with sqlite3.connect("KingswoodCarpool.db") as con:
cur = con.cursor()
userid = CreateUserId()
firstname = first_name
lastname = last_name
postcode = postcode
phone = phone
email = email
password = password
al1 = add_one
al2 = add_two
cur.execute('''INSERT INTO user VALUES (?,?,?,?,?,?,?,?,?,?)''',(userid, firstname, lastname, phone, email, password, postcode, al1, al2, 0))
con.commit()
return(userid)