74.(后端)删除角色权限接口实现——用路由来接收参数实现层级删除功能

1.概述

接收传递的参数方式很多,例如request,form形式,这两种在之前的内容中都使用过,我们这次将采用把参数放在路由地址中传递的方式进行实现接口。
后端需要接收两个参数,第一个是哪个角色:rid,第二个是哪个菜单(权限):mid;
本次接口的功能是:删除某一个角色(role)的某一个权限(menu)

2.主要代码

# 使用路由地址进行参数的传递
# 删除角色的权限
@role.route('/del_menu/<int:rid>/<int:mid>')
def del_menu(rid,mid):
    try:
        r = models.Role.query.get(rid)
        m = models.Menu.query.get(mid)
        # 注意:当我们获取这个mid时候,其实是从Menu中获取到的,只要存在这个权限一定能获取到
        # 但是,可能角色中并不存在这个权限,只是Menu中有
        if all([r,m]):
            # 查看m是否真的存在于r的权限中,存在才能删
            if m in r.menus:
                # 从角色中移除其中的权限
                r.menus.remove(m)
                # 当我们删除一级菜单(权限)时候,如果存在子目录,一共连带一起删除
                if m.level ==1:
                    for temp_m in m.children: # 获取删除当前根节点的所有子节点
                        if temp_m in r.menus: # 判断当前子节点是在当前权限
                            r.menus.remove(temp_m)
                db.session.commit()
                return to_dict_msg(200,msg='删除权限成功!!!')
            return to_dict_msg(10021)
        return to_dict_msg(10000)
    except Exception as e:
        print(e)
        return to_dict_msg(20000)

3.测试结果

第一次删除
在这里插入图片描述
第二次删除
在这里插入图片描述
删除主节点,连带删除子节点
在这里插入图片描述

4.完整代码展示

# flask_shop/role/view.py
from ast import Delete
from flask import request
from flask_shop.role import role,role_api
from flask_shop import models,db
from flask_restful import Resource
from flask_shop.utils.message import to_dict_msg

class Role(Resource):
    # 获取数据
    def get(self):
        role_list = []
        try:
            roles = models.Role.query.all()
            role_list = [r.to_dict() for r in roles]
            return to_dict_msg(200, role_list, '获取角色列表成功')
        except Exception as e:
            print(e)
            return to_dict_msg(20000)
    
    # 增加数据
    def post(self):
        name = request.form.get('name')
        desc = request.form.get('desc')
        try:
            if name:
                role = models.Role(name= name, desc= desc)
                db.session.add(role)
                db.session.commit()
                return to_dict_msg(200, msg='增加角色成功!!!!')
        except Exception as e:
            print(e)
            return to_dict_msg(20000)
    
    # 删除数据
    def delete(self):
        try:
            id = int(request.form.get('id'))
            r = models.Role.query.get(id)
            if r:
                db.session.delete(r)
                db.session.commit()
                return to_dict_msg(200,msg="删除角色成功!!!!!")
        except Exception:
            return to_dict_msg(20000)
    
    # 修改数据
    def put(self):
        try:
            id = int(request.form.get('id'))
            name = request.form.get('name').strip() if request.form.get('name') else ''
            desc = request.form.get('desc').strip() if request.form.get('desc') else ''
            if name:
                r = models.Role.query.get(id)
                if r:
                    r.name = name
                    r.desc = desc
                    db.session.commit()
                    return to_dict_msg(200, msg= '修改角色信息成功!!!')
                return to_dict_msg(10020)
        except Exception as e:
            return to_dict_msg(20000)


role_api.add_resource(Role, '/role')

# 使用路由地址进行参数的传递
# 删除角色的权限
@role.route('/del_menu/<int:rid>/<int:mid>')
def del_menu(rid,mid):
    try:
        r = models.Role.query.get(rid)
        m = models.Menu.query.get(mid)
        # 注意:当我们获取这个mid时候,其实是从Menu中获取到的,只要存在这个权限一定能获取到
        # 但是,可能角色中并不存在这个权限,只是Menu中有
        if all([r,m]):
            # 查看m是否真的存在于r的权限中,存在才能删
            if m in r.menus:
                # 从角色中移除其中的权限
                r.menus.remove(m)
                # 当我们删除一级菜单(权限)时候,如果存在子目录,一共连带一起删除
                if m.level ==1:
                    for temp_m in m.children: # 获取删除当前根节点的所有子节点
                        if temp_m in r.menus: # 判断当前子节点是在当前权限
                            r.menus.remove(temp_m)
                db.session.commit()
                return to_dict_msg(200,msg='删除权限成功!!!')
            return to_dict_msg(10021)
        return to_dict_msg(10000)
    except Exception as e:
        print(e)
        return to_dict_msg(20000)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值