用python、sqlite3、css、js、html写代码(代码添加加详细注释,1行注释1行代码,注释在上行代码在下1行): 假设我的数据库名称是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代码,并指出注意事项或说明,例如,哪些代码应存放在static文件夹,哪些代码存放在templates文件夹等。 目的是实现了一个基于SQLite数据库的搜索框功能,包括自动联想提示功能。在搜索框中输入关键词,并点击“Search”按钮或按下Enter键来进行搜索。程序会在数据库表中查找符合条件的数据,如果查找到了符合条件的结果,则在网页上展示出来;否则,提示用户无法查找到符合条件的结果。当在搜索框输入字符时,JavaScript代码会向服务器发送请求,获取数据库中与输入字符匹配的数据,并在搜索框下方显示出来,但自动提示联想的字符串数量限定在10条以内。
时间: 2023-05-30 19:02:13 浏览: 179
1. 创建SQLite数据库和表
首先需要创建一个名为entable.db的SQLite数据库,并在其中创建一个名为core的表,表中包含3个字段ID、EN、CON。可以使用以下代码:
```python
import sqlite3
# 创建数据库连接
conn = sqlite3.connect('entable.db')
c = conn.cursor()
# 创建表
c.execute('''CREATE TABLE core
(ID INT PRIMARY KEY NOT NULL,
EN TEXT NOT NULL,
CON TEXT NOT NULL);''')
# 插入数据
c.execute("INSERT INTO core (ID, EN, CON) VALUES (1, 'apple', '苹果')")
c.execute("INSERT INTO core (ID, EN, CON) VALUES (2, 'banana', '香蕉')")
c.execute("INSERT INTO core (ID, EN, CON) VALUES (3, 'orange', '橙子')")
# 提交更改并关闭连接
conn.commit()
conn.close()
```
2. 创建Flask应用和路由
接下来需要创建一个Flask应用和路由,用于处理搜索框和结果展示页的请求。可以使用以下代码:
```python
from flask import Flask, render_template, request
import sqlite3
app = Flask(__name__)
# 定义搜索页面路由
@app.route('/')
def search():
return render_template('search.html')
# 定义搜索结果展示页面路由
@app.route('/results', methods=['POST'])
def results():
# 获取搜索框中的关键词
keyword = request.form['keyword']
# 查询数据库中符合条件的数据
conn = sqlite3.connect('entable.db')
c = conn.cursor()
c.execute("SELECT * FROM core WHERE EN LIKE ?", ('%' + keyword + '%',))
results = c.fetchall()
conn.close()
# 如果有符合条件的数据则展示结果,否则提示无结果
if results:
return render_template('results.html', results=results)
else:
return "No results found"
```
3. 创建搜索页面和结果展示页面
接下来需要创建搜索页面和结果展示页面,可以使用以下代码:
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>
<h1>Search</h1>
<form action="/results" method="POST">
<input type="text" name="keyword" id="keyword" placeholder="Search...">
<button type="submit">Search</button>
</form>
<div id="autocomplete"></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>
</head>
<body>
<h1>Results</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>EN</th>
<th>CON</th>
</tr>
</thead>
<tbody>
{% for result in results %}
<tr>
<td>{{ result[0] }}</td>
<td>{{ result[1] }}</td>
<td>{{ result[2] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
```
注意:需要将search.html和autocomplete.js文件存放在templates文件夹中,将style.css文件存放在static文件夹中。
4. 实现自动提示联想功能
最后需要实现自动提示联想功能,可以使用以下代码:
```python
# 定义自动提示联想路由
@app.route('/autocomplete')
def autocomplete():
# 获取输入字符
keyword = request.args.get('q')
# 查询数据库中与输入字符匹配的数据
conn = sqlite3.connect('entable.db')
c = conn.cursor()
c.execute("SELECT EN FROM core WHERE EN LIKE ? LIMIT 10", ('%' + keyword + '%',))
results = c.fetchall()
conn.close()
# 将匹配的数据转换为JSON格式并返回
return {'results': [result[0] for result in results]}
```
autocomplete.js
```javascript
function autocomplete(inp, url) {
// 创建自动提示联想下拉框
var currentFocus;
var dropdown = document.createElement("div");
dropdown.setAttribute("id", inp.id + "autocomplete-list");
dropdown.setAttribute("class", "autocomplete-items");
inp.parentNode.appendChild(dropdown);
// 监听输入框的输入事件
inp.addEventListener("input", function(e) {
var val = this.value;
closeAllLists();
if (!val) {
return false;
}
currentFocus = -1;
// 向服务器发送请求,获取匹配的数据
fetch(url + '?q=' + val)
.then(response => response.json())
.then(data => {
// 将匹配的数据添加到自动提示联想下拉框中
for (var i = 0; i < data.results.length; i++) {
var item = document.createElement("div");
item.innerHTML = data.results[i];
item.addEventListener("click", function(e) {
inp.value = this.innerHTML;
closeAllLists();
});
dropdown.appendChild(item);
}
});
});
// 监听输入框的键盘按下事件
inp.addEventListener("keydown", function(e) {
var items = dropdown.getElementsByTagName("div");
if (e.keyCode == 40) { // 向下箭头
currentFocus++;
addActive(items);
} else if (e.keyCode == 38) { // 向上箭头
currentFocus--;
addActive(items);
} else if (e.keyCode == 13) { // Enter键
e.preventDefault();
if (currentFocus > -1) {
items[currentFocus].click();
}
}
});
// 添加激活状态
function addActive(items) {
if (!items) {
return false;
}
removeActive(items);
if (currentFocus >= items.length) {
currentFocus = 0;
}
if (currentFocus < 0) {
currentFocus = items.length - 1;
}
items[currentFocus].classList.add("autocomplete-active");
}
// 移除激活状态
function removeActive(items) {
for (var i = 0; i < items.length; i++) {
items[i].classList.remove("autocomplete-active");
}
}
// 关闭所有下拉框
function closeAllLists() {
var items = dropdown.getElementsByTagName("div");
for (var i = 0; i < items.length; i++) {
items[i].parentNode.removeChild(items[i]);
}
}
// 监听点击事件
document.addEventListener("click", function(e) {
closeAllLists();
});
}
```
注意:需要将autocomplete.js文件存放在static文件夹中。
阅读全文