【问题标题】:Flask app keeps returning error 500Flask 应用程序不断返回错误 500
【发布时间】:2015-12-23 20:35:30
【问题描述】:

我一直在通过教程学习如何使用 Flask 框架,但是我的 app.py 中的代码一直返回错误 500,我不知道为什么(我的代码与教程相同)。

这里是 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)

这是一个注册系统。

【问题讨论】:

  • if 块中app.run 之前添加app.debug = True 将为您提供更多信息。

标签: python mysql django database flask


【解决方案1】:

500 错误通常意味着您的 python 中存在错误,而不是当您运行时尝试使用 app.run(port=5002,debug=True) 这不会解决您的问题...但它应该告诉您发生了什么

【讨论】:

    【解决方案2】:

    我知道您正在学习本教程,因为我遇到了同样的问题 - 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 来解决此问题。:)

    【讨论】:

      【解决方案3】:

      我知道本教程,几分钟前我遇到了同样的错误。 我变了——

      _hashed_password = generate_password_hash(_password)
      

      _hashed_password = _password
      

      它成功了! :)。

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

      编码愉快!

      【讨论】:

        猜你喜欢
        • 2020-10-03
        • 2021-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        相关资源
        最近更新 更多