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日

相关文章

  • 从0开始的Python学习014面向对象编程(推荐)

    下面是针对“从0开始的Python学习014面向对象编程(推荐)”的完整攻略: 一、什么是面向对象编程? 面向对象编程(OOP)是一种编程模式,它将现实世界中的对象及其关系映射到计算机程序中。在面向对象编程中,程序是由许多相互协作的对象组成的。每个对象都是独立的,有自己的数据和行为,并且能够与其他对象进行交互。 在Python中,一切皆为对象,其中包括数字、…

    python 2023年6月3日
    00
  • Python中文件遍历的两种方法

    Python中文件遍历有两种方法:使用os模块和使用pathlib模块。下面我会对这两种方法进行详细说明,并且提供代码示例。 一、使用os模块进行文件遍历 os模块是Python自带的一个常用模块,其中包含了很多与文件和目录相关的功能,可以用它来实现文件遍历。 1. os.walk方法 os.walk方法可以列出指定目录下(包括子目录)的所有文件和文件夹,具…

    python 2023年6月2日
    00
  • Python基础中的列表你了解吗

    Python基础中的列表你了解吗 当谈到Python基础时,列表是一个非常重要的数据类型。列表是一种有序的集合,可以包含任何类型的对象,例如数字、字符串、甚至其他列表。在本文中,我们将详细介绍Python中的列表,包括如何创建、访问、修改和操作列表。 创建列表 在Python中,我们可以使用方括号[]来创建一个列表。例如: # 创建一个包含数字和字符串的列表…

    python 2023年5月13日
    00
  • Python requests模块实例用法

    以下是关于Python requests模块实例用法的攻略: Python requests模块实例用法 requests是Python中一个流行的HTTP库,可以用于向Web服务器发送HTTP请求和接收响应。以下是Python requests模块实例用法: 发送GET请求 以下是使用requests发送GET请求的示例: import requests …

    python 2023年5月14日
    00
  • Python如何执行系统命令

    Python 有一个名为 subprocess 的标准库模块,可以用来执行系统命令。下面是使用 subprocess 模块进行系统命令操作的完整攻略: 引入模块 首先需要引入 subprocess 模块: import subprocess 执行命令 接下来使用 subprocess.run() 方法来执行系统命令。这个方法的调用方式如下: subproce…

    python 2023年5月18日
    00
  • 解决seaborn在pycharm中绘图不出图的问题

    下面是详细的攻略: 解决seaborn在pycharm中绘图不出图的问题 问题背景 当我们使用 seaborn 库在 Pycharm 中绘图时,有可能会出现绘图不出图的问题。 分析解决 环境准备 为了演示该问题以及解决方案,我们需要准备以下环境: Python 环境:安装 anaconda 并创建虚拟环境。可以使用以下命令: shell conda crea…

    python 2023年5月18日
    00
  • python读取.data文件的实现

    Python读取.data文件可以通过以下步骤实现: 1. 打开文件 使用Python内置的open()函数打开.data文件,指定文件路径以及文件打开模式,例如: with open(‘datafile.data’, ‘r’) as f: # do something with the file 其中: 文件路径:指明要读取的.data文件的路径 文件打开…

    python 2023年6月2日
    00
  • Python基于class()实现面向对象原理详解

    Python是一门面向对象的编程语言,通过使用class,可以实现面向对象编程的基本原理。在Python中,class是定义对象的基础,它允许我们在一个类中定义各种属性和方法,然后使用该类创建对象。 下面是Python基于class()实现面向对象原理的完整攻略,包括以下内容: 1. 创建一个类 在Python中,创建一个类需要使用class关键字,紧接着是…

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