Django REST framework+Vue 打造生鲜超市(七)

给你一个电商网站,你如何测试?功能测试及接口测试思路是什么? 功能测试思路、接口测试思路、测试思路,如何测试一个网站 阅读详情

代码下载

github

教程

学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 

八、商品详情页功能

 8.1.viewsets实现商品详情页接口

(1)商品详情页只需要多继承一个类(mixins.RetrieveModelMixin)就可以了

class GoodsListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin,viewsets.GenericViewSet):

 (2)商品轮播图

商品轮播图是一个外键,序列化外键用嵌套的方法来实现

复制代码

#轮播图
class GoodsImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = GoodsImage
        fields = ("image",)

#商品列表页
class GoodsSerializer(serializers.ModelSerializer):
    #覆盖外键字段
    category = CategorySerializer()
    #images是数据库中设置的related_name="images",把轮播图嵌套进来
    images = GoodsImageSerializer(many=True)
    class Meta:
        model = Goods
        fields = '__all__'

复制代码

 

8.2.热卖商品接口实现

只需要在过滤器中增加“is_hot”就可以了

goods/filters.py里的GoodsFilter添加“is_hot”

    class Meta:
        model = Goods
        fields = ['pricemin', 'pricemax','is_hot']

在后台设置商品的“is_hot”为True,然后前端就可以显示出来了

 

 

 8.3.用户收藏接口实现

 (1)序列化

user_operation/serializers.py

复制代码

# user_operation/serializers.py

from rest_framework import serializers
from user_operation.models import UserFav
from rest_framework.validators import UniqueTogetherValidator

class UserFavSerializer(serializers.ModelSerializer):
    #获取当前登录的用户
    user = serializers.HiddenField(
        default=serializers.CurrentUserDefault()
    )
    class Meta:
        #validate实现唯一联合,一个商品只能收藏一次
        validators = [
            UniqueTogetherValidator(
                queryset=UserFav.objects.all(),
                fields=('user', 'goods'),
                #message的信息可以自定义
                message="已经收藏"
            )
        ]
        model = UserFav
        #收藏的时候需要返回商品的id,因为取消收藏的时候必须知道商品的id是多少
        fields = ("user", "goods",'id')

复制代码

(2)user_operation/views.py

复制代码

# user_operaton/views.py

from rest_framework import viewsets
from rest_framework import mixins
from .models import UserFav
from .serializers import UserFavSerializer

class UserFavViewset(viewsets.GenericViewSet, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.DestroyModelMixin):
    '''
    用户收藏
    '''
    queryset = UserFav.objects.all()
    serializer_class = UserFavSerializer

复制代码

说明:继承的类

  •  mixins.CreateModelMixin        添加收藏(相当于创建数据库)
  •  mixins.DestroyModelMixin      取消删除(相当于数据库删除)
  •  mixins.ListModelMixin             获取已收藏的商品列表

 (3)配置url

# 配置用户收藏的url
router.register(r'userfavs', UserFavViewset, base_name="userfavs")

 

测试代码:

访问地址:http://127.0.0.1:8000/userfavs/,收藏三个商品,查看已收藏列表

 

 

 重复收藏某个商品会提示“已经收藏”

8.3.drf的权限认证

(1)自定义权限

utils文件夹下新建permissions.py,代码如下:

这个官网有实例,直接复制过来就可以了,把其中的owner改为user即可

复制代码

# utils/permissions.py

from rest_framework import permissions

class IsOwnerOrReadOnly(permissions.BasePermission):
    """
    Object-level permission to only allow owners of an object to edit it.
    Assumes the model instance has an `owner` attribute.
    """

    def has_object_permission(self, request, view, obj):
        # Read permissions are allowed to any request,
        # so we'll always allow GET, HEAD or OPTIONS requests.
        if request.method in permissions.SAFE_METHODS:
            return True

        # Instance must have an attribute named `owner`.
        #obj相当于数据库中的model,这里要把owner改为我们数据库中的user
        return obj.user == request.user

复制代码

(2)user_operation/views

复制代码

# user_operaton/views.py

from rest_framework import viewsets
from rest_framework import mixins
from .models import UserFav
from .serializers import UserFavSerializer
from rest_framework.permissions import IsAuthenticated
from utils.permissions import IsOwnerOrReadOnly
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.authentication import SessionAuthentication

class UserFavViewset(viewsets.GenericViewSet, mixins.ListModelMixin, mixins.CreateModelMixin, mixins.DestroyModelMixin):
    '''
    用户收藏
    '''
    serializer_class = UserFavSerializer
    #permission是用来做权限判断的
    # IsAuthenticated:必须登录用户;IsOwnerOrReadOnly:必须是当前登录的用户
    permission_classes = (IsAuthenticated,IsOwnerOrReadOnly)
    #auth使用来做用户认证的
    authentication_classes = (JSONWebTokenAuthentication,SessionAuthentication)
    #搜索的字段
    lookup_field = 'goods_id'

    def get_queryset(self):
        #只能查看当前登录用户的收藏,不会获取所有用户的收藏
        return UserFav.objects.filter(user=self.request.user)

复制代码

 

说明:

  • 只有登录用户才可以收藏
  • 用户只能获取自己的收藏,不能获取所有用户的收藏
  • JSONWebTokenAuthentication认证不应该全局配置,因为用户获取商品信息或者其它页面的时候并不需要此认证,所以这个认证只要局部中添加就可以
  • 删除settings中的'rest_framework_jwt.authentication.JSONWebTokenAuthentication',

 

8.4.用户收藏功能和vue联调 

修改为local_host

复制代码

//收藏
export const addFav = params => { return axios.post(`${local_host}/userfavs/`, params) }

//取消收藏
export const delFav = goodsId => { return axios.delete(`${local_host}/userfavs/`+goodsId+'/') }

export const getAllFavs = () => { return axios.get(`${local_host}/userfavs/`) }

//判断是否收藏
export const getFav = goodsId => { return axios.get(`${local_host}/userfavs/`+goodsId+'/') }

复制代码

  • 删除收藏:根据商品'goods_id'
  • 已收藏的商品显示“已收藏”,没有收藏就显示“收藏”

 

唯品会.zip 仿唯品会做的网站,有14个界面,主要是界面美观,特效多,包含前端页面代码和答辩ppt,对于前端爱好者是很好的学习资源,还包括代码的注释,在Google浏览器能完美运行。 立即下载

相关推荐

商品详情页与购物车实现

Android实现商品详情页面和购物车页面及逻辑判断,相信能帮到你!

八、商品详情页功能

八、商品详情页功能 8.1.viewsets实现商品详情页接口 (1)商品详情页只需要多继承一个类(mixins.RetrieveModelMixin)就可以了 class GoodsListViewSet(mixins.ListModelMixin, mixins.Retr...

chiao7156的博客 681

~~~慕克生鲜 Vue源码~~~

Vue+Django REST framework 打造生鲜电商项目,慕克生鲜 Vue源码,分享给大家 #online-store前端 vue2.3 vuex vue-router 运行: npm install npm run dev

商品详情功能实现[浏览历史记录,收藏]

商品详情功能实现[浏览历史记录,收藏] 中间件的创建

qishaoawei的博客 1412

泛微Ecology9单点登录实战指南:从Token获取到页面跳转

本文提供了一份详尽的泛微Ecology9单点登录实战指南,重点解析了Token跳转式SSO的核心流程。内容涵盖从理解关键参数(如appid、loginid)与一次性Token机制,到通过代码示例演示如何正确调用接口获取Token,并详细说明了拼接不同场景跳转地址的完整规则与安全实践,旨在帮助开发者高效、稳定地实现业务系统与OA门户的无缝集成。

ol789012345的博客 1071

IntelliJ IDEA 中git使用说明书

IntelliJ IDEA 中git使用说明书

junyang2012的博客 5390

java web接口返回页面_【JavaWeb】111:详情页面的实现

今天是刘小爱自学Java的第111天。感谢你的观看,谢谢你。话不多说,开始今天的学习:我们浏览网页时看到的数据无外乎两种:静态数据和动态数据。静态数据是将数据给写死了,需要修改时得去改对应的某个页面。而动态数据是需要去数据库查询的,其数据是随着数据库中的数据变化而变化的。对于我们后台开发来说,打交道最多的肯定就是动态数据了。所以有业务需求时,不妨先分析页面中的数据与数据库中的表关系。流程分析清楚了...

weixin_36006862的博客 1286

Visual Tracker Benchamark傻瓜式教程(二)

问题  1 1  在调用main.m跑TRE和SRE时,因为会生成相应的.mat数据文件,如果跑完以后发现自己算法生成的.mat文件有问题,那么要把该文件删除,待找到错误原因后,重新生成相应的.mat文件。因为程序中写的是如果已经存在了.mat文件,例如已经存在car4_STC.mat文件,即使该文件中的数据有错误,但是重新跑时会默认该文件中的数据写完,不会重新写入数据 问题  2  b

mingbujingren的专栏 9928

商城项目实战32:商品详情页实现

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。 1. 需要做的事情 l商品详情页实现 1、商品查询服务事项 2、商品详情展示 3、添加缓存 2.实现商品详情页功能 2.1.功能分析 1、Taotao-portal接收页面请求,接收到...

熊诗言的博客 2万+

我爬取了某非法网贷后台系统数据,终于知道什么叫做利滚利滚利滚利了

我爬取了非法贷款的后台网站!

weixin_44042821的博客 2881

RPMsg:协议简介

两台计算机可以通过TCP/IP进行通信,那么同一颗芯片上的两个核心怎么通信呢?

SunnyZhou-1024的博客 1万+

Django REST framework+Vue 打造生鲜超市(四)

代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 五、商品列表页 5.1.django的view实现商品列表页 (1)goods/view_base.py 在goods文件夹下面新建view_base.py,为了区分django和django rest framework的view 利用Django的view实现返回jso...

Just for fun的专栏 450

RAP BDL 里的 field ( readonly ) 到底控制了什么?——从语法到运行时的全景解析

RAP行为定义中的只读字段控制 摘要:该代码片段展示的是RAP(ABAP RESTful Application Programming)行为定义语言(BDL)中的字段控制语法,用于声明业务对象中需由框架自动维护的只读字段。field ( readonly )语句将订单ID和审计字段(CreatedBy/CreatedAt等)标记为只读,确保这些字段在更新阶段不可修改。在managed场景下,RAP框架会自动处理这些行政性数据的写入:创建时填充创建信息,更新时刷新变更记录,并利用LocalLastChang

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 157

Django REST framework+Vue 打造生鲜超市(二)

代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 三、Models设计 3.1.项目初始化 (1)进虚拟环境下安装 django2.0.2 djangorestframework和相关依赖mark,filter pillow 图片处理 pip install djangorestframework pip in...

Just for fun的专栏 591

【YOLOv11多模态涨点改进】独家创新首发 | TGRS 2025 | 引入CDFIM跨模态差异特征交互模块,通过差异特征提取和融合增强机制,减少了冗余信息,显著提升了小目标的检测精度,高效涨点改进

🔥本文给大家介绍使用 CDFIM跨模态差异特征交互模块改进 YOLOv11多模态目标检测,通过有效的差异特征提取和增强,显著提升了小目标的检测精度,特别是在复杂背景和低对比度环境下。该模块通过残差加法和通道与空间注意力机制,增强了可见光与红外模态之间的互补特征交互,减少了冗余信息,提高了检测稳定性。尽管提升了特征交互,CDFIM 仍保持轻量化设计,计算开销和参数量较低,适合实时检测应用。总的来说,CDFIM 模块在保留原始模态信息的同时优化了特征融合,有效提高了 YOLO 在多模态目标检测中的鲁棒性和精度

Ai缝合怪、助力小伙伴高效发论文 131

OpenOCD入门到精通:第28章 综合实战:RISC-V 调试

RISC-V调试实战摘要 本文介绍了RISC-V调试规范及其在OpenOCD中的实现。主要内容包括: RISC-V Debug规范的两个版本(0.11和0.13)及其差异,OpenOCD通过自动检测DTMCS寄存器版本号选择对应驱动实现。 RISC-V调试架构的分层设计,包含DTM、Debug Module、Program Buffer等核心组件,以及三种内存访问方式(progbuf、sysbus、abstract)。 以GD32VF103为例的实战调试配置,包括硬件连接、OpenOCD配置文件编写和GDB

从事嵌入式linux android驱动开发,拥有全栈能力 282

Django REST framework+Vue 打造生鲜超市(十二)

代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 十三、首页、商品数量、缓存和限速功能开发 13.1.轮播图接口实现 首先把pycharm环境改成本地的,vue中local_host也改成本地 (1)goods/serializer class BannerSerializer(serializers.Model...

Just for fun的专栏 460

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Django进阶 Django REST framework+Vue 打造生鲜超市第一天 搭建环境

1.搭建虚拟环境 新建文件夹VirtualEns 新建环境变量 安装 pip install virtualenv pip install virtualenvwrapper-win mkvirtualenv DjangoProject #创建虚拟环境 workon #查看有哪些虚拟环境 workon DjangoProject #进入...

qq_40604197的博客 462

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Django REST framework+Vue 打造生鲜超市(六)

代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 七、用户登录与手机注册 7.1.drf的token (1)INSTALL_APP中添加 INSTALLED_APPS = ( ... 'rest_framework.authtoken' ) token会生成一张表authtoken_token,所以要运...

Just for fun的专栏 439

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Django REST framework+Vue 打造生鲜超市(三)

代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 四、xadmin后台管理 4.1.xadmin添加富文本插件 (1)xadmin/plugins文件夹下新建文件ueditor.py 代码如下: # xadmin/plugins/ueditor.py import xadmin from xadmin.views ...

Just for fun的专栏 523

Django REST framework+Vue 打造生鲜超市(八)

代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 九、个人中心功能开发 9.1.drf的api文档自动生成 (1)url #drf文档,title自定义 path('docs',include_docs_urls(title='仙剑奇侠传')), 访问:http://127.0.0.1:8000/docs 就...

Just for fun的专栏 373

Django REST framework+Vue 打造生鲜超市(十一)

代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 十二、支付宝沙箱环境配置 12.1.创建应用 进入蚂蚁金服开放平台(https://open.alipay.com/platform/home.htm),登录后进入管理中心-->>应用列表 创建应用 创建应用后会有一个appid。还需要提交信息进行...

Just for fun的专栏 983

Django REST framework+Vue 打造生鲜超市(一)

代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 一、项目介绍 1.1.掌握的技术 Vue + Django Rest Framework 前后端分离技术 彻底玩转restful api 开发流程 Django Rest Framework 的功能实现和核心源码分析 Sentry 完成线上系统的错误日志的监控和告警 第...

Just for fun的专栏 1050

Django REST framework+Vue 打造生鲜超市(九)

代码下载 github 教程 学习自慕课网-前端vue结合后端DjangoFramework的在线生鲜超市 十、购物车、订单管理和支付功能 10.1.添加商品到购物车 (1)trade/serializer.py # trade/serializer.py __author__ = 'derek' from .models import ShoppingCart from...

Just for fun的专栏 305
上一篇: Django REST framework+Vue 打造生鲜超市(六)
下一篇: Django REST framework+Vue 打造生鲜超市(八)
CopperDong
博客等级 码龄14年 1205粉丝 466原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值