如何在不使用表单的情况下将客户端参数传递给服务器端路由?

我有一个简单的flask网络应用。我的 index 模板具有使用javascript和HTML与客户端进行交互的各种方式。我还有一个 form ,提交后,它会路由到另一个flask进程,并使用request.form命令来检索用户提交的数据。

但是,我想做些不同的事情。我想在flask事件上启动javascript重定向,但要包含一个参数,而不要使用 form

例如,我的index.html文件在模板渲染后将显示以下内容:

function startRedirect(parameter) {
    window.location.pathname = '/myRedirect';
}

<input type="checkbox" id="sample" name="sample" onChange="startRedirect(parameter);">

我的flask脚本的一部分将具有:

@app.route('/myRedirect')
def myRedirectFunction():
    # do something with the parameter here
    return render_template('index.html')

我意识到可以使用 form 来完成此操作,但是我很感兴趣在没有 form 的情况下完成此任务。我正在考虑以某种方式使用request.args,但不太了解该怎么做。

daocao1020 回答:如何在不使用表单的情况下将客户端参数传递给服务器端路由?

您可以使用动态路线来捕获简单的输入,并将其传递给路线的功能。

app.route('/myRedirect/<param>')
def myRedirectFunction(param='hello world'):
    return render_template('index.html',param=param)

使用此路由作为重定向,您可以传递单个param(如果对它们进行序列化,则可以传递多个),可用于执行某事。从那里,您可以显示,也可以再次重定向到公共端点,这样用户就不会在url中看到参数。

,

不需要表格或显式redirect,只需将路由和一些参数附加到动态路由即可。

假设您有一个列出公司部门的模型:

class Departments(db.Model):

    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(100),unique=True)

现在您有一个部门选择页面:

@app.route('/departments_home',methods=['GET'])
def departments_home():
    departments = Departments.query.all()
    return render_template('departments_home.html',departments=departments)

在前端,您可能有各种各样的选择,每个选择都提供到相同路线的链接,但具有不同的department_id:

{% for department in departments %}
<a href="{{ url_for('load_department',department_id=department.id) }}" class="button">Click to go to {{ department.name }}</a>
{% endfor %}

现在,您只需要另一条路径来处理此问题,就可以使用在GET请求中传递的变量department_id:

@app.route('/load_department/<department_id>',methods=['GET'])
def load_department(department_id):
   department = Departments.query.get(int(department_id))
   department_data = # do stuff here with the specific department
本文链接:https://www.f2er.com/3121205.html

大家都在问