管理URL参数(Python Flask)

我想在我的网站上使用一些搜索功能。在输出页面中,我将所有结果显示在单个页面中。但是,我想将其分发到许多页面(即每页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))

在这里,我希望在类似“ http://127.0.0.1:5000/my_search/assets?results1=0-100” 的URL上输出。此外,如果我在浏览器中编辑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注入的攻击。你不能信任来自用户的任何输入。

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

sql = ".... LIMIT %s, %s"

g.db.execute(sql, (limit_offset, limit_count))

以上是 管理URL参数(Python Flask) 的全部内容, 来源链接: utcz.com/qa/417139.html

回到顶部