如何获得一个下拉列表来激活2个不同的python代码,flask/sq

2024-04-25 07:59:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个小的SQL数据库。你知道吗

我对python、SQL、flask等还比较陌生,如果真的很简单,我很抱歉。你知道吗

因此,我已经创建了大部分代码(显示在底部),但是我希望两个按钮:id="admin_user_demote"id="admin_user_promote"都从相同的“dropdown(select)”中提取它们所需的信息。你知道吗

我想知道这是否可能,任何帮助导致一个解决方案将不胜感激。你知道吗

<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 

谢谢你的帮助。你知道吗


Tags: formidsqlsearchadmintypebuttonselect
1条回答
网友
1楼 · 发布于 2024-04-25 07:59:35

你非常接近,你只需要给你的提交按钮一个'名字',这样你就可以在表单提交时引用它们的值,所以让我们把它们都称为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

然后调整视图以符合我们的新规则:

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

相关问题 更多 >