一、打开下载的项目
1、选择File>>Setting,Project Interpreter选择python3.6.
2、打开Edit Configurations,按照以下进行修改。
3、项目运行时,如果出现找不到模块,就使用pip install 模块名进行下载,xlrd主要用户批量导入功能的需求。
二、权限系统
CRM介绍:包括:1、权限系统
2、业务逻辑
1)什么叫权限?
对于一个系统来说,不同用户能做的事儿不一样!
用户的权限不一样。
2)我们为什么要讲权限系统?
1. 只要是一个系统中涉及到不同的用户,都会有权限系统的需求。
2. 咱们目标是写一套可以适用任何系统的权限系统。
3. 只需要写一次,跳槽用的着。
3)针对Web开发来说,权限是什么?
不同的权限 <--> 不同的URL
一个URL对应一个权限
4)权限系统设计?RBAC(基于角色的权限控制系统)
1. 做项目
1. 分析需求
2. 表结构设计 程序 = 数据 + 业务逻辑
2. 第一版表结构设计(详见excel第一个sheet)
5)第一版(第一版的表结构设计有缺陷?管理权限的时候太复杂了):
6)第二版(考虑到公司中存在兼任的现象,将用户和角色表设计成多对多)
7)写代码
1.为了实现项目结构的解耦,把权限系统单独写成一个app
复习Django中创建app步骤:
1.只能通过Terminal创建app,打开Terminal,输入python manage.py startapp 项目名字(项目名字命名为rbac,意思为基于角色的访问控制)
2.在setting.py中注册app
3.在rbac下的models.py文件中创建表结构,然后执行两条命令,把表结构同步到数据库
from django.db import models # Create your models here. # 用户表 class UserInfo(models.Model): username = models.CharField(max_length=16, verbose_name="用户名") password = models.CharField(max_length=32, verbose_name="密码") roles = models.ManyToManyField(to="Role") # 角色表 class Role(models.Model): title = models.CharField(max_length=32, verbose_name="角色名称") permissions = models.ManyToManyField(to="Permission") # 权限表 class Permission(models.Model): url = models.CharField(max_length=255, verbose_name="url")
1. python manage.py makemigrations
2. python manage.py migrate
4.借助Django Admin 录入数据
1.创建超级用户,用来登录admin管理后台:python manage.py createsuperuser;
输入用户名;
输入email,可以不输入;
输入密码,至少8位,不能纯数字或纯字母;
2.将我们自己写的表注册到Django admin中,在app/admin.py中按照固定的格式注册model,然后重启项目;
3.管理后台,显示中文:设置settings中的LANGUAGE_CODE = 'zh-hans';显示时区:TIME_ZONE = 'Asia/Shanghai';
4.表名字设置显示中文;
5.表中展示可读的内容;
6.录入数据;
7.数据库添加字段,可以在先设置null = True,然后更新数据库后,把为空的字段添加后,去掉null = True,再次更新数据库。
8.Django admin进阶,修改在页面上展示的字段以及直接修改字段;
5.权限系统开发
1.Django请求的生命周期(浏览器输入一个地址,点击回车,发生了什么)
wsgi:wsgi是web服务网管接口,wsgiref/uwsgi模块实现了wsgi协议(本质写一个socket服务端)
wsgiref模块:单进程单线程,适用于开发测试,对性能要求低
uwsgi模块:处理并发
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中
三、菜单展示
1. 一级菜单用户没有权限的菜单就不展示出来
1. 什么能做菜单?
URL是固定的可以作为菜单,不固定就不能
2. 如何展示菜单?
在权限表中增加 is_menu和icon两个字段
1. 取到当前用户要显示哪些菜单
2. 把该用户的菜单显示出来
四、font Awesome图标
http://fontawesome.dashgame.com/1. 体积小
2. 放大不失真
3. 随意修改颜色
2. 使用
五、权限系统的使用
1、拷贝rbac这个app到项目中;
2、删除rbac/migrations中的迁移记录;
3、在新项目中注册rbac这个app;
4、创建数据库迁移;
python manage.py makemigrations
python manage.py migrate
5、注册admin,录入新系统中的数据 -->自动发现并录入url;
python manage.py createsuperuser
6、在登录流程中初始化权限信息;
7、注册中间件;
8、在settings.py中设置权限相关的配置项