栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Flask中的jQuery自动完成

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flask中的jQuery自动完成

以下是有效的JS / jQuery和Flask代码:

@app.route('/autocomplete', methods=['GET'])def autocomplete():    search = request.args.get('q')    query = db_session.query(Movie.title).filter(Movie.title.like('%' + str(search) + '%'))    results = [mv[0] for mv in query.all()]    return jsonify(matching_results=results)

HTML / jQuery:

<head><link href="//pre.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" rel="Stylesheet"></link><script src="//pre.jquery.com/jquery-2.2.0.min.js"></script><script src="//pre.jquery.com/ui/1.10.2/jquery-ui.js" ></script><script type="text/javascript">$(function() {    $("#autocomplete").autocomplete({        source:function(request, response) { $.getJSON("{{url_for('autocomplete')}}",{     q: request.term, // in flask, "q" will be the argument to look for using request.args }, function(data) {     response(data.matching_results); // matching_results from jsonify });        },        minLength: 2,        select: function(event, ui) { console.log(ui.item.value); // not in your question, but might help later        }    });})</script></head><body>    <div>        <input name="autocomplete" type="text" id="autocomplete" />    </div></body>

依次进行一些解释:’q’是你的搜索项参数名称,如jQuery的$ .getJSON ajax调用中所定义。这已传递给flask,并使用拾取

request.args.get
。据此构造数据库查询,并使用列表推导构造结果。注意,使用列表推导,你不会初始化列表,也不会使用for + append组合;一条优雅的线可以处理一切。

接下来,

jsonify
返回
results
包装为字典的列表,其中包含
matching_results
保存结果列表的键。不要试图将
json.dumps
列表返回给你的
ajax
调用。见这里为什么(TL / DR:安全问题)。

还要注意,我故意更改了一些变量名,以便你可以告诉哪个脚本/烧瓶函数“看到”了哪个变量。例如,ajax调用看不到列表results,而是看到了

matching_results
。那就是里面(现在是javascript的)data对象。

要获取列表matching_results是关键,请使用随附脚本中的模式。它比简单地发送列表更麻烦,但是更安全,最终将允许你使用JS / jquery在客户端执行更复杂的操作。

最后,该

select
选项将用户的选择打印到开发者控制台,仅供参考,这样你就可以实际响应用户的选择。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393923.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号