1.优酷架构
- Client
- 用户视图层
- 套接字客户端
- Server
- 套接字服务端
- 接口层
- 数据层
- ORM
- MySQL
2.搭建项目目录
- Client: 客户端
- conf:
- settings
- core:
- src:总视图
- admin 管理员视图
- user 普通用户视图
- lib:
common
- socket_client
- tcp_client: 建立连接
- upload_movies 可上传电影的存放目录
- download_movies 下载电影的存放目录
- start.py: 客户端启动文件
- Server: 服务端
- conf:
- settings
- interface:
- admin_interface: 管理员接口
- user_interface: 普通用户接口
- common_interface: 公共接口
该接口存放管理员与普通用户公用的接口。
- db:
- models: 存放 "数据表类" 也称之为“模型表”。
- User: 用户表
- u_id
- username
- password
- user_type: 用户类型
- is_vip: 是否是会员 0表示不是会员 1表示是会员
- register_time: 注册时间
- Movie: 电影表
- m_id: 电影id
- movie_name: 电影名字
- movie_size: 电影大小
- is_free: 0代表收费 1代表免费
- path: 电影存放目录
- upload_time: 电影上传时间
- u_id: 谁上传的--> 上传用户的ID
# 假设上传电影列表中有两个电影的名字一样,就能确保两个电影的数据一样么?
MD5: 摘要,MD5值是唯一的。
- 只要md5值一样,数据就一模一样。
- 比对两个电影是否一样:
- 打开两个电影,获取全部数据,通过MD5获取md5值。
- 浪费大量资源
- 效率很低
- 打开两个电影: 在电影数据的某些位置截取 小量 bytes数据(10)
- file_md5: 文件的md5值
- Notice: 公告表
- n_id
- title 公告标题
- content: 公告内容
- create_time: 发布时间
- u_id: 发布人ID
- DownloadRecord: 下载记录表
- d_id:
- m_id: 下载的电影
- u_id: 下载的用户ID
- download_time: 下载时间
- lib:
common
- socket_client
- tcp_client: 建立连接
- upload_movies 可上传电影的存放目录
- download_movies 下载电影的存放目录
- start.py: 客户端启动文件
3.tcp_server:
- run():
# 接收客户端的请求
- 异步提交给working(conn, addr)
- working(conn, addr):
- 接收客户端发送的消息
- 把addr添加到back_dic中,用来做存放session的key值
- dispatcher(back_dic, conn)
- 发现异常:
通过addr清除session值
- dispatcher(back_dic, conn):
- 通过type调用对应的接口
- func_dic: 存放所有的接口
if type == '功能名字':
func_dic.get('功能名字')(back_dic, conn)
4.管理员功能
- 注册
- 登录
5.cookies, session
cookies: 是一个存放在浏览器中文本协议,用于存放用户数据。
session: 是一个存放在服务端的 随机字符串,用来做登录认证。
可以给用户数据做加密,并且将session值返回给客户端,保证数据安全。
6.登录认证装饰器
- 应该在服务端做登录认证的处理
- 客户端的数据有可能会被串改,所以在服务端进行认证。
-
1.管理员功能
- 上传电影
- 删除电影
- 发布公公告
2.普通用户功能
- 注册
- 登录
- 查看视频
- 下载视频
- 免费
- 收费
- 草根用户
10块一部电影
- VIP用户,打骨折
5块一部电影
- 充值会员
- 查看下载记录
- 查看公告