Django讲课笔记11:视图函数的请求和响应

Posted howard2005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django讲课笔记11:视图函数的请求和响应相关的知识,希望对你有一定的参考价值。

零、本讲学习目标

  1. 掌握视图函数的编写
  2. 会使用GET和POST调用视图函数
  3. 会获取请求信息
  4. 会使用Render和HttpResponse响应请求

一、课程导入

  1. 对表进行增删改查
  2. 视图、视图函数和视图类
  • 视图(View)是Django的MTV架构模式的V部分,主要负责用户请求和生成相应的响应内容,然后在页面或其他类型文档中显示。类似于MVC的C(控制器),主要处理功能和业务上的逻辑。
  • 习惯使用视图函数来处理HTTP请求,就是在视图里定义函数,这种方式被称为FBV(Function Based Views)。
  • Django同时也植入了视图类,该功能封装了视图开发常用的代码,无须编写大量代码即可快速完成数据视图的开发,这种以类的形式实现响应和请求处理称为CBV(Class Based Views)。

二、新课讲授

(零)准备数据

1、商品类型表 - commodity_types

  • 执行插入记录的SQL语句
INSERT INTO `commodity_types` VALUES (1, '奶粉辅食', '进口奶粉');
INSERT INTO `commodity_types` VALUES (2, '奶粉辅食', '宝宝辅食');
INSERT INTO `commodity_types` VALUES (3, '奶粉辅食', '营养品');
INSERT INTO `commodity_types` VALUES (4, '儿童用品', '纸尿裤');
INSERT INTO `commodity_types` VALUES (5, '儿童用品', '婴儿湿巾');
INSERT INTO `commodity_types` VALUES (6, '儿童用品', '婴儿车');
INSERT INTO `commodity_types` VALUES (7, '儿童用品', '婴儿床');
INSERT INTO `commodity_types` VALUES (8, '儿童用品', '安全座椅');
INSERT INTO `commodity_types` VALUES (9, '儿童教育', '儿童玩具');
INSERT INTO `commodity_types` VALUES (10, '儿童教育', '早教书籍');
INSERT INTO `commodity_types` VALUES (11, '儿童教育', '育儿书籍');
INSERT INTO `commodity_types` VALUES (12, '儿童服饰', '童装');
INSERT INTO `commodity_types` VALUES (13, '儿童服饰', '童鞋');
INSERT INTO `commodity_types` VALUES (14, '儿童服饰', '配饰');
INSERT INTO `commodity_types` VALUES (15, '孕妈专区', '孕妇装');
INSERT INTO `commodity_types` VALUES (16, '孕妈专区', '孕妇护肤');
INSERT INTO `commodity_types` VALUES (17, '孕妈专区', '孕妇用品');

  • 查看商品类型表

2、商品信息表 - commodity_commodityinfos

  • 执行插入记录的SQL语句
INSERT INTO `commodity_commodityinfos` VALUES (1, '婴儿衣服加厚连体衣', '粉色', '童装', 199, 188, 1314, 1666, 666, '2020-02-24', 'imgs/p1.jpg', 'details/p1_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (2, '儿童长袖加厚防寒加绒衫', '玫红', '童装', 121, 66, 1234, 2111, 599, '2020-02-24', 'imgs/p2.jpg', 'details/p2_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (3, '婴儿实木摇摇床', '原木色', '婴儿床', 1099, 999, 2346, 1322, 333, '2020-02-24', 'imgs/p3.jpg', 'details/p3_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (4, '婴儿防寒针织帽', '蓝色', '配饰', 50, 39, 2347, 4521, 899, '2020-02-24', 'imgs/p4.jpg', 'details/p4_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (5, '婴儿秋冬连体衣冬装衣服', '粉色', '童装', 145, 111, 1341, 3412, 2354, '2020-02-24', 'imgs/p5.jpg', 'details/p5_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (6, '男女宝宝秋冬新年套装', '红色', '童装', 123, 119, 2342, 232, 1233, '2020-02-24', 'imgs/p6.jpg', 'details/p6_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (7, '外出服抱衣加厚冬季', '粉色', '童装', 166, 111, 213, 2341, 1233, '2020-02-24', 'imgs/p7.jpg', 'details/p7_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (8, '宝宝衣服动物造型熊猫哈衣', '黑白色', '童装', 124, 121, 531, 1345, 879, '2020-02-24', 'imgs/p8.jpg', 'details/p8_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (9, '澳洲进口Aptamil爱他美', '1段', '进口奶粉', 399, 366, 1233, 1231, 666, '2020-02-24', 'imgs/p9.jpg', 'details/p9_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (10, '超薄干爽绿帮纸尿裤', '大码', '纸尿裤', 209, 159, 1234, 4321, 3333, '2020-02-24', 'imgs/p10.jpg', 'details/p10_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (11, '婴儿面条宝宝辅食无添加', '面条', '宝宝辅食', 30, 20, 3211, 1231, 2152, '2020-02-24', 'imgs/p11.jpg', 'details/p11_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (12, '宝宝零食儿童营养磨牙饼干', '饼干', '宝宝辅食', 66, 38, 1543, 1845, 3245, '2020-02-24', 'imgs/p12.jpg', 'details/p12_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (13, '宝宝芝麻粉辅食调味拌饭', '辅食调味', '宝宝辅食', 59, 39, 1234, 3453, 2312, '2020-02-24', 'imgs/p13.jpg', 'details/p13_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (14, '纽曼思海藻油DHA软胶囊', 'DHA软胶囊', '营养品', 499, 399, 3231, 3412, 1234, '2020-02-24', 'imgs/p14.jpg', 'details/p14_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (15, '婴儿推车可坐可躺', '蓝色', '婴儿车', 888, 439, 1234, 1245, 2353, '2020-02-24', 'imgs/p15.jpg', 'details/p15_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (16, '儿童安全座椅增高垫', '粉色', '安全座椅', 688, 588, 3421, 3644, 6245, '2020-02-24', 'imgs/p16.jpg', 'details/p16_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (17, '80片纯水湿纸巾婴儿', '湿纸巾', '婴儿湿巾', 49.9, 29.9, 1235, 5674, 2312, '2020-02-24', 'imgs/p17.jpg', 'details/p17_details.jpg');
INSERT INTO `commodity_commodityinfos` VALUES (18, '儿童球类玩具室内特大号户外亲子', '10瓶2球', '儿童玩具', 69, 29.9, 666, 1986, 1569, '2020-02-24', 'imgs/p18.jpg', 'details/p18_details.jpg');

  • 查看商品信息表

(一)首页的视图函数

1、检查模型 - M

  • 检查以下模型类是否已经定义,如果没有定义,请做相应定义,并进行数据迁移,即在数据库生成相应的表。

(1)商品类型模型 - Types

(2)商品信息模型 - CommodityInfos

(3)购物车模型 - CartInfos

(4)订单模型 - OrderInfos

2、定义视图函数 - indexView

  • 查看index功能模块的路由文件(子路由)
  • 根据以上路由定义知,路由名index对应的社图函数为indexView,故在views.py中定义视图函数indexView
  • indexView中10个变量说明
  1. title变量:用于设置网页标签内容,用于html中的title标签中
  2. classContent变量:控制导航栏样式,首页样式设置为class=’active’。
  3. commodityInfos变量:查询模型CommodityInfos销量最高的前8条数据,显示在首页“今日必抢”栏目内。
  4. types变量:查询模型Types的全部数据,用于c1, f1, g1的数据类型筛选。
  5. c1变量:在变量types的基础上,筛选types中“儿童服饰”的所有数据,并以列表格式表示。
  6. clothes变量:以c1做模型CommodityInfos查询条件,获取销量排名前5的数据,并显示在首页“宝宝服饰”栏目。
  7. f1变量: 在变量types的基础上,筛选types中“奶粉辅食”的所有数据,并以列表格式表示。
  8. food变量:以f1做模型CommodityInfos查询条件,获取销量排名前5的数据,并显示在首页“奶粉辅食”栏目。
  9. g1变量: 在变量types的基础上,筛选types中“儿童用品”的所有数据,并以列表格式表示。
  10. goods变量:以f1做模型CommodityInfos查询条件,获取销量排名前5的数据,并显示在首页“宝宝用品”栏目。
  • 最后return设置返回值,把视图函数中定义的变量传递给模板,然后由模板引擎对这些变量进行解析并渲染到网页上。

  • 任务:在控制台显示所有商品类型信息

  • 任务:将types数据渲染到模板页面index.html上

  • 采用for循环遍历types,显示效果如下图所示

  • 为了美观一点,将页面上的商品类型数据显示在表格里

课堂练习:在首页上以表格方式显示“儿童服饰”、“奶粉辅食”和“儿童用品”的商品信息

三、课堂小结

四、课后作业

五、拓展内容

以上是关于Django讲课笔记11:视图函数的请求和响应的主要内容,如果未能解决你的问题,请参考以下文章

Django视图函数之request请求与response响应对象

Django之视图

Django视图层

Django之视图层

Django讲课笔记08:定义商城的数据模型

Django视图系统 -- 2019-08-11 19:36:29