I'm learning databases by building a basic Flask Application by following this tutorial here: https://www.tutorialspoint.com/flask/flask_sqlalchemy.htm and I am currently at the point where I need to make a connection to my SQLITE3 database via SQLAlchemy. To be honest it's not going that well. I got this error: NameError: global name 'flash' is not defined
Here's my app.py
#!/usr/bin/python
from flask import Flask, render_template, json, request
from flask_sqlalchemy import SQLAlchemy
import sqlite3
conn = sqlite3.connect('test.db')
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///students.sqlite3'
db = SQLAlchemy(app)
class Students(db.Model):
id = db.Column('student_id',db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True)
def __init__(self, name, id):
self.name = name
self.id = id
def __repr__(self):
return '<Students %r>' % self.name
db.create_all()
@app.route("/")
def main():
return render_template('index.html')
@app.route('/new', methods = ['GET', 'POST'])
def new():
if request.method == 'POST':
if not request.form['name'] or not request.form['id']:
flash('Please enter all the fields', 'error')
else:
student = Students(request.form['name'], request.form['id'])
db.session.add(student)
db.session.commit()
flash('Record was successfully added')
return redirect(url_for('show_all'))
return render_template('new.html')
@app.route("/admin")
def show_all():
return render_template('show_all.html', students = students.query.all() )
# create user code will be here !!
if __name__ == "__main__":
app.run(debug=True)
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Attendance System</title>
<link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="http://getbootstrap.com/examples/jumbotron-narrow/jumbotron-narrow.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="header">
<nav>
<ul class="nav nav-pills pull-right">
<li role="presentation" class="active"><a href="#">Home</a>
</li>
<li role="presentation"><a href="#">Sign In</a>
</li>
<li role="presentation"><a href="new">Sign Up</a>
</li>
</ul>
</nav>
<h3 class="text-muted">Python Flask App</h3>
</div>
<div class="jumbotron">
<h1>Attendance App</h1>
<p class="lead"></p>
<p><a class="btn btn-lg btn-success" href="new" role="button">Sign up today</a>
<a class="btn btn-lg btn-success" href="show_all" role="button">Administrate</a>
</p>
</div>
<footer class="footer">
<p>© Company 2015</p>
</footer>
</div>
</body>
</html>
show_all.html
<!DOCTYPE html>
<html lang = "en">
<head></head>
<body>
<h3>
<a href = "{{ url_for('show_all') }}">Comments - Flask
SQLAlchemy example</a>
</h3>
<hr/>
{%- for message in get_flashed_messages() %}
{{ message }}
{%- endfor %}
<h3>Students (<a href = "{{ url_for('new') }}">Add Student
</a>)</h3>
<table>
<thead>
<tr>
<th>Name</th>
<th>Id</th>
</tr>
</thead>
<tbody>
{% for student in students %}
<tr>
<td>{{ student.name }}</td>
<td>{{ student.id }}</td>
{% endfor %}
</tbody>
</table>
</body>
</html>
**new.html**
<!DOCTYPE html>
<html>
<body>
<h3>Attendance</h3>
<hr/>
{%- for category, message in get_flashed_messages(with_categories = true) %}
<div class = "alert alert-danger">
{{ message }}
</div>
{%- endfor %}
<form action = "{{ request.path }}" method = "post">
<label for = "name">Name</label><br>
<input type = "text" name = "name" placeholder = "Name" /><br>
<label for = "id">Id Number</label><br>
<input type = "text" name = "id" placeholder = "Student Id" /><br>
<input type = "submit" value = "Sign-in!" />
</form>
</body>
</html>
Problem:
I don't know if the connection works or not, even if the error get's fixed the NameError
one since it's a first for me, at first I tried using MySQL but flask.ext.mysql is deprecated, so I tried switching to SQLAlchemy and SQLite3. Any help is appreciated for a newbie like me. Thanks!
The Python "NameError: name is not defined" occurs when we try to access a variable or function that is not defined or before it is defined. To solve the error, make sure you haven't misspelled the variable's name and access it after it has been declared.
What Is a NameError in Python? In Python, the NameError occurs when you try to use a variable, function, or module that doesn't exist or wasn't used in a valid way. Some of the common mistakes that cause this error are: Using a variable or function name that is yet to be defined.
Add from flask import flash
to your code. All the HTML files are irrelevant to the question.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With