为了账号安全,请及时绑定邮箱和手机立即绑定

HTML 表单(python、flask):有一个按钮向方法提交唯一的参数

HTML 表单(python、flask):有一个按钮向方法提交唯一的参数

智慧大石 2023-12-19 10:37:08
我现在有一个很好的 HTML 表单,可以通过按钮调用方法。我想要做的是创建几个调用相同方法的新按钮,但每个按钮传递不同的参数。具体用例是:我的按钮现在使用 get_random_album() 检索随机相册。我想制作“爵士”、“古典”和“摇滚”音乐分别调用 get_random_album(genre=<genre>). 的按钮移动平均维数:from flask import Flask,redirect# Below import commented out for MVE# from discogs import get_random_album# TODO: look at more advanced form builders# Create app instanceapp = Flask(__name__)# Create homepage with button@app.route("/")def home():    return """    <html><body>    <h2> Spin yo records </h2>        <form action="/query">            <input type='submit' value="I'm Feeling Lucky">    </body></html>    """# Backend query to discogs@app.route("/query")def link():    # return redirect(get_random_album())    # Real implementation commented out    # Scratch implementation here    def get_random_album(genre=None):        url = "https://www.google.com"         if genre == 'Jazz':            return url + "/search?q=jazz"        if genre == 'Classical':            return url + "/search?q=classical"        if genre == 'Rock':            return url + "/search?q=rock"        return url    return redirect(get_random_album())# Run appif __name__ == "__main__":    app.run(debug=True,port=600)实际项目
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

首先创建具有相同name但不同的按钮value


@app.route("/")

def home():

    return """

    <html>

    <body>

    <h2> Spin yo records </h2>


        <form action="/query">

            <input type="submit" name="selected_genre" value="Jazz">

            <input type="submit" name="selected_genre" value="Classic">

            <input type="submit" name="selected_genre" value="Rock">

            <input type="submit" name="selected_genre" value="I'm Feeling Lucky">

        </form>

    </body>

    </html>

    """

接下来,您可以使用 和按钮中使用的名称来选择valuerequest


from flask import request

import random


@app.route("/query")

def link():

    allowed_values = ('Jazz', 'Classic', 'Rock')


    genre = request.args.get("selected_genre")


    # "I'm Feeling Lucky"

    if genre not in allowed_values:

        genre = random.choice(allowed_values)


    genre = genre.lower()


    url = f"https://www.google.com/search?q={genre}" 


    return redirect(url)

完整示例


from flask import Flask, redirect, request

import random


app = Flask(__name__)


@app.route("/")

def home():

    return """

    <html>

    <body>

    <h2> Spin yo records </h2>


        <form action="/query">

            <input type="submit" name="selected_genre" value="Jazz">

            <input type="submit" name="selected_genre" value="Classic">

            <input type="submit" name="selected_genre" value="Rock">

            <input type="submit" name="selected_genre" value="I'm Feeling Lucky">

        </form>

    </body>

    </html>

    """



@app.route("/query")

def link():

    allowed_values = ('Jazz', 'Classic', 'Rock')


    genre = request.args.get("selected_genre")


    if genre not in allowed_values:

        genre = random.choice(allowed_values)


    genre = genre.lower()


    url = f"https://www.google.com/search?q={genre}" 


    return redirect(url)



if __name__ == "__main__":

    app.run(debug=True,port=600)

在以前的版本中,它在 url 中发送 value ,即。 /query?selected_genre=Rock - 这样每个人都可以看到它,或者很容易它可以尝试使用自己的价值。这就是为什么我使用 allowed_values 来阻止它。

要从 url 中隐藏选定的流派,您必须使用:

  • <form ... method="POST">

  • @app.route(..., methods=['GET', 'POST'])(或methods=['POST']

  • request.form代替request.args


完整示例

from flask import Flask, redirect, request

import random


app = Flask(__name__)


@app.route("/")

def home():

    return """

    <html>

    <body>

    <h2> Spin yo records </h2>


        <form action="/query" method="POST">

            <input type="submit" name="selected_genre" value="Jazz">

            <input type="submit" name="selected_genre" value="Classic">

            <input type="submit" name="selected_genre" value="Rock">

            <input type="submit" name="selected_genre" value="I'm Feeling Lucky">

        </form>

    </body>

    </html>

    """


@app.route("/query", methods=['GET', 'POST'])

def link():

    allowed_values = ('Jazz', 'Classic', 'Rock')


    genre = request.form.get("selected_genre")


    if genre not in allowed_values:

        genre = random.choice(allowed_values)


    genre = genre.lower()


    url = f"https://www.google.com/search?q={genre}" 


    return redirect(url)



if __name__ == "__main__":

    app.run(debug=True, port=600)

如果您想在按钮上使用不同的文本但仍发送相同的value,那么您可能需要隐藏 <input> 和 value 但是每个按钮都需要分开 <form>


@app.route("/")

def home():

    return """

    <html>

    <body>

    <h2> Spin yo records </h2>


        <form action="/query" method="POST">

            <input type="hidden" value="Jazz" name="selected_genre">

            <input type="submit" value="The Best Jazz Music">

        </form>


        <form action="/query" method="POST">

            <input type="hidden" value="Classic" name="selected_genre">

            <input type="submit" value="The Best Classic Music">

        </form>


        <form action="/query" method="POST">

            <input type="hidden" value="Rock" name="selected_genre">

            <input type="submit" value="The Best Rock Music">

        </form>


        <form action="/query" method="POST">

            <input type="hidden" value="random" name="selected_genre">

            <input type="submit" value="I'm Feeling Lucky">

        </form>

    </body>

    </html>

    """

或者您必须使用 <button> 而不是 <input>


@app.route("/")

def home():

    return """

    <html>

    <body>

    <h2> Spin yo records </h2>

        <form action="/query" method="POST">

            <button type="submit" name="selected_genre" value="Jazz">The Best Jazz Music</button>

            <button type="submit" name="selected_genre" value="Classic">The Best Classic Music</button>

            <button type="submit" name="selected_genre" value="Rock">The Best Rock Music</button>

            <button type="submit" name="selected_genre" value="random">I'm Feeling Lucky</button>

        </form>

    </body>

    </html>

    """


查看完整回答
反对 回复 2023-12-19
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信