我试图创建一个简单的webapp。并在此期间从调试器中裁剪出上述错误。任何人都可以帮助我。其他一切正常工作,数据库服务器正常工作。但在这里无法找出问题。UnboundLocalError:赋值之前引用的局部变量'cursor'(第72行)
from flask import Flask, render_template, json, request
from flask.ext.mysql import MySQL
from werkzeug import generate_password_hash, check_password_hash
app = Flask(__name__)
mysql = MySQL()
app = Flask(__name__)
app.secret_key = 'why would I tell you my secret key?'
# MySQL configurations
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = ''
app.config['MYSQL_DATABASE_DB'] = 'mydata'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
@app.route("/")
def main():
return render_template('login.html')
@app.route('/showSignUp')
def showSignUp():
return render_template('signup.html')
@app.route('/userHome')
def userHome():
if session.get('user'):
return render_template('userHome.html')
else:
return render_template('error.html',error = 'Unauthorized Access')
@app.route('/logout')
def logout():
session.pop('user',None)
return redirect('/')
@app.route('/putemail')
def putemail():
return render_template('putemail.html')
@app.route('/validateLogin', methods=['POST','GET'])
def validateLogin():
try:
_username = request.form['inputusername']
_password = request.form['inputpassword']
con = mysql.connect()
cursor = con.cursor()
cursor.callproc('sp_validateLogin',(_username,))
data = cursor.fetchall()
if len(data) > 0:
if check_password_hash(str(data[0][4]),_password):
session['user'] = data[0][0]
return redirect('/userHome')
else:
return render_template('error.html',error = 'Wrong Email address or Password.')
else:
return render_template('error.html',error = 'Wrong Email address or Password.')
except Exception as e:
return render_template('error.html',error=str(e))
finally:
cursor.close()
con.close()
@app.route('/signUp', methods=['POST','GET'])
def signUp():
try:
# read the posted values from the UI
_name = request.form['inputfullname']
_username = request.form['inputusername']
_email = request.form['inputemail']
_password = request.form['inputpassword']
# validate the received values
if _name and _username and _email and _password:
# All Good, let's call MySQL
conn = mysql.connect()
cursor = conn.cursor()
_hashed_password = generate_password_hash(_password)
cursor.callproc('sp_createUser', (_name,_username,_email,_hashed_password))
data = cursor.fetchall()
if len(data) is 0:
conn.commit()
return json.dumps({'message':'User created successfully !'})
else:
return json.dumps({'error':str(data[0])})
else:
return json.dumps({'html':'<span>Enter the required fields</span>'})
except Exception as e:
return json.dumps({'error':str(e)})
finally:
cursor.close()
conn.close()
if __name__ == "__main__":
app.debug = True
app.run()
请确保您准确地发布了您的缩进,否则您的Python代码将毫无意义。 – khelwood
哦!对不起,现在用正确的缩进重新编辑了这篇文章。 @khelwood –
请[edit]包含[mcve]。 – davidism