lf 前后端分离 (4) 价格策略
一.价格策略
价格策略就是通过前端发送要购买的课程以及价格策略来找出表关联的字段返回客户端
通过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) 价格策略的更多相关文章
- lf 前后端分离 (2) 课程数据获取,Serializer的返回
一.关于课程数据的返回 在进行前后端分离时,会通过def 进行前后端传值, 本质上遵循rest 网址规范 增删改查查 get,post,put,del get(\d+) 1.在从数据库获取数据后,进 ...
- lf 前后端分离 (6) 支付
支付 import datetime from django.core.exceptions import ObjectDoesNotExist from rest_framework.views i ...
- lf 前后端分离 (5) 优惠券
关于优惠券 优惠券主要通过前端传回来的course_id_list 创建数据结构 首先清空操作,将所有的优惠券清空, 并将所有优惠劵放到redis中的过程 import datetime import ...
- lf 前后端分离 (1) auth,token认证
一.关于登录验证 用户在登录的时候会通过验证以及滑动解锁,注意的是需要后端if verify(request.data): 来判断是否发送了那三个验证数据 通过 random_str=str(uuid ...
- lf 前后端分离 (3) 中间建跨域
一.关于中间建跨域 为了减少跨域代码冗余,采用中间件 from django.utils.deprecation import MiddlewareMixin class CorsMiddleware ...
- 前后端分离——token超时刷新策略
前言 记录一下前后端分离下————token超时刷新策略! 需求场景 昨天发了一篇记录 前后端分离应用——用户信息传递 中介绍了token认证机制,跟几位群友讨论了下,有些同学有这么一个疑惑:toke ...
- 前后端分离之Web前端架构设计
架构设计:前后端分离之Web前端架构设计 在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分 ...
- 前后端分离跨服务器文件上传-Java SpringMVC版
近来工作上不上特别忙,加上对后台java了解一点,所以就抽时间,写了一个java版本的前后端分离的跨服务器文件上传功能,包括前后端代码. 一.Tomcat服务器部分 1.Tomcat服务器 单独复制一 ...
- Spring Cloud 前后端分离后引起的跨域访问解决方案
背景 Spring Cloud 微服务试点改造,目前在尝试前后端分离. 前台A应用(本机8080端口),通过网管(本机8769端口)调用后台应用B(本机8082端口).应用C发布的http服务.. A ...
随机推荐
- ACM-后序遍历(简单方法和正规方法)
1.后序遍历简单方法 /**二叉树遍历一般有三种方法:前序,中序,后序.*其中前序遍历u顺序为:根->左子树->右子树,在此定义一种新的遍历方法:根->右子树->左子u树*使用 ...
- selenium中driver.close()和driver.quit()的不同点
driver.quit()与driver.close()的不同:driver.quit(): Quit this driver, closing every associated windows;dr ...
- Deformable Convolutional Networks
1 空洞卷积 1.1 理解空洞卷积 在图像分割领域,图像输入到CNN(典型的网络比如FCN)中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预 ...
- linux shell攻略学习笔记一 基础篇
1.#!/bin/bash shebang 可以自定义 比如 #!/bin/bash +x 就会打印出执行日志 linux中 \ 代表null \n2\n3” 会转义其中的\n,生成3行数据 $! 保 ...
- layim+signalr2.0+mongodb在线轻聊版解决方案(可提供演示)
本内容有版权限制,仅提供学习交流参考等等,请勿随便转载或者代码商用. /** layui-v2.1.5 MIT License By http://www.layui.com */; layu ...
- SiIsEnterpriseFunctionsRestrictedOnOpenSource
src/Cedar/Server.c SiIsEnterpriseFunctionsRestrictedOnOpenSource()
- PDF文件添加二维码水印教程
maven配置iText的jar,主要不是所有私服都有iText的jar,maven仓库没有的,可以去https://mvnrepository.com/artifact/com.itextpdf/i ...
- virsh console hangs at the escape character “^]”
I am trying to kickstart a newly built VM. I am stuck with the following. Want to start with a conso ...
- docker安装kafka
文本摘自此文章 .kafka需要zookeeper管理,所以需要先安装zookeeper. 下载zookeeper镜像 $ docker pull wurstmeister/zookeeper .启动 ...
- SpringBoot多数据源动态切换数据源
1.配置多数据源 spring: datasource: master: password: erp_test@abc url: jdbc:mysql://127.0.0.1:3306/M201911 ...