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 ...
随机推荐
- Linux上发布E卡通项目
Linux上发布E卡通项目 使用的命令 ps -ef | grep java kill -9 22314 nohup java -jar smartcard-ms-0.0.1-SNAPSHOT.jar ...
- luoguP2480 [SDOI2010]古代猪文
题意 考虑所求即为:\(G^{\sum\limits_{d|n}C_n^d}\%999911659\). 发现系数很大,先用欧拉定理化简系数:\(G^{\sum\limits_{d|n}C_n^d\% ...
- 历届试题 青蛙跳杯子-(bfs)
题目:http://lx.lanqiao.cn/problem.page?gpid=T448 题意:有两个字符串例如*WWBB和WWBB*,*每次能往左或右跳1-3步,与原位置的字符交换,问最少步数跳 ...
- Linux学习笔记-第13天 最近有点跟不上节奏阿
难度上来了.最近工作也忙起来了..有点跟不上节奏.加油吧
- JAVA 中加载属性文件的4种方法
小总结 : 这个集合属性可以反序列化, 把持久化数据读出来, 输入流中放入要操作的文件! p.load加载这个输入流! p.getProperty( key) 根据这个键获得值! 补充 : web工程 ...
- maven 常见命令
mvn clean package依次执行了clean.resources.compile.testResources.testCompile.test.jar(打包)等7个阶段.mvn clean ...
- vue项目搭建介绍01
目录 vue项目搭建介绍01 vue 项目框架环境搭建: 创建项目: vue 项目创建流程: vue项目搭建介绍01 vue 项目框架环境搭建: vue 项目框架: vue django(类似)(vu ...
- bayer2bmp
#include <stdlib.h> #include <string.h> #include <getopt.h> #include <stdint.h& ...
- Pandownload倒下了,还有它,又一款百度云下载神器,速度可达10M/s
最近很多小伙伴反馈 Pandownload 不好使了 对此我表示 脑壳疼 不过经过一番折腾 还是找到了一个不错的替代品 它就是 baidupcs-web 下载解压后就这么一个可执行文件 干净的不可思议 ...
- vue+elementui+netcore混合开发
1.VueController.cs using Bogus; using System; using System.Collections.Generic; using System.Linq; u ...