Flask应用程序不断返回错误500

时间:2015-09-25 23:06:29

标签: python mysql django database flask

我一直在学习如何使用教程使用Flask框架,但我的app.py中的代码一直返回错误500,我无法弄清楚原因(我的代码与教程相同)。< / p>

这是app.py:

from flask import Flask, render_template, json, request
from flask.ext.mysql import MySQL
from werkzeug import generate_password_hash, check_password_hash

mysql = MySQL()
app = Flask(__name__)

# MySQL configurations
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'BucketList'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)


@app.route('/')
def main():
    return render_template('index.html')

@app.route('/showSignUp')
def showSignUp():
    return render_template('signup.html')


@app.route('/signUp',methods=['POST','GET'])
def signUp():
    try:
        _name = request.form['inputName']
        _email = request.form['inputEmail']
        _password = request.form['inputPassword']

        # validate the received values
        if _name 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,_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)})
        return traceback.format_exc()
    finally:
        cursor.close() 
        conn.close()

if __name__ == "__main__":
    app.run(port=5002)

这是一个注册系统。

3 个答案:

答案 0 :(得分:1)

500错误通常意味着你的python中有一个错误,而不是当你运行试试它{h} app.run(port=5002,debug=True)这不会解决你的问题...但它应该告诉你发生了什么

答案 1 :(得分:1)

我知道您正在关注本教程,因为我遇到了同样的问题 - http://code.tutsplus.com/tutorials/creating-a-web-app-from-scratch-using-python-flask-and-mysql--cms-22972

问题是,在存储过程中,他们设置了一个大小为20的列:

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_createUser`(
    IN p_name VARCHAR(20),
    IN p_username VARCHAR(20),
    IN p_password VARCHAR(20)
)

但是当他们告诉你在你的python代码中加密密码时,就像你一样:

_hashed_password = generate_password_hash(_password)

您创建的字符串长度超过20个字符,因此如果您在调试模式下运行此字符串,则会看到错误显示列密码的列​​长度无效。我通过将列的大小更改为100来修复此问题。:)

答案 2 :(得分:0)

我知道这个教程,几分钟后我收到同样的错误。 我换了 -

_hashed_password = generate_password_hash(_password)

_hashed_password = _password

它有效! :)

我假设原因是我们为密码字段声明的大小小于我们散列时实际需要的大小。但是现在,你可以做同样的事情并让应用程序运行。

快乐的编码!