课程试听
1-1 开启Python学习之旅
- 01-Python的由来 免费试学
- 02-Python的特点 免费试学
- 03-Python的应用领域 免费试学
- 04-Python版本的基本介绍 免费试学
- 05-不同版本解释器的详细介绍 免费试学
- 06-Linux系统安装Python 免费试学
- 07-Windows下Python的下载 免费试学
- 08-Python2的安装 免费试学
- 09-Python3的安装 免费试学
- 10-Mac电脑使用Python介绍 免费试学
- 11-IDLE的介绍 免费试学
- 12-IDLE的使用 免费试学
- 13-IPython的介绍和安装 免费试学
- 14-运行Python代码的两种方式 免费试学
- 15-Python常见的集成开发环境介绍 免费试学
- 16-PyCharm的下载和安装 免费试学
- 17-PyCharm创建和运行Python程序 免费试学
- 18-解释型语言和编译型语言介绍 免费试学
- 19-Python文档的查看方式 免费试学
1-2 Python快速入门
- 01-Python快速入门-学习目标
- 02-输入和输出
- 03-注释
- 04-文档字符串
- 05-修改PyCharm字体大小
- 06-代码风格
- 07-变量
- 08-标识符强制遵守的规则
- 09-标识符命名建议
- 10-关键字
- 11-常见数据类型
- 12-if语句
- 13-while循环
- 14-for循环
- 15-可迭代对象
- 16-文件、异常、函数、面向对象、模块
1-3 数值类型
- 01-数值类型介绍
- 02-整型的介绍
- 03-四种定义整型的方式
- 04-浮点型
- 05-浮点型的取值范围
- 06-浮点型的存储
- 07-复数
- 08-布尔类型
- 09-算数运算符
- 10-复合赋值运算符
- 11-比较运算符
- 12-or的使用
- 13-and的使用
- 14-not的使用
- 15-类型转换
- 16-对象和引用
- 17-进制转换
- 18-位运算的介绍
- 19-整型存储方式
- 20-按位取反
- 21-按位左移和右移运算
- 22-与运算
- 23-或运算
- 24-异或运算
- 25-运算符优先级
1-4 字符串
- 01-字符串的定义方式
- 02-使用str创建字符串
- 03-字符串的索引
- 04-字符串不可修改
- 05-切片的基本使用
- 06-切片-省略起始或结束位置
- 07-切片-步长
- 08-特殊字符处理
- 09-格式化输出
- 10-格式化操作的辅助指令
- 11-字符串的输入
- 12-字符串模板
- 13-字符串内建函数
- 14-字符串常见方法
- 15-字符串操作符
1-5 序列
- 01-序列的介绍
- 02-索引的使用
- 03-切片的基本使用
- 04-切片的高级使用
- 05-切片的步长使用
- 06-通用序列操作
- 07-列表的介绍
- 08-列表的创建方式
- 09-列表操作符
- 10-列表的相关函数
- 11-列表的相关方法
- 12-sorted的使用
- 13-定义元组
- 14-元组的通用操作
- 15-元组元素的“修改”
- 16-元组是无符号对象的默认类型
- 17-不同序列的互相转换
- 18-range的基本使用
- 19-range的使用注意点
- 20-range和列表、元组的比较
1-6 流程控制
- 01-流程控制介绍
- 02-if语句的使用
- 03-debug的使用
- 04-if-else的使用
- 05-条件表达式
- 06-多重条件表达式
- 07-if-elif语句的使用
- 08-if-elif-else的使用
- 09-if嵌套
- 10-判断表达式
- 11-while循环的基本执行过程
- 12-while循环计算阶乘
- 13-循环嵌套的执行过程
- 14-循环嵌套-打印三角形
- 15-死循环
- 16-for循环的执行过程
- 17-for循环遍历列表和range
- 18-for循环使用技巧01
- 19-for循环使用技巧02
- 20-迭代器和iter函数
- 21-列表推导式
- 22-循环中break语句的使用
- 23-循环中continue语句的使用
- 24-pass的使用
- 25-循环的else使用
- 01-字典的介绍
- 02-字典的特点
- 03-字典的增删改查
- 04-字典推导式
- 05-字典操作的补充
- 06-字典的常用函数
- 07-字典的clear和get方法
- 08-字典的copy方法
- 09-items方法的使用
- 10-items方法的补充
- 11-keys方法的使用
- 12-values方法的使用
- 13-集合的定义方式和特点
- 14-集合的数据操作
- 15-集合数据操作增强
- 16-标准类型的操作符
- 17-集合类型的操作符
- 18-可变集合类型的操作符
- 19-集合内建方法
1-7 字典和集合
- 01-字典的介绍
- 02-字典的特点
- 03-字典的增删改查
- 04-字典推导式
- 05-字典操作的补充
- 06-字典的常用函数
- 07-字典的clear和get方法
- 08-字典的copy方法
- 09-items方法的使用
- 10-items方法的补充
- 11-keys方法的使用
- 12-values方法的使用
- 13-集合的定义方式和特点
- 14-集合的数据操作
- 15-集合数据操作增强
- 16-标准类型的操作符
- 17-集合类型的操作符
- 18-可变集合类型的操作符
- 19-集合内建方法
1-8 函数和函数式编程
- 01-函数的介绍
- 02-基本的函数定义格式
- 03-函数的执行过程和函数的debug调试
- 04-函数文档
- 05-函数的参数
- 06-函数的return返回值
- 07-return的使用强化
- 08-在一个函数里返回多个值
- 09-关键字参数
- 10-参数默认值
- 11-关键字参数使用注意点
- 12-不定长参数
- 13-不定长参数-字典版
- 14-解包的使用
- 15-混合参数传值
- 16-函数嵌套的执行过程
- 17-递归函数
- 18-匿名函数的定义和调用
- 19-函数作为参数传递
- 20-map的使用
- 21-filter的使用
- 22-reduce的使用
- 23-局部变量
- 24-全局变量
- 25-在函数里修改全局变量
- 26-闭包函数的定义方式
- 27-闭包函数的使用
- 28-LEGB原则
- 29-nonlocal关键字
- 30-装饰器的定义和使用
- 31-多个装饰器
- 32-装饰有参数的函数
- 33-装饰任意个数参数的函数
- 34-被装饰函数有返回值的处理方式
- 35-通用装饰器
- 36-带有参数的装饰器
- 37-装饰器的应用场景
- 38-生成器介绍
- 39-生成器的执行过程
- 40-生成器使用注意点
- 41-使用生成器获取斐波那契数列
- 42-生成器的send方法
- 43-生成器的close方法
- 44-生成器处理协程效果
- 45-生成器和迭代器的区别
- 46-Python内置函数
- 47-数学运算相关函数
- 48-类型转换相关函数
- 49-序列相关的函数
- 50-类、对象、属性相关函数
- 51-编译、执行相关函数
- 52-其他函数
1-9 文件
- 01-文件的介绍
- 02-打开文件介绍
- 03-文件路径的说明
- 04-打开文件的模式说明
- 05-文件的关闭
- 06-文件的写入
- 07-文件的缓冲设置
- 08-文件的read操作
- 09-文件读写的注意点
- 10-文件的4种读取方式
- 11-文件的读写位置跳转
- 12-文件的其他属性和方法
- 13-文件的遍历
- 14-文件备份
- 15-文件的重命名和删除
- 16-文件夹操作(OS模块扩展)
- 17-标准文件
- 18-用户登陆案例介绍
- 19-用户登陆-任务分解
- 20-用户登陆-搭建程序框架
- 21-用户登陆-程序入口
- 22-用户登陆-初始化
- 23-用户选择身份类型
- 24-完成管理员账号的验证
- 25-用户登陆-完成用户注册
- 26-用户登陆-普通用户登陆
1-10 面向对象(上)
- 01-面向对象介绍
- 02-面向对象和面向过程的区别
- 03-类和对象的概念
- 04-定义类
- 05-创建对象
- 06-对象属性
- 07-在方法里添加对象属性-self的使用
- 08-删除对象属性
- 09-类属性
- 10-类对象的介绍
- 11-构造方法
- 12-析构方法
- 13-对象方法
- 14-类方法和静态方法
- 15-属性的保护
- 16-私有属性
- 17-私有属性作用原理
- 18-私有方法
- 19-使用property保护属性
1-11 面向对象(下)
- 01-封装
- 02-继承的介绍
- 03-单继承
- 04-继承时的私有属性
- 05-isinstance和issubclass
- 06-新式类和经典类
- 07-多继承
- 08-多继承中父类有同名方法及处理办法
- 09-重写
- 10-重写-调用父类方法
- 11-多态
- 12-运算符重载介绍
- 13-四则运算的重载
- 14-索引和分片重载
- 15-定制对象的字符串描述
- 16-__new__方法介绍
- 17-__new__接收参数
- 18-设计模式
- 19-单例模式
- 20-单例模式-初始化参数
- 21-耦合与解耦的介绍
- 22-工厂模式的需求分析
- 23-工厂模式的代码
1-12 错误和异常
- 01-异常的介绍
- 02-常见异常
- 03-捕捉异常
- 04-捕捉指定异常
- 05-一次性捕捉多个异常
- 06-捕捉所有异常
- 07-异常别名-获取异常信息
- 08-异常的else和finally语句
- 09-raise的使用
- 10-异常的传递
- 11-断言-assert语句
- 12-自定义异常
- 13-自定义异常的完善
- 14-with的基本使用
- 15-with语句-异常的处理
- 16-上下文管理器
1-13 模块
- 01-模块介绍
- 02-sys模块
- 03-os模块的使用
- 04-path模块的使用
- 05-time模块的使用
- 06-导入模块的方式
- 07-自定义模块
- 08-搜索路径
- 09-__all__属性的介绍
- 10-__name__属性的使用
- 11-模块导入特性
- 12-模块缓存
- 13-包的介绍
- 14-导入包
- 15-包下的__init__文件作用
- 16-打包模块
- 17-模块的安装
1-14 内存管理
- 01-内存管理介绍
- 02-内存管理的常用机制
- 03-引用计数机制概述
- 04-增加对象的引用
- 05-减少对象的引用
- 06-释放对象占用的内存
- 07-容器对象引用对象
- 08-对象之间的循环引用
- 09-弱引用处理循环引用
- 10-垃圾回收机制概述
- 11-垃圾回收-标记清除技术
- 12-垃圾回收-分代回收技术
- 13-gc模块
- 14-垃圾回收场景
- 15-内存池-小整数对象池
- 16-内存池-字符串的intern机制
1-15 正则表达式
- 01-知识引入
- 02-起源与发展
- 03-正则表达式的定义
- 04-字符分类
- 05-点字符
- 06-行头行尾
- 07-单词边界
- 08-多选结构
- 09-重复匹配
- 10-字符组
- 11-转义字符
- 12-子组
- 13-re模块
- 14-预编译
- 15-匹配与搜索
- 16-匹配对象
- 17-全文匹配
- 18-检索替换
- 19-文本分割
- 20-贪婪模式
- 21-预定义字符集
1-16 图形用户界面编程
- 01-Tkinter概述
- 02-第一个Tkinter程序
- 03-常用组件-标签、按钮、输入框
- 04-组件属性设置方式
- 05-标准组件属性
- 06-按钮(Button)
- 07-标签组件(Label)
- 08-文本框(Entry)
- 09-多行文本框(Text)
- 10-单选按钮(Radiobutton)
- 11-复选框(Checkbutton)
- 12-列表框(Listbox)
- 13-菜单-主菜单
- 14-菜单-下拉菜单
- 15-菜单-弹出菜单
- 16-对话框-消息对话框
- 17-对话框-文件对话框
- 18-对话框-颜色选择对话框
- 19-画布绘制
- 20-绘制的option参数
- 21-绘制五角星案例-计算方式思路
- 22-绘制五角星案例-计算点的位置
- 23-绘制五角星案例-将点的位置套入代码中
- 24-pack布局管理器
- 25-grid布局管理器
- 26-place布局管理器
- 27-简单的事件绑定方式
- 28-鼠标事件处理
- 29-键盘事件和组件尺寸变化的处理
- 30-其他事件绑定方式
- 31-其他GUI
1-17 多任务编程
- 01-引入
- 02-多任务的实现原理
- 03-进程介绍
- 04-通过fork函数创建进程
- 05-通过Process类实例创建进程
- 06-使用join方法同步进程
- 07-通过Process子类创建子进程
- 08-进程池批量创建进程
- 09-通过subprocess模块创建进程
- 10-全局变量在多个进程中不共享
- 11-使用Queue队列实现进程间通信
- 12-线程介绍
- 13-使用Thread类实现多线程
- 14-使用Thread子类实现多线程
- 15-调用join()方法阻塞线程
- 16-线程共享全局变量
- 17-访问全局变量出现数据不同步的问题
- 18-通过互斥锁(Lock)解决数据不同步的问题
- 19-持有多个锁造成死锁的问题
- 20-可重入锁(RLock)的使用
- 21-通过条件变量(Condition)实现线程同步
- 22-通过队列(Queue)实现线程同步
- 23-使用事件(Event)实现线程通信
- 24-后台线程
- 25-协程
1-18 网络编程
- 01-知识引入
- 02-计算机网络概述
- 03-协议的概念
- 04-常用协议
- 05-IP地址
- 06-网络掩码
- 07-端口
- 08-数据传输流程
- 09-网络编程概述
- 10-socket简介(套接字)
- 11-创建套接字
- 12-udp发送数据
- 13-udp接收数据
- 14-udp端口绑定
- 15-tcp客户端
- 16-tcp服务端
- 17-tcp服务端-判断客户端下线
- 18-tcp服务端-多人服务
- 19-tcp的注意点
1-19 数据库
- 01-数据库简介
- 02-下载MySQL
- 03-安装MySQL
- 04-卸载MySQL
- 05-使用MySQL Workbench
- 06-创建和删除数据库
- 07-创建和删除表
- 08-数据的添加
- 09-数据的更新
- 10-数据的删除
- 11-比较运算符查询
- 12-逻辑运算符查询
- 13-模糊查询
- 14-连续范围查询
- 15-不连续范围查询(集合查询)
- 16-空值查询
- 17-查询不重复的记录
- 18-聚合查询
- 19-分组查询
- 20-排序查询
- 21-限制记录数量
- 22-完整的SQL语句
- 23-多表查询
- 24-字符串函数
- 25-数学函数
- 26-日期时间函数
- 27-类型转换函数
- 28-事务
- 29-Python与MySQL交互
1-20 Web编程
- 01-Web服务器概述
- 02-第一个Web服务器
- 03-统一资源定位符
- 04-HTTP协议
- 05-HTTP请求方法和状态码
- 06-HTML简介
- 07-CSS简介
- 08-JavaScript简介
- 09-静态服务器
- 10-WSGI规范
- 11-WSGI服务器
- 12-Web服务器
- 13-基于框架的服务器
1-21 案例_井字棋
- 01-井字棋游戏介绍
- 02-学习目标
- 03-游戏规则详细说明
- 04-游戏的代码流程分析
- 05-类的设计
- 06-明确设计目标
- 07-创建项目-新建文件
- 08-棋盘模块的功能说明
- 09-根据落子打印棋盘的方式分析
- 10-可落子的位置索引列表
- 11-初始化棋盘
- 12-打印棋盘
- 13-打印落子情况
- 14-完成棋盘的落子功能
- 15-平局判断
- 16-获胜的逻辑判断
- 17-重置棋盘
- 18-棋盘开发回顾
- 19-初始化玩家类
- 20-用户落子的需求解析
- 21-玩家落子
- 22-阶段总结
- 23-初始化游戏环境
- 24-确定先手玩家的方法说明
- 25-确认玩家先后手的代码实现
- 26-游戏流程回顾
- 27-一局游戏的注释书写
- 28-玩家对战
- 29-循环对局开发
- 30-阶段总结
- 31-计算机落子的技术分析
- 32-随机选择可落子位置的方法说明
- 33-电脑玩家随机落子
- 34-阶段总结
- 35-落子策略介绍
- 36-必胜和必救的位置判断逻辑
- 37-模拟落子位置的胜负判断
- 38-修改棋盘的is_win方法代码
- 39-必胜和必救位置的代码解析
- 40-必胜和必救位置落子的代码实现
- 41-评估子力价值的方式
- 42-使用集合获取优先落子的位置
- 43-根据子力来落子的代码实现
1-22 案例_贪吃蛇
- 01-游戏介绍
- 02-课程内容介绍
- 03-pygame安装和验证
- 04-游戏规则的详细介绍
- 05-类的设计
- 06-新建项目并创建模块
- 07-游戏框架内容介绍
- 08-pygame的初始化和退出
- 09-创建游戏窗口
- 10-开启游戏循环
- 11-游戏时钟
- 12-pygame的颜色定义方式
- 13-绘制窗口背景颜色
- 14-绘制文本的方式
- 15-创建字体对象的参数介绍
- 16-创建文本标签类
- 17-绘制文本内容到窗口里
- 18-测试在窗口里绘制文本
- 19-绘制文本的过程小结
- 20-电脑里的坐标系
- 21-把文字显示到窗口左下角-矩形的介绍
- 22-使用矩形的相对位置来绘制文字
- 23-元素定位小结
- 24-循环的作用小结
- 25-事件和监听介绍
- 26-获取和判断事件类型
- 27-空格键的监听
- 28-游戏暂停信息的提示
- 29-游戏结束信息的提示和游戏的重置
- 30-事件监听小结
- 31-绘制图形
- 32-绘制食物的方式分析
- 33-在固定位置绘制食物
- 34-随机食物位置的算法
- 35-随机生成食物位置
- 36-食物的动画效果
- 37-绘制食物小结
- 38-定时器使用介绍
- 39-定时更新食物位置
- 40-蛇类的构成分析
- 41-创建蛇类
- 42-添加身体的逻辑
- 43-添加蛇的身体
- 44-绘制蛇的身体
- 45-移动蛇的身体
- 46-修改蛇的移动方向
- 47-蛇吃食物的业务说明
- 48-蛇吃食物
- 49-蛇的死亡判断处理思路
- 50-蛇的死亡处理
1-23 案例_飞机大战
- 01-课程简介
- 02-游戏启动时界面元素说明
- 03-玩家飞机功能介绍
- 04-敌人飞机介绍
- 05-敌人飞机执行细节
- 06-游戏道具和游戏结束的执行介绍
- 07-搭建框架的需求说明
- 08-项目准备
- 09-Game类的属性和方法说明
- 10-Game类的属性和方法细节说明
- 11-游戏框架内容的介绍
- 12-定义窗口大小变量
- 13-初始化和重置Game类
- 14-启动游戏
- 15-处理退出事件
- 16-切换游戏状态
- 17-游戏框架的完善和阶段总结
- 18-精灵和精灵组学习方式介绍
- 19-加载并显示图片的步骤说明
- 20-自己实现图像的加载和绘制
- 21-精灵和精灵组使用说明
- 22-派生精灵子类的代码说明
- 23-自定义游戏精灵类
- 24-使用精灵组绘制精灵内容
- 25-阶段总结
- 26-连续滚动背景的解决方案
- 27-连续滚动背景的代码实现
- 28-控制面板功能介绍
- 29-面板类的属性和方法说明
- 30-面板类的初始化
- 31-状态按钮精灵的定义
- 32-显示并定位状态按钮、炸弹精灵、生命精灵
- 33-标签类的功能说明
- 34-定义标签精灵类
- 35-显示数字标签
- 36-显示提示信息标签
- 37-修改炸弹计数
- 38-修改生命计数
- 39-修改游戏得分的算法
- 40-游戏得分更新
- 41-最好成绩的文件读取需求说明
- 42-保存最好成绩到文件
- 43-从文件中加载最好成绩
- 44-为什么只会保存最高得分
- 45-游戏状态变化的说明
- 46-精灵的绘制顺序演示
- 47-处理提示信息显示和隐藏的思路
- 48-显示提示信息的代码实现
- 49-隐藏提示信息的处理
- 50-为什么要重置面板数据的说明
- 51-重置面板数据的代码实现
- 52-飞机开发效果介绍
- 53-飞机类的基本功能说明
- 54-使用逐帧动画显示英雄飞机
- 55-减少动画帧数的方式说明
- 56-飞机的火焰动画完善
- 57-飞机类的属性和方法说明
- 58-优化飞机的属性
- 59-飞机的重置和更新
- 60-测试改进版的飞机
- 61-敌人飞机类的功能描述
- 62-定义敌人飞机类
- 63-根据关卡不同创建不同数量飞机的方法说明
- 64-根据关卡创建不同数量的飞机
- 65-随机敌人飞机位置的算法
- 66-随机敌人飞机位置的代码实现
- 67-敌机飞行
- 68-爆炸效果的bug修复
- 69-英雄飞机的处理步骤说明
- 70-飞机类功能说明
- 71-定义英雄飞机类
- 72-让控制面板显示飞机的炸弹数量
- 73-移动英雄飞机需要新的监听机制
- 74-get_pressed方法的基本使用
- 75-飞机移动效果完善
- 76-引爆所有敌机的需求说明
- 77-引爆所有敌机代码实现
- 78-碰撞检测的讲解过程说明
- 79-sprite的碰撞检测方法
- 80-实现高质量的碰撞检测
- 81-英雄飞机被撞毁的注意点介绍
- 82-玩家飞机被撞毁的处理
- 83-正在爆炸的飞机不会影响英雄飞机
- 84-自定义事件的需求说明
- 85-英雄飞机被撞击后控制面板的更新
- 86-英雄飞机爆炸后的无敌时间和位置重置
- 87-子弹类的功能说明
- 88-定义子弹类
- 89-发射子弹的定时事件处理
- 90-飞机发射子弹的代码实现
- 91-子弹击中敌机的碰撞检测
- 92-子弹击中敌机的代码实现
- 93-游戏的重置完善
- 94-弹药的处理方式说明
- 95-定义道具类
- 96-抛出道具
- 97-英雄飞机捡取道具
- 98-音乐功能的说明
- 99-播放音乐的两种方式展示
- 100-音乐类的功能说明
- 101-创建音乐播放器类-背景音乐的播放和暂停处理
- 102-音效功能的处理
- 103-完成界面里的音效处理-游戏开发完成
- 104-设置窗口标题补充
1-24 案例_多人聊天室
- 01-项目效果展示
- 02-项目功能的详细介绍
- 03-服务器功能介绍
- 04-通信协议介绍
- 05-创建config模块
- 06-处理服务器响应字符串的拼接(响应协议)
- 07-封装服务器套接字
- 08-创建服务器核心类与网络数据收发的回顾
- 09-创建SocketWapper类
- 10-获取多个客户端连接
- 11-一个客户端多次收发数据
- 12-多个客户端同时收发数据
- 13-开启子线程的另一种方式-匿名函数
- 14-服务器获取到数据之后的处理流程说明
- 15-解析客户端的信息
- 16-根据请求类型调用不同的方法响应
- 17-根据请求类型调用不同的方法-完善
- 18-登陆代码的说明
- 19-用户登陆的逻辑处理
- 20-准备数据库
- 21-数据库类的初始化
- 22-查询单个用户信息的逻辑分析
- 23-从数据库查询一个用户信息的代码实现
- 24-完成用户账号检查
- 25-清理离线用户
- 26-服务器转发消息给在线用户
- 27-tkinter模块介绍
- 28-创建登陆窗口类
- 29-初始化登陆窗口属性
- 30-创建控件的方法简介
- 31-用户名和密码控件显示
- 32-提供重置和登陆按钮
- 33-重置和登陆按钮的点击响应处理
- 34-获取和清空文本框内容
- 35-关闭窗口的响应处理
- 36-创建ClientSocket类
- 37-创建协议类
- 38-初始化登陆窗口
- 39-发送登陆消息到服务器
- 40-开启接收消息的线程
- 41-解析消息内容
- 42-提供响应方法的注册功能
- 43-设置协议解析方法为静态方法
- 44-登陆或失败的结果判断
- 45-显示提示对话框
- 46-初始化聊天窗口
- 47-ScrolledText使用介绍
- 48-添加控件到聊天窗口
- 49-聊天界面发送按钮和输入框处理
- 50-添加信息到聊天区
- 51-聊天窗口添加关闭窗口的响应
- 52-登陆成功后显示聊天窗口
- 53-发送消息到服务器
- 54-从服务器接收消息
- 55-程序结束时的资源释放
1-25 大型购物网站—天天生鲜
- 01-天天生鲜项目展示
- 02-Django框架的介绍
- 03-Django框架结构-mvc和mvt
- 04-天天生鲜项目的创建
- 05-创建应用和开启服务器
- 06-数据库的配置
- 07-数据表和字段的介绍
- 08-定义模型类
- 09-创建和执行迁移文件生成数据表
- 10-插入商品分类的数据
- 11-插入商品数据
- 12-查询、更新、删除操作
- 13-创建视图
- 14-模板文件的配置和使用
- 15-模板传值和配置静态文件的使用
- 16-Cookie的介绍
- 17-首页数据查询-分类和商品数据
- 18-首页数据查询-购物车数据
- 19-静态文件的添加
- 20-首页模板
- 21-首页开发总结
- 22-商品详情页面-视图创建
- 23-商品详情页面-模板添加和访问
- 24-添加购物车-视图创建
- 25-添加购物车-访问成功
- 26-商品分类页面-创建视图获取数据
- 27-商品分类页面-显示所有数据
- 28-商品分类页面-分页
- 29-商品分类页面-总结和快速定位bug
- 30-购物车页面-创建视图获取数据
- 31-购物车页面-创建模板和显示数据
- 32-购物车删除商品功能
- 33-csrf攻击和防护01
- 34-csrf攻击和防护02
- 35-提交订单页面-视图创建
- 36-提交订单页面-模板创建访问和显示
- 37-过滤器的使用
- 38-提交订单-视图创建
- 39-提交订单-视图功能完成
- 40-订单提交成功-视图创建
- 41-订单提交成功-演示结果
- 42-总结_debug
- 43-admin简单使用
- 44-admin自定义界面
- 45-中间件介绍
- 46-自定义中间件