当前位置: 首页 > news >正文

Django母婴商城项目实践(七)- 首页数据业务视图

7、首页数据业务视图

1、介绍

  • 视图(View)是Django的MTV架构模式的V部分,主要负责处理用户请求和生成相应的响应内容,然后在页面或其他类型文档中显示。
  • 也可以理解为视图是MVC架构里面的C部分(控制器),主要处理功能和业务上的逻辑。我们习惯使用视图函数处理HTTP请求,即在视图中定义def函数,这种方式称为FBV(Function Base View,基于函数)。
  • Web开发是一项无聊且单调的工作,特别是在视图功能编写方面更为显著。为了减少这种痛苦Django 植入了视图类这一功能,该功能封装了视图开发常用的代码,无须编写大量代码即可快速完成数据视图的开发,这种以类的形式实现响应与请求处理的方式称为CBV(Class Base View,基于类)

2、首页的视图函数

  • 前面我们已为项目babys定义了路由信息和数据模型,本节将在此基础上编写视图函数。由于项目babys一共有6个网页(网站首页 index.html、用户注册登录页 login.html、商品列表页面commodity.html、商品详情页面 details.html、购物车页面 shopcart.html、个人中心页面shopper.html),并且每个网页的视图业务逻辑各不相同,为了让读者更好地理解Django的视图功能,我们从网站首页的视图业务逻辑分析并学习视图的定义过程。

  • 编写网站首页的视图业务逻辑之前,确保项目babys已定义路由index,并分别定义了模型Types、CommodityInfos、CartInfos 和 OrderInfos,所有模型执行了数据迁移,在MysQL数据库中生成相应的数据表。

    1. 配置项目应用index的urls.py文件的路由

      from django.urls import path
      from .views import *urlpatterns = [# 基于FBV(视图函数)实现函数视图的路由path('', 'indexView', name='index'),
      ]
      
    2. index设置视图函数名为indexView,因此在项目应用index的views.py 文件中定义视图函数indexView,定义过程如下:

      from django.shortcuts import render
      from commodity.models import CommodityInfos, Types# 视图函数
      def indexView(request):title = '首页'    # 选项卡的标题# 1 获取最新商品(按照销量降序排列)commodityInfos = CommodityInfos.objects.order_by('-sold').all()[:8]# 2 获取所有类别types = Types.objects.all()# 1F 宝宝服饰cl = [x.seconds for x in types if x.firsts == "儿童服饰"]clothes = CommodityInfos.objects.filter(types__in=cl).order_by('-sold')[:5]# 2F 奶粉辅食fl = [x.seconds for x in types if x.firsts == "奶粉辅食"]foods = CommodityInfos.objects.filter(types__in=fl).order_by('-sold')[:5]# 3F 儿童用品gl = [x.seconds for x in types if x.firsts == "儿童用品"]goods = CommodityInfos.objects.filter(types__in=gl).order_by('-sold')[:5]return render(request, 'index.html', locals())
      
    3. 在 templates目录下创建 index.html


3、视图函数请求对象

  • 网站是根据用户请求来输出相应的响应内容的,用户请求是指用户在浏览器上访问某个网址链接的操作,浏览器会根据网址链接信息向网站发送HTTP请求,那么,当Django接收到用户请求时,它是如何获取用户请求信息的呢?

1 请求方式

  • 当在浏览器上访问某个网

http://www.lryc.cn/news/593210.html

相关文章:

  • 洛谷 P2947:[USACO09MAR] Look Up S ← 数组模拟+单调栈
  • 使用 Gunicorn 部署 Django 项目
  • 5 基于STM32单片机的绝缘检测系统设计(STM32代码编写+手机APP设计+PCB设计+Proteus仿真)
  • 6 STM32单片机的智能家居安防系统设计(STM32代码+手机APP设计+PCB设计+Proteus仿真)
  • 对话访谈 | 盘古信息×锐明科技:中国企业高质量出海“走进去”和“走上去”
  • 家庭KTV v1.1.9 | 曲库丰富,无限制免费K歌
  • 驾驭 Spring Boot 事件机制:8 个内置事件 + 自定义扩展实战
  • 《一行注解解决重复提交:Spring Boot 接口幂等实战》
  • 深入理解设计模式:策略模式的艺术与实践
  • 在非Spring Boot的Spring项目中使用Lock4j
  • 用graphviz画一个关系图
  • 云服务器磁盘IO性能优化的测试与配置方法
  • 2025年7月19日,二维矩阵
  • 智能制造——解读39页汽车行业数字化工厂解决方案【附全文阅读】
  • 异世界历险之数据结构世界(二叉树-leetcode)
  • 国产电科金仓数据库:融合进化,智领未来
  • 【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)
  • 架构探索笔记【1】
  • JavaScript空值安全深度指南
  • windows内核研究(驱动开发之内核编程)
  • Java无服务架构新范式:Spring Native与AWS Lambda冷启动深度优化
  • 【小沐学GIS】基于Rust绘制三维数字地球Earth(Rust、OpenGL、GIS)
  • C++STL系列之概述
  • OpenCV 官翻5 - 机器学习
  • 【web安全】万能密码
  • 物联网系统中的可视化大屏定义
  • UGUI 性能优化系列:第三篇——渲染与像素填充率优化
  • 小明记账簿焕新记:从单色到多彩的主题进化之路
  • 【Android】ListView与RecyclerView的基础使用
  • 安全隔离新选择:SiLM5768L系列 - 集成互锁功能的高速六通道数字隔离器