python实现外卖信息管理系统

Gladly.

Python实现外卖信息管理系统

摘要

本文将详细介绍如何使用 Python 语言实现一个具有基本外卖信息管理功能的系统。主要功能包括创建、修改、查询和删除外卖餐厅、外卖菜品,并支持将信息以JSON格式存储/读取到本地文件。

前置条件

在开始这个项目前,需要先准备好以下技术栈:

  • Python3.x或更高版本的解释器
  • 轻量级Web应用框架Flask
  • 文本编辑器,如VScode、Sublime Text

实现步骤

  1. 安装Flask框架

在启动这个项目之前,需要先安装 Flask 库。可以使用 pip 包管理器,在终端输入以下命令行:

$ pip install flask
  1. 设计数据模型

首先我们需要根据业务需求来设计数据模型。这里我们需要维护两个实体,餐厅与菜品,且餐厅与菜品之间具有一对多的关系。

因此,我们可以创建两个类来分别表示餐厅与菜品。该类定义如下:

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)
  1. 创建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数据序列化功能了。

  1. 数据存储和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 对象。

  1. 启动应用程序

将应用程序存储为 python 文件并保存,使用终端工具进入文件所在目录,输入以下命令行即可启动Web应用:

$ python app.py

至此,完整的Python实现外卖信息管理系统的攻略已经完成,你可以使用上述API来创建、查询、更新和删除餐厅/菜品信息。

结论

在这篇文章中,我们深入学习了如何使用 Python 的 Flask 库来创建一个能够实现基本外卖信息管理功能的Web应用。我们还进一步了解了如何基于 JSON 序列化技术来完成数据保存和恢复,并展示了一个完整的代码实现,以此来帮助初学者更好地理解Python Flask库的使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现外卖信息管理系统 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • python中dir()与__dict__属性的区别浅析

    Python中dir()与__dict__属性的区别浅析 前言 在Python语言中,dir()和__dict__两个方法都可以获取一个对象的属性、方法等信息。本文将对这两个方法进行区别和比较分析。 dir()方法 dir()函数是Python自带的一个函数,它返回任意对象的属性和方法列表。在交互模式下,我们可以显示一个对象的所有属性和方法。例如,以下是使用…

    python 2023年5月13日
    00
  • Python pysnmp使用方法及代码实例

    下面我就给您详细讲解一下“Python pysnmp使用方法及代码实例”的完整攻略。 什么是pysnmp pysnmp是基于Python的SNMP开发工具,可以用于快速在Python中编写SNMP管理应用程序,并支持IPv4和IPv6。pysnmp是一种高级的网络管理协议,其提供了一个简单的API来实现SNMP 键值对的信息读取,我们可以非常简单的实现SNM…

    python 2023年5月19日
    00
  • python实现图片变亮或者变暗的方法

    Python 实现图片变亮或者变暗的方法有很多种,这里我们介绍两种方法: 方法一:使用Pillow库 Pillow是Python下的一个图像处理库,在实现图片变亮或变暗时非常方便。 安装Pillow库 首先需要安装Pillow库,可以使用pip进行安装。在命令行中输入以下指令即可: pip install Pillow 如果出现了“No module nam…

    python 2023年5月19日
    00
  • Pandas多列值合并成一列的实现

    要将 Pandas DataFrame 的多列值合并成一列,可使用“Melt”方法或“Concatenate”方法实现。 Melt方法 Melt 方法是一种 Pandas 数据清洗方式,可将 DataFrame 中的多列值整合为新的一列,操作步骤如下: 导入 Pandas 库: import pandas as pd 创建 DataFrame:例如,如下所示…

    python 2023年6月5日
    00
  • Python输出\u编码将其转换成中文的实例

    Python输出\u编码将其转换成中文的实例 在Python中,有时我们会遇到输出中文时出现\u编码的情况。本攻略将介绍如何将这些\u编码转换成中文。 示例1:使用encode和decode方法 我们可以使用encode方法将字符串转换成字节串,再使用decode方法将字节串转换成字符串。以下是一个示例代码,用于将含有\u编码的字符串转换成中文: s = ‘…

    python 2023年5月15日
    00
  • Python random模块的使用示例

    Python random模块的使用示例 Python中的random模块用于生成随机数,包括整数、浮点数和随机序列。接下来介绍random模块的常见使用示例。 1. 生成随机整数 要生成指定范围内的随机整数,可以使用random.randint()函数。该函数接受两个参数,分别代表随机整数的范围。下面的代码示例生成一个1~100之间的随机整数: impor…

    python 2023年6月3日
    00
  • python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析

    下面就是对于“python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析”的完整攻略: 1. 介绍 这篇攻略主要介绍了如何使用 PyQT5 GUI 库开发基于 Python 的简单绘图板实例,并对代码进行了详细的分析。 2. 环境配置 为了运行这个 PyQT5 程序,需要先配置环境,必须要安装 PyQt5 库。可以通过 pip 安装它: pip …

    python 2023年6月13日
    00
  • python如何获取服务器硬件信息

    获取服务器硬件信息是服务器管理和监控的关键操作之一。在Python中,可以使用多种库和工具来获取服务器的硬件信息,下面是一个简单的攻略: 1. 使用psutil库 psutil 是一个跨平台的Python库,可以获取系统的各种信息,包括硬件信息。可以通过以下步骤使用psutil获取服务器的硬件信息: 安装psutil: pip install psutil …

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部