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

Python 如何在不使用表单的情况下将客户端参数传递给服务器端路由?,python,flask,Python,Flask,我有一个简单的Flaskweb应用程序。我的索引模板有多种使用javascript和HTML与客户端交互的方式。我还有一个表单,在提交时,它将路由到另一个flask进程,并使用request.form命令检索用户提交的数据 然而,我想做一些不同的事情。我想在javascript事件上启动Flask重定向,但包含一个参数,不使用表单 例如,我的index.html文件在模板呈现后会显示如下内容: function startRedirect(parameter) { window.loca

我有一个简单的
Flask
web应用程序。我的索引模板有多种使用javascript和
HTML
与客户端交互的方式。我还有一个表单,在提交时,它将路由到另一个flask进程,并使用
request.form
命令检索用户提交的数据

然而,我想做一些不同的事情。我想在
javascript
事件上启动
Flask
重定向,但包含一个参数,不使用表单

例如,我的
index.html
文件在模板呈现后会显示如下内容:

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

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

我意识到这可以通过使用表单来完成,但我对在没有表单的情况下完成这项任务感兴趣。我在考虑如何使用
request.args
,但不太明白该怎么做。

您可以使用动态路由捕获简单输入并将其传递给路由函数

app.route(“/myRedirect/”)
def myRedirectFunction(param='hello world'):
返回呈现模板('index.html',param=param)

使用此路由作为重定向,您可以传递一个
参数(如果序列化它们,则传递多个),您可以使用它来执行某些操作。从那里,您可以显示或重新重定向到公共端点,这样用户就不会在url中看到参数。

不需要表单或显式的
重定向
,只需将路由和一些参数附加到动态路由即可

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

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)
在前端,您可能有多种选择,每种选择都提供指向同一路线但具有不同部门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 %}
{%部门中的部门%}
{%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
@app.route('/load\u department/',methods=['GET'])
def加载部门(部门id):
department=Departments.query.get(int(department\u id))
department_data=#在这里与特定的部门合作

我不太确定这里是否有复选框(为什么没有按钮?)
@roganjosh您的建议对于启动重定向非常有效,但是有没有方法将参数传递给该重定向?您是否考虑过使用动态路由以便可以将参数传递给路由的功能
app.route(“/myRedirect/”)
@James这是我非常感兴趣的东西,你能提供一个简单的用例示例吗?当然,你想传递什么参数
其中右侧的
param
是Jinja2在呈现模板时可以访问的,并且您有一个类似于
@app.route('some_route/'))
的视图函数,它正在查找由
param=param
左侧定义的名称,为什么重定向?直接去路线树。但这不是他问的。当然,但让我觉得他们可能偏离了方向。我们拭目以待。
@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