Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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和会话管理解决此问题?_Python_Flask - Fatal编程技术网

Python 如何使用flask和会话管理解决此问题?

Python 如何使用flask和会话管理解决此问题?,python,flask,Python,Flask,我得到一个错误,如下所示,当我与会话管理一起工作时 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

我得到一个错误,如下所示,当我与会话管理一起工作时

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'
werkzeug.exceptions.BadRequestKeyError
werkzeug.exceptions.HTTPException.wrap..newcls:400错误请求:keyrerror:'Employee_Name'
回溯(最近一次呼叫最后一次)
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\36\lib\site packages\flask\app.py”,第2309行,在调用中__
返回self.wsgi_应用程序(环境,启动响应)
wsgi_应用程序中的文件“C:\Users\Lenovo\AppData\Local\Programs\Python 36\lib\site packages\flask\app.py”,第2295行
response=self.handle\u异常(e)
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\36\lib\site packages\flask\app.py”,第1741行,位于句柄\u异常中
重放(exc_类型、exc_值、tb)
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site packages\flask\\u compat.py”,第35行,在reraise中
增值
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site packages\flask\app.py”,第2292行,位于wsgi\U应用程序中
response=self.full\u dispatch\u request()
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\36\lib\site packages\flask\app.py”,第1815行,完整发送请求
rv=自身处理用户异常(e)
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\36\lib\site packages\flask\app.py”,第1718行,在handle\u user\u异常中
重放(exc_类型、exc_值、tb)
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\site packages\flask\\u compat.py”,第35行,在reraise中
增值
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\36\lib\site packages\flask\app.py”,第1813行,完整发送请求
rv=自我分派请求()
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\36\lib\site packages\flask\app.py”,第1799行,在调度请求中
返回self.view_函数[rule.endpoint](**req.view_参数)
文件“C:\Users\Lenovo\Desktop\intern\Employee\u Management\u system-master\app1.py”,第130行,在admin\u personaldetails中
Employee_Name=userDetails['Employee_Name']
文件“C:\Users\Lenovo\AppData\Local\Programs\Python\36\lib\site packages\werkzeug\datastructures.py”,第431行,在u getitem中__
引发异常。BadRequestKeyError(键)
werkzeug.exceptions.HTTPException.wrap..newcls:400错误请求:keyrerror:'Employee_Name'
HTML:


雇员姓名
雇员身份证
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')
@app.route('/details',methods=['GET',POST'])
def admin_personaldetails():
如果request.method=='POST'或'GET':
userDetails=request.form
如果会话中有“员工ID”:
员工ID=会话['Employee_ID']
如果员工ID=='Admin':
userDetails=request.form
Employee_Name=userDetails['Employee_Name']
Employee_ID=userDetails['Employee_ID']
cur=mysql.connection.cursor()
当前执行(“插入员工(员工姓名,员工ID)值(%s,%s)”,(员工姓名,员工ID))
mysql.connection.commit()
当前关闭()
返回呈现模板('details.html',details=details)
其他:
返回“无管理员权限”
返回呈现模板('login.html')

如果方法是Post,您可以访问以下数据:

request.form['Employee_Name']
request.args.get('Employee_Name', '')
如果方法为GET,您可以访问数据,如下所示:

request.form['Employee_Name']
request.args.get('Employee_Name', '')
所以你需要更换

if request.method == 'POST' or 'GET':

编辑: 此外,在保存从post请求收到的数据后,需要重定向用户,并在html和python文件中用Employee_Name替换Employee_Name,用Employee_ID替换Employee_ID

您的代码与此类似:

@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')

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"

python将Employee_Name读取为Employee_Name。因此,您需要将Employee_Name替换为Employee_Name以避免此错误。我的代码在任何地方都有Employee_Name,甚至在数据库、html、模板中我从未更改过它。我添加了另一个解决方案。您可以发布错误的完整堆栈跟踪吗?我认为它不会作为注释发布。。你必须更新你的问题。你能正确格式化它吗?它很难阅读。你的userDetails字典是如何在app1中填充的。py@TechatTheSparksFoundation它是从html模板调用的空表单。
@app.route("/path", methods=["POST"])
def handle_post_request():
      if request.method == "POST": 
          data = request.form.to_dict()
          # ... do something with data ...
 return " Done"