zoukankan      html  css  js  c++  java
  • 2-crm项目-kingadmin,第一步实现动态菜单的展示

    创建自己的后台系统

    """
    django自带后台admin的使用:
    1,注册每个表,
    2,创建超级管理员,用来登陆
    3,登陆进去里面有user和group,这是django自带的,
    4,你可以在user中,创建一个用户,然后登陆,是没有任何的权限的,
    5,可以给新建的用户,添加权限,但是这个权限级别只能到表,不能到更具体的了,
    6,对于表名,是显示的英文,但是你可以配置表的元信息来改变成为汉字,
    7,我们可以使用django自带的认证系统,来创建自己的用户表,

    ########################## 我们要一个自己的系统, 需求: 1,不同角色进去之后显示不一样的页面, 比如销售看到的学生表,是一个表格, 比如讲师看到的学员表,也是一个表格,
    怎么实现???
    1,笨办法就是每一个表对应的页面都写一遍,但是这样会导致大量的代码冗余,
    2,页面应该都是一个页面,只是说展示的数据不一样,然后不一样的部分进行定制化,
    3,每一个人进去的菜单,都是动态的,这个菜单也可以使用一个页面,只是展示的菜单数据不同而已,
    4,现在来实现前端的展示,前端可以使用bootstrap,可以使用他们提供的页面模板,
    

     """

    使用bootstrap模板的方法

    第一步:下载bootstrap模板
    进入bootstrap官网---点击bootstrap3----点击起步----找到基本模板--进入模块--右键另存为(全部网页)--打开文件夹会有一个文件夹和一个html
    把文件夹的内容都保持起来:Dashboard Template for Bootstrap_files
    第二步:在templates,创建一个base,
    只保存静态的部分,只保存css,js,等,可以把除body的部分都放到base,
    把之前下载的模板的html全部放到base,然后把整个body移出去放到index

    第三步:在templates,创建一个index,
    创建一个index,然后继承base,body放到这个index

    第四步:创建url,创建view视图,
    先把这个网页展示出来,这个时候应该是没有样式的,

    第五步:把静态文件加进来,
    创建一个static文件夹,
    需要在settings里面进行配置,
    STATIC_URL = '/static/' 这是一个别名,下面引号里面路径写成什么无所谓,使用的时候就用这个,
    STATICFILES_DIRS = (
      os.path.join(BASE_DIR, "statics"),
    )
    这是一个元组,很明显可以放很多个静态文件路径,
    在static文件夹下面新建几个文件夹,css,js,fonts,img,然后把第一步下载的模板带的文件夹中的js和css放到对应的文件夹,
    bootstrap.min.js,jquery.min.js,这个min的意思是压缩的,生产生都是这样的,省空间,这两个文件是必须的,其他的都无所谓,

    第六步:修改base文件,
    修改的第一步是识别,是判断,你需要具备一定的前端知识,
    把所有的css路径改掉,所有的js路径改掉,js是可以放到body外边的,

    第七步:修改index文件,
    把不需要的内容删除

    动态菜单的实现

    需求:
    一个角色要显示哪些菜单,不同的角色进去,要显示不一样的菜单,要怎么做?
    1,他能看到哪些菜单,需要定义一下,而且这个数据需要在数据库存放,
    2,url和角色怎么关联,肯定是数据库里面关联,crm_roles_menu,crm_roles,crm_menu这个角色和菜单是多对多的,
    就是一个角色可以有多个菜单,菜单也可以有属于多个角色,url可以给url起一个别名,然后保存这个别名,

    原理:
    员工有一个字段叫做角色,user
    角色下面有很多的菜单,一个菜单也可以属于多个角色,roles,menu,多对多,
    roles表
    name,menu(多对多)
    menu表,
    name,url_name(这是url的别名,通过在url类设置每一个url的路径别名,放在这里)
    如果url有参数,就不能用别名了,没有参数就可以使用别名,使用别名可以防止url改动之后所改动的代码会比较多,用别名就好多了,
    3,创建学生主页面,和销售人员html主页面,然后继承index.html, 4,注意,user表中和role表是多对多的, 对于django自带的认证系统还是理解的不够深刻,
    对于request这个对象的理解,还是有问题的,
    request.user的用法还是使用django认证系统的的原因

    对于模板语言和后端的交互的理解还是不够深刻的,
    url就是模板语言中的一个用法,



     总结:

    怎么实现的这个动态菜单:
    包含了几部分
    1,登陆
    2,登陆之后校验权限,
    3,表,包括了user,menu,role,
    一个人挂一个角色,一个角色挂多个菜单,
    4,url,这就是菜单,
    6,登陆了之后,根据用户查找角色,找到菜单然后展示到页面上

    html:

     <div class="col-sm-3 col-md-2 sidebar">
          <ul class="nav nav-sidebar">
            {% for  role in request.user.roles.all %}
              {% for menu in role.menus.all %}
                <li class=""><a href="{% if menu.url_type == 0 %}{%  url  menu.url_name %} {% else %}{{ menu.url_name }}{% endif %}">{{ menu.name }}</a></li>
              {% endfor %}
            {% endfor %}
          </ul>
        </div>

     ###############  展示学生列表页面   ###############

  • 相关阅读:
    如何解决aws解绑银行卡问题?
    如何解决macbook pro摄像头不工作的问题
    Window安装AutoCAD
    Mac应用程序无法打开,提示不明开发者或文件损坏的处理方法
    Android硬件抽象层(HAL)深入剖析(三)【转】
    Android硬件抽象层(HAL)深入剖析(二)【转】
    Android硬件抽象层(HAL)深入剖析(一)【转】
    Glide的用法
    Gradle-5.3:依赖-管理依赖的版本(传递(transitive)排除(exclude)强制(force)动态版本(+))
    Android 7.0 FileProvider 使用说明
  • 原文地址:https://www.cnblogs.com/andy0816/p/13398998.html
Copyright © 2011-2022 走看看