用python MySQL和HTML写一个食堂查询系统,登录页面有两个分为管理员登录和访客登录,管理员登录后能进行增加,修改,删除和查询功能,访客登录能进行查询和随机抽取一个菜的系统
时间: 2024-01-22 22:18:38 浏览: 114
基于python+mysql的食堂食物管理系统(含数据库文件).zip
5星 · 资源好评率100%
好的,这是一个比较大的项目,我会尽可能详细地解释每个步骤。
首先,我们需要安装一些必要的库。使用以下命令安装 `mysql-connector-python` 和 `flask`:
```
pip install mysql-connector-python flask
```
接下来,我们需要创建一个MySQL数据库并创建一个 `foods` 表格,其中包含菜品的名称和价格。可以使用以下SQL语句创建表格:
```
CREATE TABLE foods (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price FLOAT NOT NULL
);
```
接下来,我们需要编写Python代码来连接到MySQL数据库并执行查询。在这个例子中,我们将使用Flask框架来创建Web应用程序。在文件夹中创建一个名为 `app.py` 的文件,并使用以下代码:
```python
from flask import Flask, render_template, request, redirect, url_for
import mysql.connector
app = Flask(__name__)
# 连接到数据库
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
# 首页
@app.route('/')
def home():
return render_template('home.html')
# 管理员登录
@app.route('/admin', methods=['GET', 'POST'])
def admin():
if request.method == 'POST':
# 获取表单数据
name = request.form['name']
price = request.form['price']
# 插入新菜品
cursor = mydb.cursor()
sql = "INSERT INTO foods (name, price) VALUES (%s, %s)"
val = (name, price)
cursor.execute(sql, val)
mydb.commit()
return redirect(url_for('admin'))
# 获取所有菜品
cursor = mydb.cursor()
cursor.execute("SELECT * FROM foods")
foods = cursor.fetchall()
return render_template('admin.html', foods=foods)
# 访客登录
@app.route('/guest', methods=['GET', 'POST'])
def guest():
if request.method == 'POST':
# 获取表单数据
action = request.form['action']
# 随机抽取一个菜品
if action == 'random':
cursor = mydb.cursor()
cursor.execute("SELECT * FROM foods ORDER BY RAND() LIMIT 1")
food = cursor.fetchone()
return render_template('guest.html', food=food)
# 查询菜品
elif action == 'search':
keyword = request.form['keyword']
cursor = mydb.cursor()
cursor.execute("SELECT * FROM foods WHERE name LIKE %s", ('%' + keyword + '%',))
foods = cursor.fetchall()
return render_template('guest.html', foods=foods)
return render_template('guest.html')
# 删除菜品
@app.route('/delete/<int:id>')
def delete(id):
cursor = mydb.cursor()
cursor.execute("DELETE FROM foods WHERE id = %s", (id,))
mydb.commit()
return redirect(url_for('admin'))
# 修改菜品
@app.route('/edit/<int:id>', methods=['GET', 'POST'])
def edit(id):
if request.method == 'POST':
# 获取表单数据
name = request.form['name']
price = request.form['price']
# 更新菜品
cursor = mydb.cursor()
sql = "UPDATE foods SET name = %s, price = %s WHERE id = %s"
val = (name, price, id)
cursor.execute(sql, val)
mydb.commit()
return redirect(url_for('admin'))
# 获取菜品信息
cursor = mydb.cursor()
cursor.execute("SELECT * FROM foods WHERE id = %s", (id,))
food = cursor.fetchone()
return render_template('edit.html', food=food)
if __name__ == '__main__':
app.run(debug=True)
```
在上面的代码中,我们首先连接到MySQL数据库,然后定义了三个路由:首页,管理员登录和访客登录。管理员路由包含增加,修改,删除和查询功能,而访客路由只包含查询和随机抽取一个菜的功能。
接下来,我们需要创建三个HTML模板:`home.html`,`admin.html`和`guest.html`。这些模板将被Flask框架用于呈现Web页面。
`home.html` 模板如下:
```html
<!DOCTYPE html>
<html>
<head>
<title>食堂查询系统</title>
</head>
<body>
<h1>欢迎使用食堂查询系统</h1>
<p><a href="{{ url_for('admin') }}">管理员登录</a></p>
<p><a href="{{ url_for('guest') }}">访客登录</a></p>
</body>
</html>
```
`admin.html` 模板如下:
```html
<!DOCTYPE html>
<html>
<head>
<title>管理员登录</title>
</head>
<body>
<h1>管理员登录</h1>
<form method="post">
<label for="name">菜品名称:</label>
<input type="text" id="name" name="name"><br><br>
<label for="price">菜品价格:</label>
<input type="text" id="price" name="price"><br><br>
<button type="submit">添加菜品</button>
</form>
<h2>菜品列表</h2>
<table>
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>价格</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for food in foods %}
<tr>
<td>{{ food[0] }}</td>
<td>{{ food[1] }}</td>
<td>{{ food[2] }}</td>
<td>
<a href="{{ url_for('edit', id=food[0]) }}">编辑</a>
<a href="{{ url_for('delete', id=food[0]) }}">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
```
`guest.html` 模板如下:
```html
<!DOCTYPE html>
<html>
<head>
<title>访客登录</title>
</head>
<body>
<h1>访客登录</h1>
<form method="post">
<label for="keyword">关键词:</label>
<input type="text" id="keyword" name="keyword">
<button type="submit" name="action" value="search">查询</button>
<button type="submit" name="action" value="random">随机抽取一个菜</button>
</form>
{% if food %}
<h2>随机菜品</h2>
<p>{{ food[1] }} - {{ food[2] }}元</p>
{% elif foods %}
<h2>查询结果</h2>
<table>
<thead>
<tr>
<th>ID</th>
<th>名称</th>
<th>价格</th>
</tr>
</thead>
<tbody>
{% for food in foods %}
<tr>
<td>{{ food[0] }}</td>
<td>{{ food[1] }}</td>
<td>{{ food[2] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</body>
</html>
```
最后,我们需要创建一个 `edit.html` 模板,用于编辑菜品:
```html
<!DOCTYPE html>
<html>
<head>
<title>编辑菜品</title>
</head>
<body>
<h1>编辑菜品</h1>
<form method="post">
<label for="name">菜品名称:</label>
<input type="text" id="name" name="name" value="{{ food[1] }}"><br><br>
<label for="price">菜品价格:</label>
<input type="text" id="price" name="price" value="{{ food[2] }}"><br><br>
<button type="submit">保存</button>
</form>
</body>
</html>
```
现在我们已经完成了代码和模板的编写,可以使用以下命令启动应用程序:
```
python app.py
```
在浏览器中访问 `http://localhost:5000` 就可以使用食堂查询系统了。
阅读全文