自学youku_web

仿youku架构

 

数据库设计

管理员
    注册
    登录
    上传视频
    删除视频
    发布公告

普通用户
    注册
    登录
    充会员
    查看视频
    下载免费视频
    下载收费视频
    查看观影记录
    查看公告

 思路

class Field
    表示数据表里的字段(字段属性:名字,类型,是否为主键,默认值)
        类的对象————>数据库表的字段

class IntegerField(Field)
    整型
class StringField(Field)
    字符型

class ModelsMetaclass(type)
    重写元类,让类创建之前,拦截它并重写__new__方法,name,bases,attrs,
    循环attrs,进行更进一步判断操作
    使attrs剔除掉原始初始化时赋予的属性值,且仅有table_name,primary_key,mappings
        def __new__

class Models(dict,metaclass=ModelsMetaclass)
    如何在类进行实例化的时候,k=v,都能放进属性里
        dict,
    字典取值用的是中括号[],而我们需要的是用点(.)
        __getattr__
        __setattr__

    根据类名查对象
        注意防止SQL注入
        # select * from %s where %s = ? % (cls.table_name,key)
        @classmethod
        select_one

        # select * from %s where % (cls.table_name)
        # select * from %s where %s = ? % (cls.table_name,key)
        @classmethod
        select_many





模拟session机制
    服务端验证成功后,生成一个密文

客户端一旦断开,服务器保存的session状态清除掉
采用字典的pop方法
    拼接字典
    #live_user = {addr:[session,user_id],addr:[session,user_id],addr:[session,user_id]}
    live_user.pop(addr)

源码:

youku服务端(>>点我进传送门<<)

youku客户端(>>点我进传送门<<)

posted @ 2018-05-17 09:54  MJay_Lee  阅读(189)  评论(0编辑  收藏  举报