###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):
```