一、项目总结三步骤
-
项目生命周期为基准线、分析要有层次感、不要想到什么说什么。
-
这条基准线上,负责的是哪一块,做了什么。
-
举例说明项目中遇到的问题及怎么解决的。
二、项目需求分析
管理员
1 注册
2 登录
3 上传视频
4 删除视频
5 发布公告
用户
1 注册
2 登录
3 冲会员
4 查看视频
5 下载免费视频
6 下载收费视频
7 查看观影记录
8 查看公告
三、搭建框架
四、ORM框架分析
# 优点:让一个不懂数据库操作的小白也能够简单快速操作数据库实现相应功能
# 缺点:sql封装固定,不利于sql查询优化
# 对象关系映射
# 类 >>> 数据库的表
# 对象 >>> 表的一条条的记录
# 对象获取属性或方法 >>> 记录的字段对应的值
# 一张表有字段,字段又有字段名,字段类型,字段是否是主键,字段的默认值
class Field(object):
pass
# 为了在定义的时候更加方便 通过继承Field定义具体的字段类型
class StringField(Field):
pass
class IntegerField(Field):
pass
class Models(dict):
pass
def __getattr__(self,item):
return self.get(item)
def __setattr__(self,key,value)
self[key] = value
# 查询
def select(self,**kwargs):
# select * from userinfo
# select * from userinfo where id = 1
# 新增
def save(self):
# insert into userinfo(name,password) values('jason','123')
# 修改:是基于已经存在了的数据进行修改操作
def update(self):
# update userinfo set name='jason',password='234' where id = 1
"""
(******)
hasattr
getattr
setattr
"""
# 元类拦截类的创建过程 使它具备表的特性
class ModelsMetaClass(type):
def __new__(cls,class_name,class_bases,class_attrs):
# 只拦截模型表的创建表
• if class_name == 'Models':
• return type.__new__(cls,class_name,calss_bases,class_attrs)
• table_name = class_attrs.get('table_name',class_name)
• primary_key = None
• mappings = {}
• for k,v in class_attrs.items():
• if isinstance(v,Field):
• mappings[k] = v
• if v.primary:
• if primary_key:
• raise TypeError('主键重复')
• primary_key = v.name
• for k in mappings.keys():
• class_attrs.pop(k)
• if not primary_key:
• raise TypeError('必须要有一个主键')
• class_attrs['table_name'] = table_name
•