Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask应用程序不断返回错误500_Python_Mysql_Django_Database_Flask - Fatal编程技术网

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

Python Flask应用程序不断返回错误500,python,mysql,django,database,flask,Python,Mysql,Django,Database,Flask,我一直在通过教程学习如何使用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()

我一直在通过教程学习如何使用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)
从flask导入flask,呈现_模板,json,请求
从flask.ext.mysql导入mysql
从werkzeug导入生成密码散列,检查密码散列
mysql=mysql()
app=烧瓶(名称)
#MySQL配置
app.config['MYSQL\u DATABASE\u USER']='root'
app.config['MYSQL\u DATABASE\u PASSWORD']='root'
app.config['MYSQL\u DATABASE\u DB']='BucketList'
app.config['MYSQL\u DATABASE\u HOST']='localhost'
mysql.init_应用程序(应用程序)
@应用程序路径(“/”)
def main():
返回渲染模板('index.html')
@应用程序路径(“/showSignUp”)
def showSignUp():
返回呈现模板('signup.html')
@app.route('/signUp',methods=['POST','GET'])
def signUp():
尝试:
_name=request.form['inputName']
_电子邮件=请求。表单['inputEmail']
_密码=请求。表单['inputPassword']
#验证接收到的值
如果名称、电子邮件和密码:
#好的,我们打电话给MySQL
conn=mysql.connect()
游标=连接游标()
_哈希密码=生成密码哈希(\u密码)
callproc('sp_createUser',(\u名称,\u电子邮件,\u哈希密码))
data=cursor.fetchall()
如果len(数据)为0:
康涅狄格州提交
返回json.dumps({'message':'User created successfully!'})
其他:
返回json.dumps({'error':str(数据[0]))
其他:
返回json.dumps({'html':'Enter the required fields'})
例外情况除外,如e:
返回json.dumps({'error':str(e)})
返回回溯。格式_exc()
最后:
cursor.close()
康涅狄格州关闭
如果名称=“\uuuuu main\uuuuuuuu”:
应用程序运行(端口=5002)

它用于注册系统。

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

我知道你在学习本教程,因为我也有同样的问题-

问题是,在存储过程中,他们让您设置一个大小为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即可解决此问题。:)

我知道这个教程,几分钟前我也遇到了同样的错误。 我变了-

_hashed_password = generate_password_hash(_password)

它成功了!:)

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


快乐编码

app.run
之前的
if
块中添加
app.debug=True
将提供更多信息。
_hashed_password = _password