一.价格策略

价格策略就是通过前端发送要购买的课程以及价格策略来找出表关联的字段返回客户端

通过contenttype 属性 找到课程所有的价格策略

for prcie_policy in course_obj.price_policy.all():

进行判断获取的价格策略是否存在
if prcie_policy_id not in price_policy_dict:
raise CommonException(1002, "价格策略有误")
在创建与前端匹配的数据结构
 import redis
import json from rest_framework.views import APIView
from rest_framework.response import Response from app01.models import *
from app01.utils.auth import LoginAuth
from app01.utils.response import BaseResponse
from app01.utils.exception import CommonException from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist cache = redis.Redis(decode_responses=True) class ShoppingCartView(APIView):
authentication_classes = [LoginAuth] def post(self, request):
course_id = request.data.get("course_id")
prcie_policy_id = request.data.get("price_policy_id") user_id = request.user.pk
res = BaseResponse() try:
course_obj = Course.objects.get(pk=course_id)
price_policy_dict = {}
price_policy_list = []
for prcie_policy in course_obj.price_policy.all():
price_policy_dict[prcie_policy.pk] = {
"id": prcie_policy.pk,
"valid_period": prcie_policy.valid_period,
"valid_period_text": prcie_policy.get_valid_period_display(),
"price": prcie_policy.price,
"default": prcie_policy_id == prcie_policy.pk
}
print("price_policy_dict", price_policy_dict) #这里需要进行价格策略判断
if prcie_policy_id not in price_policy_dict:
raise CommonException(1002, "价格策略有误")
pp = PricePolicy.objects.get(pk=prcie_policy_id)
for i in price_policy_dict:
price_policy_list.append(price_policy_dict[i]) shoppingcar_key = settings.SHOPPING_CAR_KEY % (user_id, course_id)
shoppingcar_val = {
"id":course_id,
"name": course_obj.name,
"course_img": course_obj.course_img,
"relate_price_policy": price_policy_list,
"default_price_period": prcie_policy_id,
"default_price": pp.price,
# "valid_period": pp.valid_period,
# "valid_period_text": pp.get_valid_period_display(),
}
cache.set(shoppingcar_key, json.dumps(shoppingcar_val, ensure_ascii=False))
print(cache.get(shoppingcar_key)) res.data = "加入购物车成功" except CommonException as e:
res.code = e.code
res.msg = e.msg
except ObjectDoesNotExist as e:
res.code = 1001
res.msg = "课程不存在" return Response(res.dict) def get(self, request): shopping_car_list = [] for key in cache.keys(pattern="shoppingcar_1_*"):
data = cache.get(key)
print(data)
shopping_car_list.append(json.loads(data)) res = BaseResponse()
res.data = {
"total": len(shopping_car_list),
"shopping_car_list": shopping_car_list
} return Response(res.dict)

shopping



关于baseresponse

通过定义静态方法,@property无需调用添加()
实例化对象res .dict发送字典形式数据
class BaseResponse(object):
def __init__(self):
self.code = 1000
self.data = None
self.msg = "" @property
def dict(self): return self.__dict__ if __name__ == '__main__': res = BaseResponse()
res.data = 12312
print(res.dict)


lf 前后端分离 (4) 价格策略的更多相关文章

  1. lf 前后端分离 (2) 课程数据获取,Serializer的返回

    一.关于课程数据的返回 在进行前后端分离时,会通过def 进行前后端传值, 本质上遵循rest 网址规范  增删改查查 get,post,put,del get(\d+) 1.在从数据库获取数据后,进 ...

  2. lf 前后端分离 (6) 支付

    支付 import datetime from django.core.exceptions import ObjectDoesNotExist from rest_framework.views i ...

  3. lf 前后端分离 (5) 优惠券

    关于优惠券 优惠券主要通过前端传回来的course_id_list 创建数据结构 首先清空操作,将所有的优惠券清空, 并将所有优惠劵放到redis中的过程 import datetime import ...

  4. lf 前后端分离 (1) auth,token认证

    一.关于登录验证 用户在登录的时候会通过验证以及滑动解锁,注意的是需要后端if verify(request.data): 来判断是否发送了那三个验证数据 通过 random_str=str(uuid ...

  5. lf 前后端分离 (3) 中间建跨域

    一.关于中间建跨域 为了减少跨域代码冗余,采用中间件 from django.utils.deprecation import MiddlewareMixin class CorsMiddleware ...

  6. 前后端分离——token超时刷新策略

    前言 记录一下前后端分离下————token超时刷新策略! 需求场景 昨天发了一篇记录 前后端分离应用——用户信息传递 中介绍了token认证机制,跟几位群友讨论了下,有些同学有这么一个疑惑:toke ...

  7. 前后端分离之Web前端架构设计

    架构设计:前后端分离之Web前端架构设计 在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分 ...

  8. 前后端分离跨服务器文件上传-Java SpringMVC版

    近来工作上不上特别忙,加上对后台java了解一点,所以就抽时间,写了一个java版本的前后端分离的跨服务器文件上传功能,包括前后端代码. 一.Tomcat服务器部分 1.Tomcat服务器 单独复制一 ...

  9. Spring Cloud 前后端分离后引起的跨域访问解决方案

    背景 Spring Cloud 微服务试点改造,目前在尝试前后端分离. 前台A应用(本机8080端口),通过网管(本机8769端口)调用后台应用B(本机8082端口).应用C发布的http服务.. A ...

随机推荐

  1. ASP.NET开发实战——(八)ASP.NET MVC 与数据库之MySQL

    之前介绍了My Blog如何使用ADO.NET来访问SQL Server获取数据.本章将介绍如何使用My SQL来完成数据管理. 在使用My SQL之前需确保开发环境中安装了My SQL数据库和Con ...

  2. 【2019.8.6 慈溪模拟赛 T2】树上路径(tree)(Trie)

    从暴力考虑转化题意 考虑最暴力的做法,我们枚举路径的两端,然后采用类似求树上路径长度的做法,计算两点到根的贡献,然后除去\(LCA\)到根的贡献两次. 即,设\(v_i\)为\(i\)到根路径上的边权 ...

  3. .NET CORE下最快比较两个文件内容是否相同的方法

    本文因为未考虑磁盘缓存, 结果不是很准确, 更严谨的结果请参看本博文的续集 最近项目有个需求,需要比较两个任意大小文件的内容是否相同,要求如下: 项目是.NET CORE,所以使用C#进行编写比较方法 ...

  4. Note | Python

    目录 PyCharm+远程服务器 预备工作 Pycharm配置 list方法 os imageio Python Image Libarary (PIL) random time PyCharm+远程 ...

  5. powersploit简介

    一.PowerSploit简介 PowerSploit是GitHub上面的一个安全项目,上面有很多powershell攻击脚本,它们主要被用来渗透中的信息侦察.权限提升.权限维持. Powershel ...

  6. 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)

    1. 数组去重 题目描述 /** * 有序数组去重 * 输出最终的数字个数 * 输入:1,2,2 * 输出:2 * @author Turing * */ 代码 import java.util.*; ...

  7. webpack与vue环境搭建(转载)

    原文:https://www.cnblogs.com/lgx5/p/10732016.html npm安装教程   一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理 ...

  8. Unity开发实战探讨-资源的加载释放最佳策略简要心得

    Unity开发实战探讨-资源的加载释放最佳策略简要心得 看过我另外一篇关于Unity资源释放随笔<Unity开发实战探讨-资源的加载释放最佳策略>如果觉得略微复杂,那么下面是一些比较简要的 ...

  9. (二十四)golang--错误处理

    在默认情况下,遇到错误时,程序会崩溃: 在发生错误时,我们可以捕获错误,使程序可以继续运行,并抛出错误提示: 错误处理: (1)Go语言追求简洁优雅,所以不支持传统的try catch finally ...

  10. 普通的行专列;oracle行专列;更新中。。。

    题记 本来想写一个完整的表创建,但是其他人都写过啦,要不这样,你们有什么行转列的问题给我留言,我直接回答如何 Oracle的行转列 这篇文章不错:https://blog.csdn.net/huay_ ...