返回顶部
首页 > 资讯 > 后端开发 > Python >Python Web后端开发中的增查改删处理
  • 720
分享到

Python Web后端开发中的增查改删处理

2024-04-02 19:04:59 720人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言一、创建 mgr应用目录二、添加处理请求模块 和 url 路由2.1定义函数1.新建customer文件,定义dispatcher函数2.总路由文件 bysms/urls.p

前言

如果采用前后端分离的架构开发, 后端几乎不负责任何展现界面的工作,只负责对数据进行管理 。 数据的管理,主要就是:响应前端的请求, 对数据资源的 增加、修改、删除、列出 。

一、创建 mgr应用目录

接口文档明确说明了,这是针对 管理员用户 的 请求。

前面我们已经为 销售员用户 专门创建了一个应用 sales 来处理相关的 请求。

所以,我们可以 再为 管理员用户 专门创建一个应用 mgr 来处理相关的 请求 进入根目录,执行:

python manage.py startapp mgr 

此时我们会看见,目录下已将创建了一个mgr的文件夹:

二、添加处理请求模块 和 url 路由

前面,我们都是在views.py 里面定义函数,处理 Http请求的。 但是可以想象, 以后,这个mgr应用要处理很多类型的http请求。 都用这个views.py 就会让这个文件非常的庞大, 不好维护。所以,我们可以用不同的 py 文件处理不同类型的http请求。 比如,这里我们可以新增一个文件 customer.py, 专门处理 客户端对 customer 数据的操作。将来如果客户端有对其他类型数据的操作, 比如 order 数据, 我们就可以添加 orders.py 来处理。 从接口文档,我们可以发现对资源的增删改查 操作, 都是同一个URL,都是 /api/mgr/medicine 。 而且我们发现,不同的操作请求,使用不同的 HTTP 请求方法 ,比如 添加是POST, 查询是 GET, 修改是 PUT, 删除是 DELETE。且请求的参数中都有 action 参数表明这次请求的操作具体是什么。 注意: Django 的 url路由功能 不支持 根据 HTTP 请求的方法 和请求体里面的参数 进行路由。 就是不能像下面这样,来根据请求 是 post 还是 get 来 路由:

path('customers/', 'app.views.list_customer', method='get'),
path('customers/', 'app.views.add_customer',  method='post'),

那么大家想想该怎么办?

2.1定义函数

一种方式是:自己编写一个函数, 来 根据 http请求的类型 和请求体里面的参数 分发(或者说路由)给 不同的函数进行处理。

1.新建customer文件,定义dispatcher函数

我们可以 在 customer.py 中定义如下 dispatcher 函数:

def dispatcher(request):
    # 将请求参数统一放入request 的 params 属性中,方便后续处理

    # GET请求 参数在url中,同过request 对象的 GET属性获取
    if request.method == 'GET':
        request.params = request.GET

    # POST/PUT/DELETE 请求 参数 从 request 对象的 body 属性中获取
    elif request.method in ['POST','PUT','DELETE']:
        # 根据接口,POST/PUT/DELETE 请求的消息体都是 JSON格式
        request.params = json.loads(request.body)


    # 根据不同的action分派给不同的函数进行处理
    action = request.params['action']
    if action == 'list_customer':
        return listcustomers(request)
    elif action == 'add_customer':
        return addcustomer(request)
    elif action == 'modify_customer':
        return modifycustomer(request)
    elif action == 'del_customer':
        return deletecustomer(request)

    else:
        return JsonResponse({'ret': 1, 'msg': '不支持该类型http请求'})

首先创建一个custome.py文件:

该函数 把 请求消息中的参数统一放入到 request请求对象的params 属性中。params 属性 被 做成一个 dict 类型 , 方便后面的处理函数来获取消息中的参数。 然后 dispatch函数再根据 请求的 类型 和 action 参数的值 决定由那个函数具体处理该请求消息。比如 action 参数 为 ‘add_customer’ 的 请求 就由 addcustomer 函数 进行处理。 当然在文件的开头,我们需要 先导入 JsonResponse 和 json 的定义,像下面这样:

from djanGo.http import JsonResponse
import json

接下来,根据 API 接口 ,我们发现 凡是 API 请求url为 /api/mgr/customers 的,都属于 客户 相关的API, 都应该交由 我们上面定义的dispatch函数进行分派处理。那么我们需要在Django的url路由文件中加入对应的路由。

2.总路由文件 bysms/urls.py 中定义

我们应该在 总路由文件 bysms/urls.py 中定义了如下部分:

    # 凡是 url 以 api/mgr  开头的,
    # 都根据 mgr.urls 里面的 子路由表进行路由
    path('api/mgr/', include('mgr.urls')),

3.mgr下添加 urls.py 路由文件

在 mgr 目录下面添加 urls.py 路由文件, 并 加入如下声明即可, 如下所示:

from django.urls import path
from mgr import customer
urlpatterns = [
    path('customers', customer.dispatcher),
]

这样,就表示 凡是 API 请求url为 /api/mgr/customers 的,都交由 我们上面定义的dispatch函数进行分派处理。

三、列出客户

通常数据资源的 增查改删 里面的 查 就是 查看,对应的就是列出数据资源。

根据接口文档,列出客户数据接口,后端返回的数据格式如下:

{
    "ret": 0,
    "retlist": [
        {
            "address": "江苏省常州武进市白云街44号",
            "id": 1,
            "name": "武进市 袁腾飞",
            "phonenumber": "13886666666"
        },

        {
            "address": "北京海淀区",
            "id": 4,
            "name": "北京海淀区代理 蔡国庆",
            "phonenumber": "13990123456"
        }
    ]
}

这里我们无需 将数据库中获取的数据 转化为 供浏览器展示的html。 在前后端分离的开发架构中,如何展示数据,那是前端的事情。 我们后端只需要根据接口文档, 返回原始数据就行。 我们可以使用如下的函数来返回数据库的所有的 客户数据信息:

def listcustomers(request):
    # 返回一个 QuerySet 对象 ,包含所有的表记录
    qs = Customer.objects.values()

    # 将 QuerySet 对象 转化为 list 类型
    # 否则不能 被 转化为 JSON 字符串
    retlist = list(qs)

    return JsonResponse({'ret': 0, 'retlist': retlist})

当然在文件的开头,我们需要 先导入 Customer 定义,像下面这样:

# 导入 Customer 
from common.models import Customer

可以发现,无需转化数据为HTML, 后端的代码任务也大大减轻。

四、添加客户

通常数据资源的 增查改删 里面的 增 就是 添加,对应的就是添加数据资源。 根据接口文档,添加客户数据接口,前端提供的客户数据格式如下:

{
    "action":"add_customer",
    "data":{
        "name":"武汉市桥西医院",
        "phonenumber":"13345679934",
        "address":"武汉市桥西医院北路"
    }
}

我们可以使用如下的函数来处理:

def addcustomer(request):

    info    = request.params['data']

    # 从请求消息中 获取要添加客户的信息
    # 并且插入到数据库中
    # 返回值 就是对应插入记录的对象 
    record = Customer.objects.create(name=info['name'] ,
                            phonenumber=info['phonenumber'] ,
                            address=info['address'])

    return JsonResponse({'ret': 0, 'id':record.id})

Customer.objects.create 方法就可以添加一条Customer表里面的记录。

五、临时取消 CSRF 校验

根据接口文档,添加客户 请求是个Post请求

POST /网站名/api/mgr/signin  HTTP/1.1
Content-Type:   application/x-www-fORM-urlencoded

注意,缺省创建的项目, Django 会启用一个 CSRF (跨站请求伪造) 安全防护机制。 在这种情况下, 所有的Post、PUT 类型的 请求都必须在HTTP请求头中携带用于校验的数据。 为了简单起见,我们先临时取消掉CSRF的 校验机制,等以后有需要再打开。 要临时取消掉CSRF的 校验机制,非常简单,只需要在 项目的配置文件 bysms/settings.py 中 MIDDLEWARE 配置项 里 注释掉 ‘django.middleware.csrf.CsrfViewMiddleware’ 即可。

六、修改客户信息

数据资源的 增查改删 里面的 改 就是 改动,对应的就是修改数据资源。 根据接口文档,修改客户数据接口,前端提供的数据格式如下:

{
    "action":"modify_customer",
    "id": 6,
    "newdata":{
        "name":"武汉市桥北医院",
        "phonenumber":"13345678888",
        "address":"武汉市桥北医院北路"
    }
}

我们可以使用如下的函数来处理:

def modifycustomer(request):

    # 从请求消息中 获取修改客户的信息
    # 找到该客户,并且进行修改操作
    
    customerid = request.params['id']
    newdata    = request.params['newdata']

    try:
        # 根据 id 从数据库中找到相应的客户记录
        customer = Customer.objects.get(id=customerid)
    except Customer.DoesNotExist:
        return  {
                'ret': 1,
                'msg': f'id 为`{customerid}`的客户不存在'
        }


    if 'name' in  newdata:
        customer.name = newdata['name']
    if 'phonenumber' in  newdata:
        customer.phonenumber = newdata['phonenumber']
    if 'address' in  newdata:
        customer.address = newdata['address']

    # 注意,一定要执行save才能将修改信息保存到数据库
    customer.save()

    return JsonResponse({'ret': 0})

七、删除客户

数据资源的 增查改删 里面的 删 就是 删除,对应的就是删除数据资源。 根据接口文档,删除客户数据接口,前端只需要提供要删除的客户的ID。

数据格式如下:

{
    "action":"del_customer",
    "id": 6
}

我们可以使用如下的函数来处理:

def deletecustomer(request):

    customerid = request.params['id']

    try:
        # 根据 id 从数据库中找到相应的客户记录
        customer = Customer.objects.get(id=customerid)
    except Customer.DoesNotExist:
        return  {
                'ret': 1,
                'msg': f'id 为`{customerid}`的客户不存在'
        }

    # delete 方法就将该记录从数据库中删除了
    customer.delete()
    return JsonResponse({'ret': 0})

八、和前端集成

最终我们的产品 前端和后端系统会集成在一起成为一个完整的系统。 部署到生产环境(生产环境就是正式的线上运营环境)运行的架构往往比较复杂。我们在后面有专门的章节讲述 一个比较完整的线上环境 如何搭建。

现在,请打开 bysms/urls.py 文件,在末尾 添加一个:

+  static("/", document_root="./z_dist")

并添加如下声明

# 静态文件服务
from django.conf.urls.static import static

最终,内容如下:

from django.contrib import admin

# 导入一个include函数
from django.urls import path, include

# 静态文件服务
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),

    # 凡是 url 以 sales/  开头的,
    # 都根据 sales.urls 里面的 子路由表进行路由
    path('sales/', include('sales.urls')),
    # 凡是 url 以 api/mgr  开头的,
    # 都根据 mgr.urls 里面的 子路由表进行路由
    path('api/mgr/', include('mgr.urls')),
]  +  static("/", document_root="./z_dist")

最后的+ static("/", document_root="./z_dist")就是在url 路由中加入 前端静态文件的查找路径。 这样如果 http请求的url 不是以 admin/ sales/ api/mgr/ 开头, Django 就会认为是要访问 z_dist目录下面的静态文件。

好了,现在我们 运行如下命令,启动Django 开发服务器:

Python manage.py runserver 0.0.0.0:8080

然后我们打开浏览器,输入如下网址:

http://127.0.0.1:8080/mgr/index.html#/

添加用户:

这是前端开发的 客户管理界面,可以在界面上进行客户的 增查改删操作, 这些操作会触发API 请求发送给我们的后端服务。 大家可以操作一下看看, 后端是否能够正确的响应。

到此这篇关于Python WEB后端开发中的增查改删处理的文章就介绍到这了,更多相关Python 增查改删处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python Web后端开发中的增查改删处理

本文链接: https://lsjlt.com/news/120158.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python Web后端开发中的增查改删处理
    目录前言一、创建 mgr应用目录二、添加处理请求模块 和 url 路由2.1定义函数1.新建customer文件,定义dispatcher函数2.总路由文件 bysms/urls.p...
    99+
    2024-04-02
  • [PYTHON]简单的文件增删改查处理
    快一个月木有更新了,在这段时间内,博主除了忙工作外,就一直在研究python编程,据圈内朋友闲聊,python应该是未来一个运维攻城狮除了shell以外必备的LINUX脚本语言,所以就硬着头皮,按照老男孩的python视频讲座,把自己的研...
    99+
    2023-01-31
    简单 文件 PYTHON
  • Python中字典的增删改查如何理解
    Python中字典的增删改查如何理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python中的字典一、字典的特点二、创建字典创建字典用大括号表示dict1={'...
    99+
    2023-06-22
  • 详解Python中字典的增删改查
    目录Python中的字典一、字典的特点二、创建字典三、查询字典数据四、Key的判断五、Key的删除六、Key的添加七、Key的修改八、字典的视图keys()values()iterm...
    99+
    2024-04-02
  • 微信小程序云开发之如何模拟后台增删改查
    这篇文章将为大家详细讲解有关微信小程序云开发之如何模拟后台增删改查,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。小程序云开发出来之后,小程序开发人员也要慢慢的接触后端对数...
    99+
    2024-04-02
  • python开发前后端分离的好处
    这篇文章主要介绍“python开发前后端分离的好处”,在日常操作中,相信很多人在python开发前后端分离的好处问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python开发前后端分离的好处”的疑惑有所帮助!...
    99+
    2023-06-02
  • python中列表的常用操作增删改查
    1. 列表的概念,列表是一种存储大量数据的存储模型。 2. 列表的特点,列表具有索引的概念,可以通过索引操作列表中的数据。列表中的数据可以进行添加、删除、修改、查询等操作。 3. 列表的基本语法 创建列表:变量名 = [数据1,数据2,…...
    99+
    2023-01-30
    常用 操作 列表
  • Java网络开发(Tomcat同步数据增删改查)—— 用Jsp语法实现同步请求的 增删改查
    目录 引出显示所有数据到前端(1)前端代码:list.jsp(2)后端代码:CompanyListServlet.java 新增数据---转发类型信息---新增信息业务(1)在list.j...
    99+
    2023-09-05
    java tomcat servlet
  • Python+Django+MySQL实现基于Web版的增删改查的示例代码
     前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路。效果演示在项目实战最后一...
    99+
    2022-05-31
    Django MySQL 增删改查 Django 增删改查
  • JavaScript如何处理树状结构数据的增删改查
    这篇文章主要介绍“JavaScript如何处理树状结构数据的增删改查”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript如何处理树状结构数据的增删改查...
    99+
    2024-04-02
  • 【后端开发---MySQL】mysql数据库基础(增删改查,函数,事务控制)特详细,保姆级教程
    学习前准备: 1,SQLyog 数据库客户端工具(其他客户端也可以,比如MySQL workbench 或者navicat)2,需要导入两个库(我已转备好,可以留言,我分享给你) 下面是数据库表导入教...
    99+
    2023-10-06
    数据库 mysql adb sql
  • 在Android开发中怎么对SQLite数据库进行增删改查操作
    在Android开发中怎么对SQLite数据库进行增删改查操作?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。      一.创建一个自定义数据库&...
    99+
    2023-05-31
    sqlite android lite
  • 怎么开发并部署一个支持增删改查的Fiori应用
    本篇内容主要讲解“怎么开发并部署一个支持增删改查的Fiori应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么开发并部署一个支持增删改查的Fiori应用”吧!Restful ABAP Pro...
    99+
    2023-06-04
  • 网络公开课_我理解的Oracle增删改查与你不同
    您好,Beijing Shennao 邀请您出席使用 WebEx 的网络研讨会。主题:网络公开课_我理解的Oracle增删改查与你不同主持人:Beijing Shennao日期与时间:2014年7月18日 ...
    99+
    2024-04-02
  • 一文吃透JS树状结构的数据处理(增删改查)
    目录问题描述解决方案1、新增节点2、删除节点3、修改节点4、查找节点总结问题描述 JS处理树状结构的增删改查 最近在开发一个后台管理系统的权限管理模块,涉及到各种树状结构的数据处理逻...
    99+
    2024-04-02
  • 使用node+express+mysql实现一个简单的后台管理(增删改查)
    目录  一、新建目录,如:test-demo,使用命令行初始化  二、安装相关依赖  三、自行安装mysql后,安装Navicat 16 for MySQL图形界面工具, 创建数据库,导入student_database.sql文件  四、...
    99+
    2023-10-07
    node.js express mysql vue elementui
  • Python实战案例之可增删改查的员工管理系统
    目录一、分析(一)大纲(二)添加员工(三)删除员工(四)查找员工(五)修改员工二、实现代码三、测试一、分析 (一)大纲 1、首先创建一个空列表,用来存储员工信息,即employee ...
    99+
    2024-04-02
  • web开发中前后端常见的鉴权方式有哪些
    这篇文章主要为大家展示了“web开发中前后端常见的鉴权方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web开发中前后端常见的鉴权方式有哪些”这篇文章吧...
    99+
    2024-04-02
  • 怎么理解Web前端开发中的Touch事件
    这篇文章主要介绍“怎么理解Web前端开发中的Touch事件”,在日常操作中,相信很多人在怎么理解Web前端开发中的Touch事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 详解使用pymysql在python中对mysql的增删改查操作(综合)
    这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: #!/usr/bin/python #cod...
    99+
    2022-06-04
    中对 详解 操作
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作