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数据库中生成相应的数据表。
配置项目应用index的urls.py文件的路由
from django.urls import path from .views import * urlpatterns = [ # 基于FBV(视图函数)实现函数视图的路由 path('', 'indexView', name='index'), ]
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())
在 templates目录下创建 index.html
3、视图函数请求对象
- 网站是根据用户请求来输出相应的响应内容的,用户请求是指用户在浏览器上访问某个网址链接的操作,浏览器会根据网址链接信息向网站发送HTTP请求,那么,当Django接收到用户请求时,它是如何获取用户请求信息的呢?
1 请求方式
当在浏览器上访问某个网