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 ...
随机推荐
- 关于使用LocalDateTime进行存储,时间相差比较多的问题。
可以在设置数据库中的连接, characterEncoding=UTF8&useSSL=false&serverTimezone=GMT%2b8
- Pwn-level3(x64)
题目地址 https://dn.jarvisoj.com/challengefiles/level3_x64.rar.8c74c402b190ac3fbef5a9ae540c40de 跟level3差 ...
- web-神盾局的秘密
题目地址 http://web.jarvisoj.com:32768/ 首页是一张图片 查看源码,看到了一些猫腻,showing.php c2hpZWxkLmpwZw==是base64编码 ...
- 其它 用VB6创建ActiveX.dll
1.打开VB6 2.选择 ActiveX DLL,点击打开 3.在窗口输入测试代码 Public Function addstr(str As String) As String addstr = & ...
- 快速傅立叶变换(FFT)
多项式 系数表示法 设\(f(x)\)为一个\(n-1\)次多项式,则 \(f(x)=\sum\limits_{i=0}^{n-1}a_i*x_i\) 其中\(a_i\)为\(f(x)\)的系数,用这 ...
- Redis的Sorted-Sets排行榜功能实现
Redis的ZSet排行榜功能实现 1. 功能需求 类似给用户n张图片, 用户左滑不喜欢右滑喜欢.所以每个用户就会有一些喜欢的图片集合和不喜欢的图片集合.现在我们要做一个将按照一个算法将喜欢的排到前面 ...
- touch.js - 移动设备上的手势识别与事件库
Touch.js 是移动设备上的手势识别与事件库, 由百度云Clouda团队维护,也是在百度内部广泛使用的开发工具.Touch.js手势库专为移动设备设计.Touch.js对于网页设计师来说,是一款不 ...
- 『大 树形dp』
大 Description 滑稽树上滑稽果,滑稽树下你和我,滑稽树前做游戏,滑稽多又多.树上有 n 个节点,它们构成了一棵树,每个节点都有一个滑稽值. 一个大的连通块是指其中最大滑稽值和最小滑稽值之差 ...
- kali渗透综合靶机(十六)--evilscience靶机
kali渗透综合靶机(十六)--evilscience靶机 一.主机发现 1.netdiscover -i eth0 -r 192.168.10.0/24 二.端口扫描 1. masscan --ra ...
- mysql的sql调优: slow_query_log_file
mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysql启动的时候加入一些参数.如果在my.cnf里面修改,需增加如 ...