Gladly.
Python实现外卖信息管理系统
摘要
本文将详细介绍如何使用 Python 语言实现一个具有基本外卖信息管理功能的系统。主要功能包括创建、修改、查询和删除外卖餐厅、外卖菜品,并支持将信息以JSON格式存储/读取到本地文件。
前置条件
在开始这个项目前,需要先准备好以下技术栈:
- Python3.x或更高版本的解释器
- 轻量级Web应用框架Flask
- 文本编辑器,如VScode、Sublime Text
实现步骤
- 安装Flask框架
在启动这个项目之前,需要先安装 Flask 库。可以使用 pip
包管理器,在终端输入以下命令行:
$ pip install flask
- 设计数据模型
首先我们需要根据业务需求来设计数据模型。这里我们需要维护两个实体,餐厅与菜品,且餐厅与菜品之间具有一对多的关系。
因此,我们可以创建两个类来分别表示餐厅与菜品。该类定义如下:
class Restaurant(object):
def __init__(self, name="", addr="", phone=""):
self.name = name
self.addr = addr
self.phone = phone
self.menu = []
def __str__(self):
return "{}\t{}\t{}".format(self.name, self.addr, self.phone)
class MenuItem(object):
def __init__(self, name="", price="", rname=""):
self.name = name
self.price = price
self.rname = rname
def __str__(self):
return "{}\t{}\t{}".format(self.name, self.price, self.rname)
- 创建Flask应用
接下来,我们需要使用 Flask 应用的构建模块和相关的类来创建服务器程序。拷贝以下代码到你的Python文件中:
from flask import Flask, request
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False #允许返回非ASCII的内容
app.config["JSON_SORT_KEYS"] = False #禁止排序json里面的key
#...
if __name__ == '__main__':
app.run(debug=True)
下一步需要定义我们的API接口以实现外卖信息管理支持。我们定义如下4个API方法:
- GET /restaurants:获取所有餐厅
- GET /restaurants/rid:根据餐厅ID (rid) 获取餐厅信息
- POST /restaurants:根据请求中的参数信息创建新餐厅
- PUT /restaurants/rid:修改特定餐厅的信息
- DELETE /restaurants/rid:删除特定餐厅
我们以餐厅为例,展示 POST 方法的实现示例:
# POST 功能实现,根据请求中的参数信息创建新餐厅
@app.route('/restaurants', methods=['POST'])
def create_restaurant():
rname = request.values.get('rname')
addr = request.values.get('addr')
phone = request.values.get('phone')
menus = request.values.get('menu')
if rname and addr and phone and menus:
# 解析菜单为JSON格式,之后存入Restaurant实例中。
menuDict = json.loads(menus)
menuList = []
for menuItem in menuDict:
menu = MenuItem(menuItem['name'], menuItem['price'], rname)
menuList.append(menu)
restaurant = Restaurant(rname, addr, phone)
restaurant.menu = menuList
# 将新创建的Restaurant实例存入restaurants列表中,起一个ID,并返回该实例
restaurant.__dict__.update({'rid':restaurant_id})
restaurants.append(restaurant)
return jsonify(restaurant.__dict__)
else:
return 'fail'
注意,在本段代码中,我们返回的是JSON的字符串结果,可以使用Flask 应用类的 jsonify() 方法实现。而当我们在请求数据中传递一个 JSON 对象时,可以直接使用 Flask 上下文的 request 对象。此外,我们还需要将返回的JSON格式中中文字符转换为Unicode编码才能保证传输时不出现乱码,因此需要设置app.config['JSON_AS_ASCII'] = False
。
至此,Flask 应用程序的处理逻辑部分就完成了。接下来就该实现数据存储和JSON数据序列化功能了。
- 数据存储和JSON数据序列化实现
一般情况下,我们需要将数据存储在一些可持久化储存介质中以便程序退出后能够再次使用数据。这里可以使用 Python 的 pickle 库将数据直接封装为二进制后直接写/读文件中。
另一种解决方案是将信息以JSON格式存储在本地文件系统中,同样使用 Flask 应用提供的 jsonify() 方法。如以下代码所示:
import json
def saveFile():
with open('data.json', 'w+', encoding='utf-8') as jsonFile:
# 将列表restaurants转换为字典存入JSON文件
restDict = [rest.__dict__ for rest in restaurants]
json.dump(restDict, jsonFile, ensure_ascii=False, indent=2)
# ...
@app.route('/save')
def save():
saveFile()
return jsonify({'data':'This DB has Saved!'})
def readFile():
with open('data.json', 'r', encoding='UTF-8') as jsonFile:
restDict = json.load(jsonFile)
data = []
for rest in restDict:
restaurant = Restaurant(rest['name'], rest['addr'], rest['phone'])
menuList = []
for item in rest['menu']:
menu = MenuItem(item['name'], item['price'], item['rname'])
menuList.append(menu)
restaurant.menu = menuList
restaurant.__dict__.update({'rid': rest['rid']})
data.append(restaurant)
# 返回Restaurant实例列表
return data
#...
@app.route('/load')
def load():
global restaurants
restaurants = readFile()
return jsonify({'data':'This DB has Loaded!'})
在本段代码中,我们需要使用 Python 的 JSON 库来完成从文件中读取/保存数据。其中,json.dump()
方法允许我们将字典直接存储为 JSON 数据流,而在 json.load()
方法中则会方便地将磁盘上的 JSON 文件转换为一个 Python 对象。
- 启动应用程序
将应用程序存储为 python 文件并保存,使用终端工具进入文件所在目录,输入以下命令行即可启动Web应用:
$ python app.py
至此,完整的Python实现外卖信息管理系统的攻略已经完成,你可以使用上述API来创建、查询、更新和删除餐厅/菜品信息。
结论
在这篇文章中,我们深入学习了如何使用 Python 的 Flask 库来创建一个能够实现基本外卖信息管理功能的Web应用。我们还进一步了解了如何基于 JSON 序列化技术来完成数据保存和恢复,并展示了一个完整的代码实现,以此来帮助初学者更好地理解Python Flask库的使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现外卖信息管理系统 - Python技术站