elementui 远程搜索选择框+后端Flask

支持远程搜索的select框是一个必备的功能,本文分享如何使用elmentui 实现从后端flask获取数据的el-autocomplete 控件。类似输入一个京字,就从数据库查询所有的城市,模糊匹配到带有京字的城市,并且可以选中。

在这里插入图片描述

1 前端

前端要使用到el-autocomplete控件,输入控件后的提示通过querySearch实现, 选择之后的操作通过handleSelect实现。

<el-autocomplete
          v-model="city"
          :fetch-suggestions="querySearch"
          placeholder="请输入城市名称"
          @select="handleSelect"
          style="width: 300px; margin-left: 10px;"
          clearable
      >
      </el-autocomplete>
      
      
data(){
    return{
      city: '',
    }
  },
  
  methods: {
    // cb 为回调函数需要把后端返回的值传给它
    querySearch(queryString, cb) {
      // 发送请求到Flask后端获取模糊搜索结果
      getCities(queryString).then(res=>{
        // 返回数据的形式是 [{value:'xxxx'}, {value:'yyyyy'} ...] 这样
        cb(res.data.data)
      })
    },
    handleSelect(item) {
      this.city = item.value; // 选择后将城市名存储在city变量中
      this.$message('加载'+this.city+'数据成功', 'success', 3000)
    },
  },

getCities

// 获取城市列表
export function  getCities(queryString){
    return request({
        url: `/tour/cities`,
        method: 'get',
        params:{ keyword: queryString }
    });
}

2 后端

我们要读取景点列表中所有的城市数据,形成一个[{value:‘xxxx’}, {value:‘yyyyy’} …] 形式的数据返回就可以。

# 获取城市
@main.route('/tour/cities', methods=['GET'])
def search_cities():
    keyword = request.args.get('keyword', '')
    try:
        # 查询并去重城市名称,使用SQLAlchemy的distinct
        cities = Tour.query.with_entities(distinct(Tour.city)).filter(Tour.city.ilike(f'%{keyword}%')).all()

        # 将结果转换为字典列表
        result = [{'value': city[0]} for city in cities]
        return make_response(code=0, data=result)
    except Exception as e:
        return make_response(code=1, message=str(e))

3 实现效果

在这里插入图片描述

下一期就来做根据选择框的数据来加载echarts-wordcloud词云(分析景点精选评论文本主题词)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flask 中,要读取 web 前端页面上的某个信息,可以通过 POST 请求将数据传递到后端服务器,然后在 Flask 中使用 request 对象来获取数据。 具体来说,可以在前端页面中使用 AJAX 技术将数据以 POST 请求发送到后端服务器的指定路由,然后在 Flask 的路由函数中使用 request 对象来获取数据。例如以下代码可以在前端页面中输入一个字符串并且在后端服务器中将其打印出来: 前端页面 index.html: ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Flask AJAX Demo</title> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> </head> <body> <input type="text" id="input"> <button id="submit">Submit</button> <div id="result"></div> <script> $(function() { $('#submit').click(function() { $.ajax({ url: '/process', type: 'POST', data: {input: $('#input').val()}, success: function(result) { $('#result').html(result); } }); }); }); </script> </body> </html> ``` Flask 后端服务器 app.py: ``` from flask import Flask, request app = Flask(__name__) @app.route('/') def index(): return app.send_static_file('index.html') @app.route('/process', methods=['POST']) def process(): input_string = request.form['input'] print(input_string) return input_string if __name__ == '__main__': app.run() ``` 在浏览器中打开 http://localhost:5000/ 即可看到一个输入和一个提交按钮,输入一些文字并且点击提交按钮,后端服务器会将这些文字打印出来,并且在页面上显示出来。 需要注意的是,在实际开发中,需要对从前端页面传递过来的数据进行验证和过滤,避免恶意用户提交不安全的数据。另外,如果需要将数据存储到数据库中,也需要使用 Flask 的 ORM 或者 SQLALchemy 等库来进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦麦大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值