day22 2018-09-16html
1. 今日内容
CRM(客户管理系统)
- 权限系统
- 业务逻辑
初恋版代码:
是一个简单的增删改查项目,
其中大家能够看一下批量导入功能是如何实现的。
2. 权限系统
1). 什么叫权限?
对于一个系统来讲,不一样用户能作的事儿不同!
用户的权限不同。
2). 咱们为何要讲权限系统?
1. 只要是一个系统中涉及到不一样的用户,都会有权限系统的需求。
2. 我们目标是写一套能够适用任何系统的权限系统。
3. 只须要写一次,跳槽用的着。
3). 针对Web开发来讲,权限是什么?
不一样的权限 <--> 不一样的URL
一个URL对应一个权限
4). 权限系统设计?RBAC(基于角色的权限控制系统)
1. 作项目
1. 分析需求
2. 表结构设计 程序 = 数据 + 业务逻辑
2. 初版表结构设计(详见excel第一个sheet)
用户
id name pwd
权限
id url
用户-权限
id 用户id 权限id
3. 初版的表结构设计有缺陷?
1). 管理权限的时候太复杂了
4. 第二版(详见excel第二个sheet)
用户
id name pwd
权限
id url
角色表
id title
角色-权限关系表
id 角色id 权限id
考虑到公司中存在兼任的现象,将用户和角色表设计成多对多
用户-角色表关系表
id 用户id 角色id
5. 写代码
1). 为了实现项目结构的解耦,把权限系统单独写成一个app
1. 建立APP
复习下Django中建立app的步骤
1. python manage.py startapp rbac
2. 在settings.py中注册app
2). 执行两条命令,把表结构同步到数据库
1. python manage.py makemigrations
2. python manage.py migrate
3). 录入数据
借助Django Admin
预习下Django admin的用法
1. 建立超级用户,用来登录admin管理后台
python manage.py createsuperuser
2. 将咱们本身写的表注册到Django admin中
在app/admin.py中按照固定的格式注册model
def __str__(): 做用是将一条记录在页面上展现可读的内容
class Meta:
verbose_name = "权限表"
verbose_name_plural = verbose_namepython
settings.py
1. 改中文
LANGUAGE_CODE = 'zh-hans'
2. 改时区
TIME_ZONE = 'Asia/Shanghai'
3. 录入数据
4. Django admin进阶
https://www.cnblogs.com/liwenzhou/p/9519321.html
4). 权限系统开发
1. Django 请求的生命周期
2. 权限系统功能分析
1. 用户必须登录
2. 用户登录成功以后
1. 拿到当前用户都有哪些权限
3. 用户访问网站的页面(url)
1. 判断当前访问的URL在不在该用户的权限里面
- 若是存在就放行
- 若是不存在就拒绝访问
3. Django小知识点:
1. 视图函数能够拆分红不一样的py文件
2. Django项目查找html文件的顺序
1. 先找项目根目录下的templates
2. 找app目录下的templates
4. 权限的校验
1. 应该将权限的校验功能放在中间件中的process_request()方法
2. 复习中间件
1. 中间件在Django中的settings.py注册的
2. 如何自定义中间件
1. 按照规定的格式写一个中间件的类
2. 把本身写的类注册到Django中
RBAC --> admin --> 写代码 --> 权限的查询 --> 权限的校验
3. 菜单展现
1. 一级菜单
用户没有权限的菜单就不展现出来
1. 什么能作菜单?
URL是固定的能够做为菜单,不固定就不能
2. 如何展现菜单?
在权限表中增长 is_menu和icon两个字段
1. 取到当前用户要显示哪些菜单
2. 把该用户的菜单显示出来
4. font Awesome图标
http://fontawesome.dashgame.com/数据库
1. 字体图标相比图片的好处
1. 体积小
2. 放大不失真
3. 随意修改颜色
2. 使用
5. Django模板语言
https://www.cnblogs.com/liwenzhou/p/7931828.html
1. filter 过滤器方法
对变量作一些修改/格式化等操做
2. 自定义filter函数
1. 在app目录下新建一个名为templatetags的python包
2. 建立一个py文件
3. 在py文件中定义一个函数,函数要按照filter的格式注册
3. 使用自定义的filter方法
1. {% load py文件名 %}
2. {% 变量|自定义filter名 %}
4. Django 模板语言的 tags
1. 内置的static
防止把静态文件的前缀写死
{% load static %}
{% static '静态文件的路径' %}
2. 自定义simple_tag 相似于自定义filter
5. inclusion_tag
1. 当须要传递一些数据去渲染一部分HTML代码的时候
6. 权限系统的使用django
8个步骤
1. 拷贝rbac这个app到项目中
2. 把rbac/migrations目录下的迁移记录都删掉
3. 在项目中注册rbac这个app
4. 建立数据库迁移(执行那两条命令)
5. 注册admin,录入数据 --> 自动发现并录入权限URL
6. 在登陆流程中初始化权限信息
7. 注册中间件
8. 在settings.py中设置权限相关的配置项
补充知识点:app
一、时间间隔
datetime.timedelta(days=7)函数
二、引入其余写好的项目以后,改改对应的配置就能够启动字体
三、excel文件网站
四、权限的表结构设计
url
五、注册权限app设计
六、多对多字段设计到哪一个表中,就看哪一个正向查询的多,就设计到哪一个表中
七、自定义管理类
八、django的一个请求的生命周期
九、把不一样功能的视图函数放到不一样的py文件中
十、自定义filter方法必须新建一个python包
十一、字体图标
十二、让django admin的管理后台变成中文