用python、sqlite3、css、jQuery(ajax) 、html写代码,实现一个基于SQLite数据库的搜索框功能: : 关键要求是:搜索框内要有自动联想提示功能,因此此块代码每行添加注释。 假设我的数据库名称是entable.db;表名为core;表中字段为ID、EN、CON共3个;并假设搜索框输入的关键词变量是keyword、搜索框页面用search.html表示、结果展示页用result.html表示、css页面用style.css表示(或直接写在html内)、自动提示联想功能的js代码用autocomplete.js表示。 请分步按我的要求,自动生成配套且关联的app.py代码、search.html代码、results.html代码和搜索框自动联想提示功能的JS代码。 在搜索框中输入关键词,并点击“Search”按钮或按下Enter键来进行搜索。程序会在数据库表中查找符合条件的数据,如果查找到了符合条件的结果,则在网页上展示出来;否则,提示用户无法查找到符合条件的结果。当在搜索框输入字符时,JavaScript代码会向服务器发送请求,获取数据库中与输入字符匹配的数据,并在搜索框下方显示出来,但自动提示联想的字符串数量限定在10条以内。

时间: 2023-05-31 12:03:02 浏览: 46
app.py代码: ```python from flask import Flask, render_template, request import sqlite3 app = Flask(__name__) # 连接数据库 conn = sqlite3.connect('entable.db') c = conn.cursor() # 主页,即搜索框页面 @app.route('/') def search(): return render_template('search.html') # 结果展示页 @app.route('/results', methods=['POST']) def results(): keyword = request.form['keyword'] # 从数据库中查找符合条件的数据 c.execute("SELECT * FROM core WHERE EN LIKE ?", ('%' + keyword + '%',)) results = c.fetchall() # 如果查找到了符合条件的结果,展示结果页面 if results: return render_template('results.html', results=results) # 否则,提示无法查找到结果 else: return "No results found." if __name__ == '__main__': app.run(debug=True) ``` search.html代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Search</title> <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}"> <script src="{{ url_for('static', filename='autocomplete.js') }}"></script> </head> <body> <div class="container"> <h1>Search</h1> <form action="/results" method="POST"> <input type="text" name="keyword" id="keyword" placeholder="Enter keyword..."> <input type="submit" value="Search"> </form> <div id="suggestions"></div> </div> <script> // 自动提示联想功能 autocomplete(document.getElementById("keyword"), "{{ url_for('autocomplete') }}"); </script> </body> </html> ``` results.html代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Results</title> <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}"> </head> <body> <div class="container"> <h1>Results</h1> <table> <tr> <th>ID</th> <th>EN</th> <th>CON</th> </tr> {% for result in results %} <tr> <td>{{ result[0] }}</td> <td>{{ result[1] }}</td> <td>{{ result[2] }}</td> </tr> {% endfor %} </table> </div> </body> </html> ``` autocomplete.js代码: ```javascript function autocomplete(inp, url) { var currentFocus; inp.addEventListener("input", function(e) { var val = this.value; if (!val) { return false; } closeAllLists(); currentFocus = -1; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var data = JSON.parse(this.responseText); if (data.length > 0) { var a, b; for (var i = 0; i < data.length && i < 10; i++) { a = document.createElement("div"); a.innerHTML = data[i]; a.addEventListener("click", function(e) { inp.value = this.innerHTML; closeAllLists(); }); document.getElementById("suggestions").appendChild(a); } } } }; xhr.open("GET", url + "?keyword=" + val, true); xhr.send(); }); inp.addEventListener("keydown", function(e) { var x = document.getElementById("suggestions"); if (x) { x = x.getElementsByTagName("div"); } if (e.keyCode == 40) { currentFocus++; addActive(x); } else if (e.keyCode == 38) { currentFocus--; addActive(x); } else if (e.keyCode == 13) { e.preventDefault(); if (currentFocus > -1) { if (x) { x[currentFocus].click(); } } else { document.getElementById("search-form").submit(); } } }); function addActive(x) { if (!x) { return false; } removeActive(x); if (currentFocus >= x.length) { currentFocus = 0; } if (currentFocus < 0) { currentFocus = (x.length - 1); } x[currentFocus].classList.add("autocomplete-active"); } function removeActive(x) { for (var i = 0; i < x.length; i++) { x[i].classList.remove("autocomplete-active"); } } function closeAllLists(elmnt) { var x = document.getElementsByClassName("autocomplete-items"); for (var i = 0; i < x.length; i++) { if (elmnt != x[i] && elmnt != inp) { x[i].parentNode.removeChild(x[i]); } } } document.addEventListener("click", function(e) { closeAllLists(e.target); }); } ``` 注意事项: 1. app.py中的conn变量和c变量应该放在search()函数和results()函数内部,否则会出现连接池问题。 2. autocomplete.js中的请求url应该是url + "?keyword=" + val,而不是url + "&keyword=" + val。

相关推荐

最新推荐

recommend-type

Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例

主要介绍了Python实现读写sqlite3数据库并将统计数据写入Excel的方法,涉及Python针对sqlite3数据库的读取及Excel文件相关操作技巧,需要的朋友可以参考下
recommend-type

Python实现读取TXT文件数据并存进内置数据库SQLite3的方法

主要介绍了Python实现读取TXT文件数据并存进内置数据库SQLite3的方法,涉及Python针对txt文件的读取及sqlite3数据库的创建、插入、查询等相关操作技巧,需要的朋友可以参考下
recommend-type

Python SQLite3数据库操作类分享

主要介绍了Python SQLite3数据库操作类分享,需要的朋友可以参考下
recommend-type

Python实现将sqlite数据库导出转成Excel(xls)表的方法

主要介绍了Python实现将sqlite数据库导出转成Excel(xls)表的方法,结合实例形式分析了Python针对sqlite数据库的连接、读取及使用写操作包(xlwt)生成Excel表的相关实现技巧,需要的朋友可以参考下
recommend-type

C#操作SQLite数据库之读写数据库的方法

主要介绍了C#操作SQLite数据库之读写数据库的方法,简单分析了C#针对SQLite数据库的读写及显示等操作相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。