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

发布于:2025-07-20 ⋅ 阅读:(16) ⋅ 点赞:(0)

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 请求方式

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


网站公告

今日签到

点亮在社区的每一天
去签到