django第六天上课总结

###day19
- 1.分页
- 2.modelform     
- 3.权限控制
    - 1.用户登录保存权限信息
    - 2.每次请求都通过中间件
        - url 
        - 白名单的校验
        - 登录状态的校验
        - 免认证地址的校验
        - 权限的校验


###模板中自定义方法
- 1.在app下创建一个名为templatetags的python包
- 2.在python中创建python文件  my_tag.py
- 3.在python文件中写固定的代码
    ```python
    from django import template
    register = template.Library()  #  register 不能变
    ```
    
- 4.定义函数 + 加装饰器
    - 1.simple_tag
    ```python
    @register.simple_tag 
    def reverse_url(name, *args, **kwargs):
    ```
    
    - 2.inclusion_tag  返回一个灵活的HTML代码段
    ```python
    @register.inclusion_tag('show_li.html')
        def show_li(num):
            return {'num':range(num)}
    ```
    
    - show_li.html
    ```html
        <ul>
            {% for i in num %}
                <li>{{ i }}</li>
            {% endfor %}
        </ul>
    ```

    - 3.过滤器
    ```python
    # 权限控制到按钮级别
    @register.filter
    def has_permission(request,name):
        permission_dict = request.session.get(settings.PERMISSION_SESSION_KEY)
        if name in permission_dict:
            return True
     ```

###使用:
- 1.导入 {% load  文件名 %}
- 2.使用   {% 函数名 参数1  参数2 k1=v1  %}

    ```python
    from django.http.request import QueryDict  
    
    qd = QueryDict(mutable=True)  # 可编辑的字典
    qd['next'] = next
    qd.urlencode()    # urlencode  url编码
    qd._mutable =True   # 改为可编辑的
    qd.copy()    # 深拷贝  可编辑的字典
    ```    


###二级菜单

- 信息管理  _>  一级菜单
    - 部门列表
    - 用户列表    _> 二级菜单
    
- 财务管理
    - 账单管理
    - 报销管理


- 部门管理
    - 部门列表
        - 添加部门
        - 编辑部门
        - 删除部门

- 用户管理
    - 用户列表

- id   url                      title    menu_id  parent_id
- 1    /department_list/        部门列表     1         null     #  二级菜单 父权限
- 2    /department_add/        添加部门    null       1        #  子权限
- 3    /department_edit/(d+)/    编辑部门    null       1
- 4    /department_del/(d+)/    删除部门    null       1
    
    
###用户表的问题:
- crm 有用户表   rbac中也有用户表   最终用crm的用户表
    - 1.改rbac的用户表
    ```python
        class RbacUser(models.Model):
            # username = models.CharField('用户名', max_length=32)
            # password = models.CharField('密码', max_length=32)
            roles = models.ManyToManyField(Role, verbose_name='用户所拥有的角色', blank=True)  # Role的不要引号

            class Meta:
                abstract = True  # 这张表不会在数据库中生成  当做基类 让子类去继承

            def __str__(self):
                return self.username
    ```    
                
    - 2.改crm的用户表
    ```python
   from rbac.models import RbacUser

        class User(RbacUser):
   ```
        
原文地址:https://www.cnblogs.com/lilyxiaoyy/p/11463116.html