【发布时间】:2021-12-04 07:54:37
【问题描述】:
我有一个可排序的列表作为连接到 sqlite 的 web 应用程序。 我想使用下拉菜单将新条目添加到列表中。 我未能使列表条目成为提交新值的表单。
app.py:
import sqlite3, logging
from flask import Flask, render_template, request, url_for, flash, redirect, jsonify
from werkzeug.exceptions import abort
app = Flask(__name__, static_url_path='/static')
app.config['SECRET_KEY'] = 'NotForYou'
def get_db_connection():
conn = sqlite3.connect('/root/ilms/ilmh.db')
conn.row_factory = sqlite3.Row
return conn
@app.route('/potm',methods=["POST","GET"])
def potm():
conn = get_db_connection()
if request.method == 'POST':
Name = request.args['newPOTM']
maxID = conn.execute('SELECT MAX(id) FROM POTM')
newID = maxID + 1
print(newID)
maxOrder = conn.execute('SELECT MAX(listorder) FROM POTM')
newOrder = maxOrder + 1
print(newOrder)
conn.execute('INSERT INTO POTM (id, player, listorder) VALUES (?, ?, ?)',
(newID, Name, newOrder))
conn.commit()
conn.close()
return redirect(url_for('potm'))
dragdrop = conn.execute("SELECT * FROM POTM ORDER BY listorder ASC")
dropdown = conn.execute('SELECT Name FROM alltime ORDER BY Name ASC').fetchall()
return render_template('potm.html', dragdrop=dragdrop, dropdown=dropdown)
HTML:
<div class="container">
<div class="row justify-content-md-center">
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Add Player
</button>
<div class="dropdown-menu pre-scrollable" aria-labelledby="dropdownMenu2">
<form method="POST">
{% for item in dropdown %}
<input type="text" class="dropdown-item" name="newPOTM" value="{{ item['Name'] }}" onclick=this.form.submit()>
</input>
{% endfor %}
</form>
</div>
</div>
</div>
</div>
显示下拉列表和列表,但是当我单击列表对象时,它会导致
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: 浏览器(或代理)发送了此服务器无法理解的请求。 KeyError: 'newPOTM'
【问题讨论】:
-
尝试使用
Name = request.form.get('newPOTM')代替Name = request.args['newPOTM'],或Name = request.form['newPOTM']) -
@Ghost Ops 抱歉,之前尝试过这些并从 request.form() 开始。 request.form.get 导致 TypeError: 'method' object is not subscriptable。 request.form 导致提到的 400 错误
标签: python html forms flask request