zoukankan      html  css  js  c++  java
  • 3-crm项目-kingadmin,先实现一个所有表的列表页面,

    为什么要自己写一个admin:

    为什么不使用django的admin?而要自己写一个呢?
    因为你用django-admin不好做定制,不能无缝的嵌入到自己的项目中去,所以现在你就明白了,一定要搞定这个自定义的admin,
    因为是你自己写的,所以后面怎么改你就完全懂了,
    后面我要用这个kingadmin来写我自己的自动化项目,很快就会出来,

    客户库

    """
    
    实现学生库-----学生列表页面
    1,有列表
    2,搜索
    3,有过滤
    4,有分页
    5,有批量操作,
    
    要做成一个通用的页面,每个页面不配置都一样,然后特殊的部分通过 配置来实现,
    你把这个搞出来了,就相当于自己写了一个admin了,
    我们可以做成一个模块,可以应用到别的项目,单独做成一个app,
    
    分析url,就是admin/appname/tablename
    通过url找到这个表名,这个可以使用反射来找到,就可以把表里面的数据取出来,
    然后把数据放到页面,页面上就可以传什么表就展示什么表了,
    这是基本的思路
    
    代码怎么写?
    首先第一步,先实现一个所有表的列表页面,
    1,创建页面,table_index.html
    2,继承base,把菜单的部分删除掉,保留单行条,
    3,使用bootstrap的面板,上面是appname,下面是tablename,
    
    现在最重要的是解决为什么一注册就展示了这个表,
    思路就是创建了一个字典:
    {appname:{tablename: tableadminclass,
                tablename: tableadminclass,
                },
    appname:{tablename: tableadminclass,
                tablename: tableadminclass,
                },
    }
    
    要会使用cmd来操作Python,快速验证自己的想法
    到项目目录,
    python manage.py shell
    from crm import models
    models.UserProfile
    dir(models.UserProfile)
    models.UserProfile._meta
    models.UserProfile._meta.app_label------->获取app的名字
    models.UserProfile._meta.model_name------>获取表的名字

    怎么通过表名获取到modelclass,和app的名字呢? 1,model_class._meta.app_label 2,model_class._meta.model_name 怎么把admin_class 和model_class 进行关联呢? admin_class.model = model_class 加了一个属性,利于前端调用,
    第二步:把字典返回到前端页面,进行渲染
    django的tag标签是非常厉害的,要好好的利用,

    第三步:把菜单做成一个超链接
    肯定是一个a标签,然后把href的值渲染进来
    url这个tag标签是怎么使用的呢? """

     总结:

     1,有这么多的表怎么把这些表都展示出来,

    写一个注册的函数,

    这个函数的作用就是在构建一个字典,{crm:{customer:customer_class}}

    enabled_admins = {}
    def register(model_class,admin_class=None):
        # 注册的用途就是构建了一个字典,
        # {"crm":{"表名":"对应的定制类"}}
        # 剩下的就是构建这个字典了
        if model_class._meta.app_label not in enabled_admins:
            enabled_admins[model_class._meta.app_label] = {}  # enabled_admins['crm'] = {}
        # admin_obj = admin_class()
        # admin_obj.model = model_class
        admin_class.model = model_class  # 绑定model 对象和admin 类,加上这一句利于前端调用,admin_class为空的问题需要特殊处理,这里没有处理,
        enabled_admins[model_class._meta.app_label][model_class._meta.model_name] = admin_class  
       # enabled_admins['crm']['customerfollowup'] = CustomerFollowUpAdmin

    2,还需要一个views把这个字段,传到前端去

    def index(request):
        #print(king_admin.enabled_admins['crm']['customerfollowup'].model )
        return render(request, "king_admin/table_index.html",{'table_list':king_admin.enabled_admins})

    3,把这个字典放到页面上就可以循环展示了

    只需要把表名展示出来,然后做为一个超链接,点击进入列表页

    <div class="panel-body">
                            {{ table_list }}
                            {% for app_name,app_tables in table_list.items %}
    
                                <table class="table table-hover">
                                    <thead>
                                    <tr>
                                        <th>{{ app_name }}</th>
                                    </tr>
                                    </thead>
                                    <tbody>
                                    {% for table_name,admin  in app_tables.items %}
                                        <tr>
                                            <td>
                                                <a href="{% url 'table_objs' app_name table_name %}">
                                                    {% render_app_name admin %}
                                                </a>
                                            </td>
                                            <td>add</td>
                                            <td>change</td>
                                        </tr>
                                    {% endfor %}
                                    </tbody>
                                </table>
                            {% endfor %}
    
                        </div>

     ###############################

  • 相关阅读:
    Installshield 添加应用程序到防火墙例外
    服务器表导入到本地数据库SQL语句
    【转】13个JavaScript图表(JS图表)图形绘制插件
    【转】20个简化开发任务的 JavaScript库
    【转】8 个效果惊人的 WebGL/JavaScript 演示
    【转】JavaScript 3D图表
    VMware显示错误:“未能锁定文件 无法打开磁盘 ..*.vmdk 或者某一个快照所依赖的磁盘。”解决办法
    Spring HTTP invoker简介
    【转】在Ubuntu下建立Eclipse的Android开发环境
    【转】在NetBeans上搭建Android SDK环境
  • 原文地址:https://www.cnblogs.com/andy0816/p/13435077.html
Copyright © 2011-2022 走看看