Когда я пытаюсь перейти на новую HTML-страницу во Flask, я получаю сообщение об ошибке «Python неожиданно завершает работу ... прерывается по сигналу 11: SIGEGV» - PullRequest
0 голосов
/ 16 декабря 2018

Редактировать: я решил проблему.Радио-поле в 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)
...