2017-09-03 5 views
0

J'apprends des bases de données en construisant une application Flask de base en suivant ce tutoriel ici: https://www.tutorialspoint.com/flask/flask_sqlalchemy.htm et je suis actuellement au point où je dois me connecter à ma base de données SQLITE3 via SQLAlchemy. Pour être honnête, ça ne va pas très bien. Je suis cette erreur: NameError: nom global 'flash' est pas définiNameError: le nom global 'flash' n'est pas défini

Voici mon 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> 

Problème:

Je ne sais pas si la connexion fonctionne ou non, même si l'erreur get fixé le NameError un car il est une première pour moi, tout d'abord j'essayé d'utiliser MySQL, mais flask.ext.mysql est dépréciée , alors j'ai essayé de passer à SQLAlchemy et SQLite3. Toute aide est appréciée pour un débutant comme moi. Merci!

Répondre

1

Ajoutez from flask import flash à votre code. Tous les fichiers HTML ne sont pas pertinents à la question.