Flask-如何将查询字符串参数放入路由参数中

Flask-如何将查询字符串参数放入路由参数中,flask,query-string,friendly-url,Flask,Query String,Friendly Url,我对Flask非常陌生,一个开始的要求是我需要SEO友好的URL。 比如说,我有一条路线 @app.route('/sales/') @app.route(/sales/<address>) def get_sales(addr): # do some magic here # render template of sales @app.route(“/sales/”) @app.route(/sales/) def get_销售(地址): #在这里施展魔法 #销售的呈现模

我对Flask非常陌生,一个开始的要求是我需要SEO友好的URL。
比如说,我有一条路线

@app.route('/sales/')
@app.route(/sales/<address>)
def get_sales(addr):
  # do some magic here
  # render template of sales
@app.route(“/sales/”)
@app.route(/sales/)
def get_销售(地址):
#在这里施展魔法
#销售的呈现模板
还有一个提交地址的简单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>

提交
函数sendUrl(){
window.location.assign(“/sales/”+document.getElementById(“address”).value);
}
您的路线与以前类似:

@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
@app.route(“/sales/”)

@app.route('/sales/使用javascript从用户界面的角度处理路由。

提交表单时发出的请求与返回的响应之间存在差异。保持查询字符串不变,因为这是与表单交互的正常方式。当您收到查询时,对其进行处理,然后重定向到要显示的url向用户发送y

@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
@app.route(“/sales”)
@app.route(“/sales/”)
def销售(地址=无):
如果request.args中的“地址”:
#处理地址
返回重定向(url\u for('sales',address=地址\u url\u值)
#地址未提交,请显示表单和地址详细信息

由于SEO问题,无法使用单页应用程序方法。我正在考虑使用您的自定义提交事件处理程序,这对SEO有任何负面影响吗?据我所知,搜索引擎机器人将跟踪您网站内的链接进行爬网。表单操作将没有影响。我将避免使用更具技术挑战性的解决方案这只是为了满足人们对SEO的认知。顶级搜索引擎现在非常擅长评估内容而不是结构。你每花一个小时在服务器端的SEO路由上进行黑客攻击,最好是花在生成内容上。这是可以接受的,因为它不涉及任何重定向开销,也不会对SEO产生影响。