I've just started learning flask. I'm trying to handle a form for user registration. But inside my routes.py, the form's data isn't getting pushed to the database, and also the page isn't redirecting after the click on the submit button. There is no error or any warning. The action just does not get performed and the register page just gets re-loaded.
I'm attaching the codes of the files below. The demo is the folder where my HTML templates and .py files are saved.
#run.py : located outside the root(demo) folder
from demo import app
if __name__ == '__main__':
app.run(debug=True)
-------------------------------------------------------------------------------------
#__init__.py
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///demo.db'
app.config['SECRET_KEY'] = 'df159ba68c3577847ef3dfef'
db = SQLAlchemy(app)
from demo import routes
-------------------------------------------------------------------------------------
#model.py
from demo import db
class Item(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), nullable=False, unique=True)
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(60), nullable=False)
def __repr__(self):
return f'Item {self.username}'
------------------------------------------------------------------------------------
#form.py
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
class RegisterForm(FlaskForm):
username = StringField(label='Username')
email = StringField(label='Email')
password = PasswordField(label='Password')
submit = SubmitField(label='Create Account')
-------------------------------------------------------------------------------------
#routes.py
from demo import app
from flask import render_template, redirect, url_for
from demo.model import Item
from demo.form import RegisterForm
from demo import db
@app.route('/')
@app.route('/home')
def hello_world():
return render_template('home.html', item_name="number")
@app.route('/info')
def second_page():
items = Item.query.all()
return render_template('info.html', items=items)
@app.route('/register', methods=['GET', 'POST'])
def registration_page():
form = RegisterForm()
if form.validate_on_submit():
user_to_create = Item(username=form.username.data,
email=form.email.data,
password=form.password.data)
db.session.add(user_to_create)
db.session.commit()
return redirect(url_for('second_page'))
return render_template('register.html', form=form)
-----------------------------------------------------------------------------------
#register.html
{% extends 'base.html' %}
{% block title %}
Registration page
{% endblock %}
{% block content %}
<form method="POST" >
{{ form.username.label() }}
{{ form.username(placeholder='Enter Your Username') }}
{{ form.email.label() }}
{{ form.email(placeholder='Enter Your Email') }}
{{ form.password.label() }}
{{ form.password(placeholder='Enter Your Password') }}
{{ form.submit() }}
</form>
{% endblock %}
----------------------------------------------------------------------------------
#info.html :The page from second_page() function in routes.py
{% extends 'base.html' %}
{% block title %}
This is Info page
{% endblock %}
{% block content %}
<h1>you are in the info page</h1>
<h1>Welcome to this page</h1>
<h1>Great day!</h1>
{% for item in items %}
<p>{{ item.username }} - {{ item.email }}</p>
{% endfor %}
{% endblock %}
These are the files from my project. Please help me clear this functionality error. Thanks in advance.