#python #html #forms #flask #request
Вопрос:
У меня есть сортируемый список в виде веб-приложения, подключенного к sqlite. Я хочу добавить новые записи в список с помощью выпадающего меню. Я не могу сделать записи в списке формой, которая отправляет новые значения.
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>
Раскрывающийся список и список отображаются, но когда я нажимаю на объект списка, это приводит к
веркзег.исключения.Ошибка BadRequestKeyError: 400 Неверных запросов: Браузер (или прокси-сервер) отправил запрос, который этот сервер не смог понять. Ключевая ошибка: «newPOTM»
Комментарии:
1. попробуйте
Name = request.form.get('newPOTM')
вместоName = request.args['newPOTM']
, илиName = request.form['newPOTM'])
2. @Ghost Ops Извините, пробовал это раньше и начал с request.form(). request.form.получить результаты в ошибке типа: объект «метод» не может быть подписан. запрос. форма приводит к указанной ошибке 400
Ответ №1:
Получилось: я пропустил определение действия формы. с помощью request.form() я передал проблему.