jQuery autocomplete in Flask

后端 未结 1 1186
鱼传尺愫
鱼传尺愫 2020-12-09 00:21

Can\'t make jQuery autocomplete widget work with Flask framework. (http://jqueryui.com/autocomplete/#remote here is an example)
In manage.py I got the

1条回答
  •  太阳男子
    2020-12-09 00:51

    Below is working JS/jQuery and Flask code:

    @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:

    
    
    
    
    
    
    
    
        

    A bit of explanation is in order: 'q' is your search term argument name as defined in jQuery's $.getJSON ajax call. That's passed to flask, and picked up using request.args.get. The database query is constructed from that, and a list comprehension is used to construct the results. Note that with list comprehensions you don't initialize the list, nor do you use a for+append combination; one elegant line does everything.

    Next, jsonify returns the list results wrapped as a dictionary with the key matching_results holding the results list. Do not be tempted to use json.dumps to return a list to your ajax call. See here why (TL/DR: security concerns).

    Note also that i've deliberately changed some variable names so you could tell what script/flask function 'sees' which variable. E.g., the ajax call doesn't see the list results, it sees matching_results. And that's inside (now javascript's) data object.

    To grab the list matching_results is the key for, use the pattern in the attached script. It's messier than simply sending a list, but more secure, and eventually will allow you to do more sophisticated things on the client-side using JS/jquery.

    Finally, the select option prints the user's selection to the developer console, just for reference so you can actually respond to a user's selection.

    For a more complete jquery-autocomplete example see the 'Load Data with AJAX' section here.

    0 讨论(0)
提交回复
热议问题