Как запросить sqlite db с помощью выпадающего списка в flask веб-приложении? - PullRequest
0 голосов
/ 03 мая 2020

У меня есть flask веб-приложение, которое содержит раскрывающийся список, который позволит пользователю выбрать ту обувь, которую они хотят, и я хотел бы запросить базу данных, используя раскрывающийся список, и отобразить информацию и изображение обуви, но я могу » Я не могу понять поток / логи c того, как я должен go об этом. Я пользуюсь flask и SQLite всего несколько недель, поэтому буду признателен за любые советы! Раскрывающийся список в / Choosebrand и соответствующее изображение из БД должно отображаться на следующей странице, /analyse.

РЕДАКТИРОВАТЬ: я забыл упомянуть, что изображение хранится в ББ как BLOB, но у меня также есть изображения в папке stati c. Если есть даже более простой способ, где я могу просто использовать выпадающий список для поиска имени файла в этой папке вместо запроса к базе данных, я был бы очень признателен :) :)

main.py:

#CHOOSE BRAND:
@app.route('/choosebrand')
def choosebrand():
    return render_template('choosebrand.html')

# ANALYSE SHOE (also displays feature matching results):
@app.route('/analyse', methods=['GET', 'POST'])
def analyse():
    #displays dropdown info inputted by user
    brandName = request.form['brandName']
    model = request.form['model']
    colourway = request.form['colourway']
    return render_template('analyseshoe.html', brandName=brandName, model=model, colourway=colourway)

choosebrand. html раскрывающийся список:

<form class="shoelist" method="POST" action="{{ url_for('analyse') }}">
                <div>
                    <label>Brand</label>
                        <select id = "brandName" name="brandName">
                            <option value = "">--SELECT--</option>
                            <option value = "Yeezy">Yeezy</option>
                            getBrandName()
                        </select>
                </div>
                <br>
                <div>
                    <label>Model</label>
                        <select id = "model" name="model">
                            <option value = "">--SELECT--</option>
                            <option value = "Boost 350">Boost 350</option>
                            <option value = "Boost 500">Boost 500</option>
                        </select>
                </div>
                <br>
                <div>
                    <label>Colourway</label>
                        <select id = "colourway" name="colourway">
                            <option value = "">--SELECT--</option>
                            <option value = "Cloud White">Cloud White</option>
                            <option value = "Zebra">Zebra</option>
                            <option value = "Beluga V2">Beluga V2</option>
                            <option value = "Black">Black</option>
                            <option value = "Citrin">Citrin</option>
                            <option value = "Triple White">Triple White</option>
                            <option value = "Yecheil">Yecheil</option>
                            <option value = "Yeshaya">Yeshaya</option>
                            <option value = "Bone White">Bone White</option>
                            <option value = "Salt">Salt</option>                               <option value = "Soft Vision">Soft Vision</option>
                            <option value = "Stone">Stone</option>
                            <option value = "Utility Black">Utility Black</option>
                        </select>
                </div>
                <br>
                <div>
                    <input type="submit" class="submit" value="Analyse Shoe">
                </div>                       
            </form>    

analyseshoe. html:

  <div>
            <h1 class="heading">Analyse Shoe</h1>
            <p class="selection">Authenticity of your {{brandName}} {{model}} {{colourway}}:</p>

        </div>

Shoe.Db:

try:
    sqliteConnection = sqlite3.connect('Shoe.db')
    sqlite_create_table_query = ''' CREATE TABLE ShoeDetails (
                                shoeId INTEGER PRIMARY KEY AUTOINCREMENT,
                                brandName TEXT NOT NULL,
                                model TEXT NOT NULL,
                                colourway TEXT NOT NULL,
                                shoeImage BLOB NOT NULL); '''

1 Ответ

1 голос
/ 04 мая 2020

после request.form вы должны выполнить SQL запрос с выбранными значениями и отправить результат на render_template

Более или менее так:

def analyse():
    #displays dropdown info inputted by user
    selected_brandName = request.form['brandName']
    selected_model = request.form['model']
    selected_colourway = request.form['colourway']

    query = "SELECT * FROM ShoeDetails WHERE brandName = ? AND model = ? AND colourway = ?"
    args = (selected_brandName, selected_model, selected_colourway)

    cur = sqliteConnection.execute(query, args)
    all_results = cur.fetchall()
    cur.close()

    return render_template('analyseshoe.html', results=all_results)

Поскольку некоторые переменные имели то же имя в форме Python, HTML и в базе данных, поэтому я использую префикс selected_, чтобы сделать его более читабельным.

А теперь в шаблоне вы можете использовать results

Если shoeImage сохраняет имя файла изображения на диске в предпочтительной папке /static

{% for item in results %}

<img src="/static/{{ item['shoeImage'] }}>

{% endfor %}

Но если вы сохраняете изображение в базе данных, это создает больше проблем. Потому что вам придется декодировать его в base64, чтобы встроить его непосредственно в HTML

{% for item in results %}

<img src="data:image/jpeg;base64, {{ item['shoeImage'] }}>

{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...