Django实战1-权限管理功能实现-07:组织架构列表展示

1 组织架构列表实现



我们需要在项目中可以查看所有组织建构的数据,数据以列表的形式在页面上展示,效果如下:

1.1 组织架构列表视图

打开sandboxMP/apps/system/views_structure.py, 添加列表视图:

class StructureListView(LoginRequiredMixin, View):

    def get(self, request):
        fields = [‘id‘, ‘name‘, ‘type‘, ‘parent__name‘]
        ret = dict(data=list(Structure.objects.values(*fields)))
        return HttpResponse(json.dumps(ret), content_type=‘application/json‘)

知识点介绍:

1、parent__name: parent是一个外键,数据库里面存储的字段是parent_id, 我们可以通过parent__name来获取parent外键关联数据的name字段内容。<br>

2、*fields:学过python应该清楚 *arg和**kwargs这两个魔法变量,通过这两个魔法变量我们可以将不定数量的参数传递给一个函数,这里我们通过*fields将需要查询字段列表传递给QuerySet的values

1.2 组织架构列表URL

打开sandboxMP/system/urls.py,添加列表URL:

urlpatterns = [
    ‘‘‘原有内容省略‘‘‘
    path(‘basic/structure/list/‘, views_structure.StructureListView.as_view(), name=‘basic-structure-list‘),
]

运行项目访问:http://127.0.0.1:8000/system/basic/structure/list/ 来访问组织架构数据列表,如果用户未认证,会先跳转到登陆页面,登入后的请求效果如下(我的浏览器安装了JSON viewer插件,所以会和你看到的实际列表样式不一样):

2 通过datatables展示列表数据

我们通过接口已经可以请求到组织架构的数据列表,接下来需要在前端,通过databalse来展示数据。

2.1 使用datatables

Datatables是一款jquery表格插件,使用灵活,可以将任何HTML表格添加高级的交互功能,包括:

  • 分页,即时搜索和排序
  • 支持多种数据源:DOM, javascript, ajax 和服务器处理
  • 支持不同主题:DataTables, jQuery, Bootstrap, Foundation
  • 丰富多样的option和强大的API 1、添加样式文件:打开sandboxMP/templates/system/structure/structure.html文件
# 在{% block css %}标签中添加添加css文件
<link rel="stylesheet" href="{% static ‘plugins/datatables/jquery.dataTables.min.css‘ %}">

# 在{% block javascripts %>标签中添加js文件
<script src="{% static ‘plugins/datatables/jquery.dataTables.min.js‘ %}"></script>
<script src="{% static ‘plugins/datatables/dataTables.const.js‘ %}"></script>

2、初始化数据表格:通过ajax来获取数据列表,在structure.html的{% block javascripts %}标签中添加数据表格初始化内容:

<script type="text/javascript">
    var oDataTable = null;
    $(function () {
        oDataTable = initTable();

        function initTable() {
            var oTable = $(‘#dtbList‘).DataTable($.extend(true, {},
                DATATABLES_CONSTANT.DATA_TABLES.DEFAULT_OPTION, //获取datatables默认配置
                {
                    ajax: {
                        "url": "{% url ‘system:basic-structure-list‘ %}",
                        // 通过ajax请求数据
                    },
                    columns: [ //初始化表格数据列,和structure.html里面定义的表头要对应
                        DATATABLES_CONSTANT.DATA_TABLES.COLUMN.CHECKBOX,
                        {
                            data: "id",
                            width: "5%",
                        },
                        {
                            data: "name",//parent
                            width: "20%",
                        },

                        {
                            data: "type",
                            render: function (data, type, row, meta) {
                                if (data == ‘unit‘) {
                                    return "单位";
                                } else if (data == ‘department‘) {
                                    return "部门";
                                }
                            }
                        },
                        {
                            data: "parent__name",
                        },

                        {
                            data: "id",
                            width: "12%",
                            bSortable: "false",
                            render: function (data, type, row, meta) {
                                var ret = "";
                                var ret = "<button title=‘详情-编辑‘ onclick=‘doUpdate("
                                    + data + ")‘><i class=‘glyphicon glyphicon-pencil‘></i></button>";
                                ret = ret + "<button title=‘关联用户‘ onclick=‘doAddUser("
                                    + data + ")‘><i class=‘glyphicon glyphicon-user‘></i></button>";
                                ret = ret + "<button title=‘删除‘ onclick=‘doDelete("
                                    + data + ")‘><i class=‘glyphicon glyphicon-trash‘></i></button>";
                                return ret;
                            }
                        }],
                    "order": [
                        [1, ‘id‘]
                    ],
                }));
            return oTable;
        }

    });

</script>

运行项目访问:http://127.0.0.1:8000/system/basic/structure/ 可以看到组织架构数据表格:

2.2 完善数据添加

通过点击【新增】按钮可以添加新的组织架构数据,但是表格中的数据不会自动刷新,我们想要在添加完数据口自动刷新表格,让新添加的数据在表格中显示。
修改sandboxMP/templates/system/structure/structure.html中javascripts新建按钮的点击事件:

$("#btnCreate").click(function () {
    layer.open({
        type: 2,
        title: ‘新增‘,
        shadeClose: false,
        maxmin: true,
        area: [‘800px‘, ‘400px‘],
        content: "{% url ‘system:basic-structure-create‘ %}",
        end: function () {
            //新增内容,弹窗关闭后刷新oDatable
            oDataTable.ajax.reload();
        }
    });
});

Ctrl + F5刷新页面,点击【新增】按钮,添加组织架构信息后会自动刷新表格,显示新的数据。

原文地址:https://www.cnblogs.com/jameslove/p/11043720.html

时间: 2024-10-09 09:52:19

Django实战1-权限管理功能实现-07:组织架构列表展示的相关文章

django项目后台权限管理功能。

对后台管理员进行分角色,分类别管理,每个管理员登录账号后只显示自己负责的权限范围. 创建后台管理数据库 models.py文件内 # 管理员表 class Superuser(models.Model): super_id=models.AutoField(primary_key=True) super_name=models.CharField(max_length=255) super_pwd=models.CharField(max_length=255) role = models.Ma

Django实战1-权限管理功能实现-08:组织架构修改和删除

1 组织架构的修改 实现思路: 1.请求:前台通过修改按钮,请求修改页面,同时传递修改数据的id到后台,后台通过reques.GET方法获取id,返回数据,并将数据渲染到修改页面 2.执行:前台修改完数据后,提交保存,后台通过ID获取数据实例,通过form.is_valid()成功验证数据想信息后,调用form.save()方法将数据保存到数据库. 1.1 组织架构修改视图 修改和添加操作很类似,添加是在数据库中插入一条新的纪录,修改是修改数据库已有实例,因此组织架构修改视图,可以和添加使用同一

Django实战1-权限管理功能实现-09:组织架构关联用户

实现组织架构和用户绑定,通过绑定按钮设置组织架构和用户之间一对多的关联关系. 1 关联用户 1.1 关联用户的视图实现 打开sandboxMP/apps/system/views_structure.py,添加如下内容: from django.contrib.auth import get_user_model User = get_user_model() class Structure2UserView(LoginRequiredMixin, View): def get(self, re

Django实战1-权限管理功能实现-01:搭建开发环境

1 项目开发环境 语言环境: python3.6.2 , django-2.1.2 数据库环境:sqlite3(开发环境使用,部署环境使用mysql5.6) 开发工具:pycharm 2 安装python 说明:已经安装过python3.6环境的可以跳过此步.python安装包下载地址:https://www.python.org/downloads/windows/ 访问上面地址,找到Python 3.6.2rc2 - 2017-07-07,点击 Windows x86-64 executab

基于Django实现RBAC权限管理

概述 RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定权限,然后给用户划分角色.在web应用中,可以将权限理解为url,一个权限对应一个url. 在实际应用中,url是依附在菜单下的,比如一个简单的生产企业管理系统,菜单可以大致分为以下几块:制造.资材.生产管理.人事.财务等等.每个菜单下又可以有子菜单,但最终都会指向一个url,点击这个url,通过Django路由系统执行一个视图函数,来完成某种操作.这里,制造部的员工登录系统后,肯定不能点击财务

PHP实现权限管理功能

权限管理系统,它主要是为了给不同的用户设定不同的权限,从而实现不同权限的用户登录之后使用的功能不一样. 首先先看下数据库 总共有5张表,users,roles和roleswork 3张表与另外2张表形成"w"型的关系,也是比较常见的一种权限数据库的方式,首先先做权限的设定,也就是管理层给不同用户设定不同权限. 1.管理员页面RBAC.php <!DOCTYPE html> <html> <head> <meta charset="UT

TP thinkphp 权限管理功能

目前,在tp框架中做权限管理 分rbac(老)与auth(推荐)认证方式: 老的tp版本中封装的是rbac认证: 新一点的都开始使用auth方式管理了.推荐使用此方式: 实现步骤一:引入类库Auth.class.php 实现步骤二:创建数据表 a.菜单表 CREATE TABLE `wifi_admin_nav` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '菜单表', `pid` int(11) unsigned DEFAUL

&lt;测试用例设计&gt;用户及权限管理功能常规测试方法

1)  赋予一个人员相应的权限后,在界面上看此人员是否具有此权限,并以此人员身份登陆,验证权限设置是否正确(能否超出所给予的权限): 2)  删除或修改已经登陆系统并正在进行操作的人员的权限,程序能否正确处理: 3)  重新注册系统变更登陆身份后再登录,看程序是否能正确执行,具有权限是否正确: 4)  在有工作组或角色管理的情况下,删除包含用户的工作组或角色,程序能否正确处理: 5)  不同权限用户登录同一个系统,权限范围是否正确: 6)  覆盖系统所有权限设定: 7)  能否添加信息为空的用户

solr入门之搭建具有安全控制和权限管理功能的SolrCloud集群

结合上次搭建项目和配置安全控制的经验,工程的搭建过程应该如下: 1.搭建zookeeper集群 2.配置solr的jetty启动配置 3.在solr启动配置中增加zk的acl配置信息 4.使用solr配置,启动solrcloud集群将 集群交给zookeeper管理 5.上传相关的配置文件,创建集合 6.上传安全配置文件 7.登录admin界面,查看集群状态及能否访问到zookeeper上的文件 8.添加数据到solrcloud中 9.配置客户端,使用solrj来操作solrcloud(摸索阶段