与会话管理一起使用时,出现如下错误。
werkzeug.exceptions.BadRequestKeyError
werkzeug.exceptions.HTTPException.wrap.<locals>.newcls: 400 Bad Request: KeyError: 'Employee_Name'
Traceback (most recent call last)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\Lenovo\Desktop\intern\Employee_Management_system-master\app1.py", line 130, in admin_personaldetails
Employee_Name = userDetails['Employee_Name']
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site-packages\werkzeug\datastructures.py", line 431, in __getitem__
raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.HTTPException.wrap.<locals>.newcls: 400 Bad Request: KeyError: 'Employee_Name'
HTML:
<form action="details" method="POST">
Employee_Name <input type="text" name="Employee_Name"/>
Employee_ID <input type="text" name="Employee_ID"/>
<input type="submit" name="SUBMIT" value="SUBMIT"/>
</form>
Python:
@app.route('/details', methods=['GET', 'POST'])
def admin_personaldetails():
if request.method == 'POST' or 'GET':
userDetails = request.form
if 'Employee_ID' in session:
Employee_ID = session['Employee_ID']
if Employee_ID=='Admin':
userDetails=request.form
Employee_Name = userDetails['Employee_Name']
Employee_ID = userDetails['Employee_ID']
cur = mysql.connection.cursor()
cur.execute("INSERT INTO Employee(Employee_Name, Employee_ID) VALUES(%s, %s)",(Employee_Name, Employee_ID))
mysql.connection.commit()
cur.close()
return render_template('details.html', Details = Details)
else:
return "<h1>No Admin rights</h1>"
return render_template('login.html')
答案 0 :(得分:1)
如果方法是“发布”,则可以如下所示访问数据:
private redirectToFirstPage() {
const query = { page: this.currentPage.toString(), dataLakeStatus: '1', dataLakeStatus: '2' };
this.$router.push({ query });
}
如果方法是GET,则可以按以下方式访问数据:
request.form['Employee_Name']
所以您需要更换
request.args.get('Employee_Name', '')
通过
if request.method == 'POST' or 'GET':
编辑: 另外,在保存从发布请求中收到的数据后,您需要重定向用户,并在html和python文件中将Employee_Name替换为employee_name并将Employee_ID替换为employee_id。
您的代码将与此类似:
if request.method == 'POST':
编辑:读取数据的另一种方法:
@app.route('/details', methods=['GET', 'POST'])
def admin_personaldetails():
if request.method == 'POST':
userDetails = request.form
if 'Employee_ID' in session:
Employee_ID = session['Employee_ID']
else:
Employee_ID = ""
if Employee_ID=='Admin':
userDetails=request.form
Employee_Name = userDetails['employee_name']
Employee_ID = userDetails['employee_id']
cur = mysql.connection.cursor()
cur.execute("INSERT INTO Employee(Employee_Name, Employee_ID)
VALUES(%s, %s)",(Employee_Name, Employee_ID))
mysql.connection.commit()
cur.close()
return redirect('/details?success=1')
else:
return redirect('/details?success=0')
success = int(request.args.get('success', -100))
if suucess == 0:
return "<h1>No Admin rights</h1>"
return render_template('details.html')
答案 1 :(得分:1)
request.form
是一个不可更改的Multidict,因此您可以尝试使用to_dict()
方法获取完整的数据。
代码:-
@app.route("/path", methods=["POST"])
def handle_post_request():
if request.method == "POST":
data = request.form.to_dict()
# ... do something with data ...
return " Done"