Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NameError: global name 'flash' is not defined

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>&copy; 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!

like image 858
Jed Hart Avatar asked Sep 03 '17 23:09

Jed Hart


People also ask

How do you fix NameError name is not defined?

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 causes NameError?

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.


1 Answers

Add from flask import flash to your code. All the HTML files are irrelevant to the question.

like image 94
DYZ Avatar answered Sep 23 '22 22:09

DYZ