当前位置: 首页 > 面试题库 >

管理URL参数(Python Flask)

谷梁博易
2023-03-14
问题内容

我想在我的网站上使用一些搜索功能。在输出页面中,我将所有结果显示在单个页面中。但是,我想将其分发到许多页面(即每页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,以便更加符合SEO或者个性化需求 注意事项:   本功能只提供URL规则的管理,具体使用还需要模块支持自定义URL 二、子功能导航 1.添加规则 2.管理规则 三、功能详解 1.添加规则 1).如何进入本功能 导航栏 选择扩展 -> 菜单栏 选择URL规则管理 -> 添加规则 2).界面解释 点击后弹出如下界面 界面详述 1). url规则名称

  • 我改变了我的Wordpress目录结构。以下是我所拥有的: 所以我有一个包含插件和主题的内容目录。然后我有一个wordpress目录,其中包含核心WP文件,减去WP内容文件夹。 有了这个新结构,我必须用这个网址访问WP后端: 有没有办法改变它,这样我就可以像这样访问它: 我不希望wordpress在URL中。这是我需要做的htaccess更新,还是我可以在wp-config.php文件中使用的设置

  • 问题内容: 我有这个网址: 我需要的是能够将“行”的url参数值更改为我指定的值,比方说10。如果“行”不存在,则需要将其添加到url的末尾并添加我已经指定的值(10)。 问题答案: 在学到很多东西之后的四年后,回答我自己的问题。特别是您不应该将jQuery用于所有功能。我创建了一个可以解析/字符串化查询字符串的简单模块。这使得修改查询字符串变得容易。 您可以按以下方式使用查询字符串:

  • 本文向大家介绍jquery获取url参数及url加参数的方法,包括了jquery获取url参数及url加参数的方法的使用技巧和注意事项,需要的朋友参考一下 使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作,下面通过文字说明加代码分析的形式给大家解析,具体详情请看下文。 1、jquery获取url很简单,代码如下: 其实只是用到了javascript的基础的wind

  • 本文向大家介绍javascritp添加url参数将参数加入到url中,包括了javascritp添加url参数将参数加入到url中的使用技巧和注意事项,需要的朋友参考一下 将对象参数加入到url中,如果原来url中有则覆盖 js代码

  • 我正在开发一款用于拍照的Android应用程序。首先,用户拍摄个人资料图片。此图像的Url保存在Firebase实时数据库中。用于检索以下下载URL的示例代码 这个url被保存在数据库中的多个地方,我需要在那里加载用户的个人资料图片——他的每个帖子的条目,他给应用程序上其他人的消息,等等。 现在,如果他以后更改个人资料图片,我有以下两个选项 更新每个数据库条目-非常繁琐、暴力和资源密集 那么,有没