Flask - 如何将查询字符串参数获取到路由参数中
Flask - how to get query string parameters into the route parameters
我是 Flask 的新手,开始的要求之一是我需要 SEO 友好的 url。
我有一条路线,说
@app.route('/sales/')
@app.route(/sales/<address>)
def get_sales(addr):
# do some magic here
# render template of sales
和一个提交地址的简单 GET 表单。
<form action={{ url_for('get_sales') }}>
<input type='text' name='address'>
<input type=submit>
</form>
在提交表单时,请求转到 /sales/?address=somevalue 而不是标准路径。我必须有哪些选项才能将该表单提交给 /sales/somevalue?
我觉得我缺少一些非常基本的东西。
我不确定有没有办法像那样访问查询字符串。路由装饰器仅适用于基础 url(减去查询字符串)
如果你想要路由处理程序中的地址,那么你可以像这样访问它:
request.args.get('address', None)
你的路由处理程序看起来更像:
@pp.route('/sales')
def get_sales():
address = request.args.get('address', None)
但是如果我要加上我的 2 美分,您可能希望使用 POST 作为表单发布的方法。它使得从 Web 服务器获取数据 (GET) 和向 Web 服务器发送数据 (POST) 语义分离更容易:)
您需要使用 JavaScript 来实现此目的,因此您的模板将变为:
<input type='text' id='address'>
<button onclick="sendUrl();">submit</button>
<script>
function sendUrl(){
window.location.assign("/sales/"+document.getElementById("address").value);
}
</script>
你的路线与之前相似:
@app.route('/sales/')
@app.route('/sales/<address>')
def get_sales(address="Nowhere"):
# do some magic here
# render template of sales
return "The address is "+address
然而,这并不是做这种事情的最佳方式。另一种方法是让 Flask 提供数据并使用 javascript 中的 single-page-application framework 从用户界面的角度处理路由。
提交表单时的请求和返回的响应是不一样的。保持查询字符串不变,因为这是与表单交互的正常方式。当您收到查询时,处理它然后重定向到您要向用户显示的 url。
@app.route('/sales')
@app.route('/sales/<address>')
def sales(address=None):
if 'address' in request.args:
# process the address
return redirect(url_for('sales', address=address_url_value)
# address wasn't submitted, show form and address details
我是 Flask 的新手,开始的要求之一是我需要 SEO 友好的 url。
我有一条路线,说
@app.route('/sales/')
@app.route(/sales/<address>)
def get_sales(addr):
# do some magic here
# render template of sales
和一个提交地址的简单 GET 表单。
<form action={{ url_for('get_sales') }}>
<input type='text' name='address'>
<input type=submit>
</form>
在提交表单时,请求转到 /sales/?address=somevalue 而不是标准路径。我必须有哪些选项才能将该表单提交给 /sales/somevalue? 我觉得我缺少一些非常基本的东西。
我不确定有没有办法像那样访问查询字符串。路由装饰器仅适用于基础 url(减去查询字符串)
如果你想要路由处理程序中的地址,那么你可以像这样访问它:
request.args.get('address', None)
你的路由处理程序看起来更像:
@pp.route('/sales')
def get_sales():
address = request.args.get('address', None)
但是如果我要加上我的 2 美分,您可能希望使用 POST 作为表单发布的方法。它使得从 Web 服务器获取数据 (GET) 和向 Web 服务器发送数据 (POST) 语义分离更容易:)
您需要使用 JavaScript 来实现此目的,因此您的模板将变为:
<input type='text' id='address'>
<button onclick="sendUrl();">submit</button>
<script>
function sendUrl(){
window.location.assign("/sales/"+document.getElementById("address").value);
}
</script>
你的路线与之前相似:
@app.route('/sales/')
@app.route('/sales/<address>')
def get_sales(address="Nowhere"):
# do some magic here
# render template of sales
return "The address is "+address
然而,这并不是做这种事情的最佳方式。另一种方法是让 Flask 提供数据并使用 javascript 中的 single-page-application framework 从用户界面的角度处理路由。
提交表单时的请求和返回的响应是不一样的。保持查询字符串不变,因为这是与表单交互的正常方式。当您收到查询时,处理它然后重定向到您要向用户显示的 url。
@app.route('/sales')
@app.route('/sales/<address>')
def sales(address=None):
if 'address' in request.args:
# process the address
return redirect(url_for('sales', address=address_url_value)
# address wasn't submitted, show form and address details