python 全栈开发,Day118(django事务,闭包,客户管理,教学管理,权限应用)
昨日内容回顾
一、django事务
什么是事务
一系列将要发生或正在发生的连续操作。
作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。
MySQL事务
- 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
- 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
- 事务用来管理 insert,update,delete 语句
事务处理
用 BEGIN, ROLLBACK, COMMIT来实现
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
举例:
比如购买商品,在页面上,会有商品的数量
django事务
Django 1.4 事务默认模式是autocommit模式,每个查询都相当于一个事务,每次查询都直接提交commit事务,除非事务被禁止
在view里面的使用:
装饰器
@transaction.commit_on_success def view(): a.save() b.save() return ...
with用法
def func() with transaction.commit_on_success(): a.save() b.save() return ...
二、闭包应用
什么是闭包
先来理解一下,如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。再来看定义
闭包: 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
更多详情,请参考链接:
https://www.cnblogs.com/Lin-Yi/p/7305364.html
三、客户管理
四、教学管理
五、权限应用
由于时间关系,详细的步骤略...
总结:
第一部分:权限管理 第二部分:stark组件 第三部分:crm业务 1. crm系统主要用于做什么? 客户关系管理。 2. 主要给谁用? - 销售 - 客户分类,销售底薪+业绩 - 公户:申请(锁) - 行锁:innodb -> 行锁+表锁+事务 - 表锁:Mysiam -> 表锁 - 私户:150人+自己客户 - 全户 - 客户跟进 - 缴费申请 - 推广 - 在公户中录入有效数据 - 渠道 - 在公户中录入有效数据 - 教学,老师 - 上课 - 作业 - 成绩 - 教质 - 考勤 - 问卷 - 学生 - 交作业 - 查成绩 - 查看个人信息 - 问卷 3. 技术点 - Form的作用? - 对用户提交的一组表单数据进行校验。 - ModelForm的作用? - 对用户提交的一组表单数据进行校验。 - 快速实现增加、修改 - FormSet的作用? - 对用户提交的多组表单数据进行校验。 - ModelFormSet的作用? - 对用户提交的多组表单数据进行校验。 - 快速实现增加、修改 第四部分:权限的应用 a. 录入权限信息 http://127.0.0.1:8000/rbac/menu/list/ http://127.0.0.1:8000/rbac/multi/permissions/?type=update b. 分配权限 创建角色:http://127.0.0.1:8000/rbac/role/list/ 权限分配:http://127.0.0.1:8000/rbac/distribute/permissions/ c. 权限验证+自动生成菜单 # 权限信息初始化 init_permission(user_obj,request) MENU_SESSION_KEY = "u8fkksjdfkjsf" PERMISSION_SESSION_KEY = "u8fkksjdfkjsf" # 中间件请求进行权限校验 'rbac.middleware.rbac.RbacMiddleware' PERMISSION_VALID_URL = [ '/login/', '/admin/.*', ] # inclusion_tag {% load rbac %} {% menu request %} {% breadcrumb request %} # 引入css和js <link rel="stylesheet" href="{% static 'rbac/css/rbac.css' %} "/> <script src="{% static 'rbac/js/rbac.js' %} "></script> d. 按钮的控制 from django.conf import settings from stark.service.stark import StarkConfig class RbacPermission(object): def get_add_btn(self): name = "%s:%s" %(self.site.namespace,self.get_add_url_name,) permission_dict = self.request.session.get(settings.PERMISSION_SESSION_KEY) if name in permission_dict: return super().get_add_btn() def get_list_display(self): val = super().get_list_display() permission_dict = self.request.session.get(settings.PERMISSION_SESSION_KEY) edit_name = "%s:%s" %(self.site.namespace,self.get_change_url_name,) del_name = "%s:%s" %(self.site.namespace,self.get_del_url_name,) if edit_name not in permission_dict: val.remove(StarkConfig.display_edit) if del_name not in permission_dict: val.remove(StarkConfig.display_del) return val 每个配置去继承即可。 CRM结束: 1. 课程100% = 3年 2. 学习阶段 初级阶段:增删改查 + Linux 阶段升级:做项目增加熟练度 + 开发组件 + Linux 阶段升级:看源码(Flask+Django) + Linux 阶段升级:架构(Linux硬件+代码(设计模式+领域驱动模型)) + Linux 合伙人搞创业 3. 如何让简历漂亮 a. 项目+技术点 b. 热点 c. 自学能力 源码 4. 设计+讲话能力
完整代码,请参考:
第一阶段(不包含权限应用)
链接:https://pan.baidu.com/s/11XFG6QZ_W5wCEt0HzdqPkA 密码:g9ye
终极版:
链接:https://pan.baidu.com/s/14Y5ioQkEuJBvoL1pCXsqmg 密码:gz6p
未完待续...