python笔记22(CRM1)

一、打开下载的项目

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")
models.py

    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. 字体图标相比图片的好处
  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中设置权限相关的配置项

 

原文地址:https://www.cnblogs.com/xingye-mdd/p/9757901.html