如何使用Flask Web框架实现一个Web版的通讯录,用文件实现数据存取。通讯录的字段有学号、姓名、手机号、电子邮箱,可以实现添加、存储和查找。
时间: 2024-05-16 13:16:04 浏览: 102
首先,需要安装Flask框架和pandas库(用于文件读写)。
可以使用以下命令安装:
```
pip install flask pandas
```
接下来,创建一个名为`app.py`的Python文件,并在其中编写以下代码:
```python
from flask import Flask, render_template, request
import pandas as pd
app = Flask(__name__)
# 通讯录文件路径
FILE_PATH = 'contacts.csv'
# 读取通讯录文件
contacts_df = pd.read_csv(FILE_PATH)
# 定义通讯录字段
FIELDS = ['学号', '姓名', '手机号', '电子邮箱']
@app.route('/')
def index():
# 渲染主页模板
return render_template('index.html')
@app.route('/add', methods=['POST'])
def add():
# 获取表单数据
data = request.form.to_dict()
# 添加数据到通讯录DataFrame
contacts_df.loc[len(contacts_df)] = [data[field] for field in FIELDS]
# 保存通讯录文件
contacts_df.to_csv(FILE_PATH, index=False)
# 返回成功提示
return '添加成功!'
@app.route('/search', methods=['POST'])
def search():
# 获取表单数据
keyword = request.form.get('keyword')
# 在通讯录DataFrame中查找包含关键字的行
results_df = contacts_df[contacts_df.apply(lambda row: keyword in row.to_string(), axis=1)]
# 渲染搜索结果模板
return render_template('results.html', results=results_df.to_dict('records'))
if __name__ == '__main__':
app.run()
```
代码中定义了以下几个路由:
- `/`:渲染主页模板;
- `/add`:处理添加数据的请求;
- `/search`:处理搜索数据的请求。
其中,`add`和`search`路由都使用了POST方法,以便从表单中获取数据。
在`add`路由中,获取表单数据后,将数据添加到通讯录DataFrame中,并将DataFrame保存到文件中。
在`search`路由中,获取表单数据后,使用`apply`方法在通讯录DataFrame中查找包含关键字的行,并将结果渲染到结果模板中。
接下来,创建一个名为`index.html`的模板文件,并在其中编写以下代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>通讯录</title>
</head>
<body>
<h1>通讯录</h1>
<form action="/add" method="post">
{% for field in FIELDS %}
<div>
<label>{{ field }}:</label>
<input type="text" name="{{ field }}">
</div>
{% endfor %}
<button type="submit">添加</button>
</form>
<br>
<form action="/search" method="post">
<div>
<label>关键字:</label>
<input type="text" name="keyword">
</div>
<button type="submit">搜索</button>
</form>
</body>
</html>
```
模板文件中定义了一个包含所有字段的表单,以便添加数据,另外还定义了一个用于搜索数据的表单。
最后,创建一个名为`results.html`的模板文件,并在其中编写以下代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>搜索结果</title>
</head>
<body>
<h1>搜索结果</h1>
{% if results %}
<table>
<thead>
<tr>
{% for field in FIELDS %}
<th>{{ field }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for result in results %}
<tr>
{% for field in FIELDS %}
<td>{{ result[field] }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>未找到相关记录。</p>
{% endif %}
</body>
</html>
```
模板文件中定义了一个表格,用于显示搜索结果。如果没有找到相关记录,则显示一条提示消息。
现在,启动Flask应用程序,并在Web浏览器中访问`http://localhost:5000/`,即可使用Web版通讯录,实现添加、存储和查找功能。
阅读全文