AXF
开发流程
- 产品经理产出需求文档
- 产品根据需求需求文档做出原型图
- 原型图交给设计对页面交互,细节进行设计
- 之后会交到开发手中
- 分析需求,设计数据模型
- 从数据开始开发
- 封装数据操作
- 做数据展示
需求分析
- 用户系统
- 商品系统
- 首页展示
- 购物车
- 订单系统
- 地址系统
- 优惠券
- 积分系统,等级系统
搭建项目
- 导入静态资源
适配
- 前端学过的单位
- px
- em 相对单位 相对于父级元素,默认 16px
- rem 相对单位,和em很像 相对于root 根级元素
- 将屏幕宽度分为十份
添加到购物车
- 购物车
- 体现的是用户和商品的关系
- 商品
- 用户还没有
- 添加到购物车
- 判断用户是否登录
- 未登录应该跳转到登录页面
- 如果已经登录,添加到购物车
- 通过使用ajax实现
闪购页面
- 级联筛选+排序
- 筛选需要条件
- 见名知意
- 排序
- 前端端需要协商定制的一个字段(后台定制)
- 定制接口
用户模块
- 基础用户字段
- name
- password
- icon
- 激活权限
- 逻辑删除
- 用户权限
- 读权限
- 写权限
- 删除权限
- 删除别人的帖子
- xxx
先实现静态页面
Django中面向对象
- 模型继承
- 模板继承
- 视图函数
- FBV 给予函数的视图函数
- CBV 给予类的视图函数
- 请求流程
- Browser -> urls -> Views( Class ) -> Response -> Browser
- urls -> UserView.as_view()
- 判断参数是否是合法(是不是请求方法)
- 判断关键字参数的key在我们类中是否存在
- 定义新的view,用来做返回处理
- 默认head请求功能和get一样
- dispatch 分发
- 根据方法的名字去判断
- 是否存在于我们django支持的方法中
- 获取方法对应函数
- 获取到了
- 将参数传递给处理函数
- 未获取到
- 直接返回405 请求方法不被支持
- 获取到了
网络状态吗
-
2xx
- 成功
-
3xx
- 资源发生转移,迁移
-
4xx
- 客户端错误
-
5xx
- 服务器错误
-
其余6xx-9xx
- 预定额
- 901 单终端登录
程序开发
- 低耦合
- 高内聚
程序结构
- 如果程序中出现了上帝文件,上帝类
- 创建App
- 跨App调用
- 循环引用
- 创建多个Views
- 将数据获取,数据筛选进行隔离
- 创建App
用户激活
- 激活策略
- 邮件
- 短信验证码
- 邮件激活
- 注册的时候给你的邮箱发送一个邮件
- 邮件中包含激活链接
- 激活链接上有一个参数
- 标识支持过期
- 映射关系,标识参数可以映射到用户
购物车
-
购物车和用户
-
一个用户一个购物车
-
一个购物车对应多个商品
-
一个商品可以被多个用户买
-
商品和用户多对多的关系
-
有一张额外的关系表
- 存储可用户的唯一的标识
- 存储了商品的唯一标识
- 关系表就是购物车表(数据)
-
购物车表设计
- 商品标识
- 用户标识
- 商品数量
- 此条商品数据是否选中
-
下单
- 将选中的商品生成一个订单
- 用户和订单一对多
- 一个订单对应多个购物车数据,一对多
-
订单表设计
- 用户标识
- 订单号
- 订单时间
- 订单状态
-
订单商品表
- 订单标识
- 商品标识
- 商品数量
全选逻辑
- 只要有未选中的,全选按钮就是未选中状态
- 点击的时候,全选按钮变亮
- 未选中的全都变成选中
- 如果全都是选中的
- 点击全选应该所有都变成未选中
- 实现方案两种
- 客户端实现
- 服务端实现
支付
-
web支付
- 需要注册开发者账号
- 需要企业营业执照(个人营业执照)
- 创建应用
- 支付权限不可用
- 需要你提供一个文档在什么情景下需要支付
- 测试账号
- 支付流程
- 拿着订单信息,去调用支付宝的接口
- 订单信息需要按照支付宝的格式进行签名
- 调用支付之后,回给你一个回调函数
- 使用回调函数修改订单状态
-
移动支付
- 支付流程可以绕过服务器
- 支付之前需要将订单信息传递给服务器
- 服务器记录订单信息
- 允许客户端调用支付
- 客户端调用支付之后记得通知给服务器
-
支付实际上就是调用支付API
- 实际上都是固定的模板
-
想快速集成多种支付
- 可以 ping++
算法
- 编码
- base64
- urlencode
- 摘要
- md5
- 128位的二进制
- 32位的16进制,每一个16进制可以很方便的转换成unicode
- sha
- 单向不可逆
- 不管输入多长,输出的长度都是固定的
- md5
- 加密
- 对称加密
- DES,AES
- 只有一个钥匙
- 非对称加密
- RSA
- 钥匙是成对的
- 对称加密
技能点
-
模板中的
- {{ block.super }}
- 继承父模板中块中的内容,不覆盖内容,默认三次及以上出现的模板会覆盖内容
-
django ORM中
- 显性属性(显性对象)
- 开发者主动声明的属性
- 隐性属性(隐性对象)
- 开发者没有声明,django框架自动为开发者声明的
- 显性属性(显性对象)
-
django模板中点语法
- 代表属性和方法
- 代表索引
- 代表字典的key
-
jQuery中获取属性
- attr
- 获取任意属性
- prop
- 只能获取内置属性
- attr
-
端口扫描
- nmap
-
property
- 将函数变成属性
- 添加权限
- 没有setter就是只读
- 有了setter才能设置
-
浮点型数据操作
- 可能会出现精度问题
- 保留两位小数
- Decimal
Celery
- 配置
- init 中初始化celery
- settings中配置Celery
- 使用
- 在App中创建自己的tasks
- 使用share_task装饰函数
AOP
- 中间件
- process_request
- 反爬
- 统计
- 过滤器(拦截器)
- 黑白名单
- process_view
- CSRF
- process_template_response
- process_response
- 统一配置
- 跨域
- 过期时间
- process_exception
- 页面友好化
- process_request
- 实现中间件
- 创建中间件
- 注册中间件
- 在中间件中书写实现的功能
基于请求频率的反爬
- 需求,一个ip一分钟只能访问10次
蜜罐抓猪
- 返回的数据和显示的数据不对称的
- 中间包含了一些伪数据
- 伪数据只要被访问,立马拉黑请求者