python - 如何获取下拉菜单来激活 2 个不同的 python 代码,flask/sql

标签 python mysql flask linker dropdown

我目前正在尝试创建一个小型 SQL 数据库。

我对 python、SQL、flask 等相当陌生,所以如果它真的很简单,我很抱歉。

所以我已经创建了大部分代码(显示在底部),但我想要两个按钮:id="admin_user_demote"id="admin_user_promote"两者都从同一个“下拉列表(选择)”中提取所需的信息。

我想知道这是否可能,并且任何有助于解决问题的帮助将不胜感激。

<form action="/admin_user." method="post">
    <select class="user_search_admin" type="text" name="user_search_admin" id="user_search_admin">
        {% for loginUser in loginUsers %}
            <option>{{ loginUser.username}}</option>
        {% endfor %}
    </select>
    <button type="submit" class="admin_user" id="admin_user_promote" onclick="/admin_user.admin_user_promote" value="admin_user_promote"> 
        <b>Make Selected User an Admin</b>
    </button>
    <button type="submit" class="delete_user" id="admin_user_demote" onclick="/admin_user.admin_user_demote" value="admin_user_demote"> 
        <b>Make Selected User a regular user</b>
    </button>
</form>

Python 位:

@auth.route('/admin_user', methods=['GET', 'Post'])

def admin_user_promote():
    bla bla bla 

def admin_user_demote():
    bla bla bla 

预先感谢您提供的所有帮助。

最佳答案

你已经非常接近了,你只需要给你的提交按钮一个“名称”,这样你就可以在提交表单时引用它们的值,所以让我们将它们都称为action:

<button name="action" type="submit" class="admin_user" id="admin_user_promote" onclick="/admin_user.admin_user_promote" value="admin_user_promote"> 
    <b>Make Selected User an Admin</b>
</button>
<button name="action" type="submit" class="delete_user" id="admin_user_demote" onclick="/admin_user.admin_user_demote" value="admin_user_demote"> 
    <b>Make Selected User a regular user</b>
</button>

设置名称后,您可以检查它的值:

@auth.route('/admin_user', methods=['GET', 'POST'])
def example():
    if request.method == 'POST':
        action = request.form.get('action')
        selected_user = request.form.get('user_search_admin')

        if action == 'admin_user_promote':
            admin_user_promote(selected_user)
        elif action == 'admin_user_demote':
            admin_user_demote(selected_user)

    return render_template('example.html')

您需要更改 admin_user_promoteadmin_user_demote 函数以接受 selected_user,这样您就可以在函数中使用引用:

def admin_user_demote(user):
    #update database, etc etc with `user`

如果您想要闪现消息(假设用户更新后它们会返回到home页面,并且home页面会查找闪现消息),您可能只想添加另一个返回用户名的函数 - 例如:

def resolve_username(user_id):
    # get the username from the database, etc.
    username = User.query.filter_by(id=user_id).first()
    return username

然后调整您的 View 以符合我们的新规则:

@auth.route('/admin_user', methods=['GET', 'POST'])
def example():
    if request.method == 'POST':
        action = request.form.get('action')
        selected_user = request.form.get('user_search_admin')
        username = resolve_username(selected_user)

        if action == 'admin_user_promote':
            admin_user_promote(selected_user)
            flash('{} promoted'.format(username))
        elif action == 'admin_user_demote':
            admin_user_demote(selected_user)
            flash('{} demoted'.format(username))
        else:
            flash('Something odd happened!')

        return redirect(url_for('home'))

    return render_template('example.html')

关于python - 如何获取下拉菜单来激活 2 个不同的 python 代码,flask/sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48689238/

相关文章:

python - 摧毁一个 Flask Restful token

python - 如何使用用于 python-tornado 的 Facebook graph api 读取 facebook 用户的电子邮件?

python - 关于多个 tf.layer.conv2d 如何相互连接

python - Networkx 程序化网络图可视化

mysql - 在一列中显示数据库中的多个值

php - 使用 MySQL 选择查询时出现问题

php - mysql: 不能将 max_allowed_pa​​cket 设置为任何大于 16MB 的值

python - 当我打开Pygame时,它总是崩溃

python - Flask socketio session 查询字符串

python - 尝试在虚拟环境中安装 flask 时出错