一.价格策略

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

通过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. Pwn-level4

    题目地址 https://dn.jarvisoj.com/challengefiles/level4.0f9cfa0b7bb6c0f9e030a5541b46e9f0 友情连接 https://www ...

  2. 创建一个任意大小的全色矩阵 python

    img = np.zeros((112,112,3))#cv2.imread('F:/project/Breast/InBreast/INBreast/outimgpatch/allnocalcifi ...

  3. go 接收发送文件

    package main import ( "fmt" "os" "net" "io" ) //发送文件内容 func ...

  4. Introduction to Semidefinite Programming (SDP)

    https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-251j-introduction-to-mathe ...

  5. 学习linux开发需要的基础

    1.常见的通信协议I2C和SPI,熟悉. 还有时钟. 中断等概念也都了解了. 所以你现在应该先学一下Linux常用的一些命令,网上搜一下,有很多总结的文章,大概看一下用法,想深入学习的话,可以看鸟哥的 ...

  6. lograotate 配置常用配置

    目录 lograotate 配置说明 nginx php-fpm tomcat 配置 各种参数说明 lograotate 配置说明 Linux系统默认安装logrotate工具,它默认的配置文件在: ...

  7. vscode10个必装的插件

    VSCode 必装的 10 个高效开发插件   本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件,用于大大提高软件开发的效率. VSCode 的基本使用可以参考我的原创 ...

  8. LeetCode 160: 相交链表 Intersection of Two Linked Lists

    爱写Bug(ID:iCodeBugs) 编写一个程序,找到两个单链表相交的起始节点. Write a program to find the node at which the intersectio ...

  9. css隐藏页面元素的方法

    用css隐藏页面元素有许多种方法. 第一种方法[opacity: 0;] opacity属性通常用于设置一个元素的透明度,从另一个角度来看,如果透明度为0,也就从视觉上隐藏了该元素. 这个属性不是为改 ...

  10. 【redis】redis异常-MISCONF Redis is configured to save RDB snapshots

    使用redis报错: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persis ...