python实现外卖信息管理系统

yizhihongxing

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 Manager 之dict KeyError问题的解决

    下面是“pythonManager之dictKeyError问题的解决”的完整攻略。 什么是dictKeyError问题 在Python中,当我们使用字典(dict)中不存在的键访问字典时,就会出现KeyError异常。例如: my_dict = {‘a’: 1, ‘b’: 2, ‘c’: 3} print(my_dict[‘d’]) # KeyError:…

    python 2023年5月13日
    00
  • 如何在 Python 中加载 YAML 文件,同时保留原始顺序

    【问题标题】:How to load a YAML file in Python while preserving the original order如何在 Python 中加载 YAML 文件,同时保留原始顺序 【发布时间】:2023-04-05 17:58:01 【问题描述】: 我想将 YAML 文件加载到字典中。我发现的所有内容都已过时,因为 Pyt…

    Python开发 2023年4月5日
    00
  • 对Python Pexpect 模块的使用说明详解

    Python Pexpect模块的使用说明详解 Pexpect是一个Python模块,用于控制和自动化其他应用程序的交互。它可以用于模拟用户输入、捕获应用程序输出、等待应用程序响应等。本文将详细介绍Pexpect模块的用法,并提供两个示例说明。 安装Pexpect模块 在使用Pexpect模块之前,需要先安装它。可以使用pip命令来安装Pexpect模块,示…

    python 2023年5月14日
    00
  • Sphinx生成python文档示例图文解析

    Sphinx生成Python文档示例图文解析 Sphinx是一个用于生成文档的工具,它支持多种文档格式,包括HTML、PDF、EPUB等。在Python中,我们可以使用Sphinx生成Python文档。本文将详细讲解Sphinx生成Python文档的示例,包括如何安装Sphinx、如何配置Sphinx、如何使用Sphinx生成Python文档等内容。 安装S…

    python 2023年5月15日
    00
  • python时间序列按频率生成日期的方法

    为了按照指定的频率生成日期序列,我们可以使用 pandas 库和其中的 date_range 函数。 date_range 函数可以为我们生成一个指定范围内的日期序列,同时可以指定日期间隔的频率。 以下是一些常见的频率参数: D:每日频率,生成每天的日期序列。 W:每周频率,生成指定日期的每周序列。 M:每月频率,生成指定日期的每月序列。 Q:每个季度频率,…

    python 2023年6月2日
    00
  • Python多个装饰器的调用顺序实例解析

    Python多个装饰器的调用顺序实例解析 装饰器是Python中常用的一种语法糖,可以用于在函数或类的定义前面添加修饰符,以便更好地管理和使用函数或类。本文将详细讲解Python多个装饰器的调用顺序,包括装饰器的定义、调用顺序等内容,并提供两个示例。 示例1:装饰器的定义和调用顺序 以下是一个使用Python定义和调用装饰器的示例: def decorato…

    python 2023年5月15日
    00
  • 一些Python 5行代码的神奇操作汇总

    那么现在我将为您讲解“一些Python 5行代码的神奇操作汇总”的完整攻略。 一些Python 5行代码的神奇操作汇总 简介 这篇文章主要介绍一些Python 5行代码的神奇操作,让大家在编写Python代码时更加高效。 内容 列表去重 new_list = list(set(old_list)) 有时候我们会遇到需要对列表进行去重的情况,这里给出了用5行代…

    python 2023年5月19日
    00
  • Django 源码WSGI剖析过程详解

    Django源码WSGI剖析过程详解 在Django中,WSGI是Web服务器网关接口的缩写,是Python Web应用程序和Web服务器之间的标准接口。本文将详细讲解Django源码中WSGI的剖析过程,包括WSGI的概念、WSGI的实现原理、WSGI的应用等内容。 WSGI的概念 WSGI是一种Python Web应用程序和Web服务器之间的标准接口,它…

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