gpt4 book ai didi

python - 管理 URL 的参数(Python Flask)

转载 作者:IT老高 更新时间:2023-10-28 21:17:26 29 4
gpt4 key购买 nike

我想在我的网站上添加一些搜索功能。在输出页面中,我在单页中获取所有结果。但是,我想将它分发到许多页面(即 100 个搜索/页)。为此,我在“urlfor”中传递了一些默认搜索,但它不起作用。我知道我犯了一个小错误,但我没有发现它。

下面是我的代码:

@app.route('/', methods=['GET', 'POST'])
def doSearch():
entries=None
error=None
if request.method=='POST':
if request.form['labelname']:
return redirect(url_for('show_results',results1='0-100', labelname=request.form['labelname'] ))
else:
error='Please enter any label to do search'
return render_template('index.html',entries=entries, error=error)




@app.route('/my_search/<labelname>')
def show_results(labelname=None, resultcount=None, results1=None):
if not session.get('user_id'):
flash('You need to log-in to do any search!')
return redirect(url_for('login'))

else:
time1=time()
if resultcount is None:
total_count=g.db.execute(query_builder_count(tablename='my_data',nametomatch=labelname, isextension=True)).fetchall()[0][0]

limit_factor=" limit %s ,%s"%(results1.split('-')[0],results1.split('-')[1])

nk1=g.db.execute(query_builder(tablename='my_data',nametomatch=labelname, isextension=True) + limit_factor)
time2=time()
entries=[]
maxx_count=None
for rows in nk1:
if maxx_count is None:
maxx_count=int(rows[0])
entries.append({"xmlname":rows[1],'xmlid':rows[2],"labeltext":rows[12]})
return render_template('output.html', labelname=labelname,entries=entries, resultcount=total_count, time1=time2-time1, current_output=len(entries))

我想在 URL 上输出类似“http://127.0.0.1:5000/my_search/assets?results1=0-100”另外,如果我在浏览器中编辑 url 地址,就像我想要下一个 100 个结果一样,我可以在“http://127.0.0.1:5000/my_search/assets?results1=100-100”上得到它

注意:这里我使用 sqlite 作为后端;所以我将在我的查询中使用“limit_factor”来限制我的结果。而“query_builder”和“query_builder_count”只是生成复杂sql查询的简单函数。

但我得到的错误是“NoneType”不能拆分。它停在 "limit_factor"

这里的限制因子只是我应用的一个过滤器;但我想应用更多过滤器,例如我想按其位置搜索“http://127.0.0.1:5000/my_search/assets?results1=0-100&location=asia

最佳答案

函数参数只映射到路由变量。这意味着在您的情况下,show_results 函数应该只有一个参数,即 labelname。您甚至不必将其默认为 None,因为它始终必须设置(否则路由将不匹配)。

要获取查询参数,请使用 flask.request.args :

from flask import request

@app.route('/my_search/<labelname>')
def show_results(labelname=None):
results1 = request.args.get('results1', '0-100')
...

顺便说一句,您最好不要按照您的方式构建 SQL,使用占位符和变量。您的代码容易受到 SQL injection 的攻击.您不能相信来自用户的任何输入。

这样做的正确方法取决于实际的数据库,但例如如果你使用 MySQL,你会这样做(不是我没有使用 % 运算符):

sql = ".... LIMIT %s, %s"
g.db.execute(sql, (limit_offset, limit_count))

关于python - 管理 URL 的参数(Python Flask),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12871153/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com