zoukankan      html  css  js  c++  java
  • 路飞支付相关

    内容回顾

    1.路飞学成的购物车如何实现?

      前面文章

    2.商品是否有个数?

      -价格策略【用周期时间来类比个数,7天,15天,一个月】
      -购买多个无意义,因为都是从同一天开始往后累加。

    3.购物车在redis中的结构。

    shopping_car_[user_id]_[commodity_id]为键,然后商品详细为值。
    {
        "code": 1000,
        "data": [
            {
                "title": "语文阅读",
                "img": "25852585.jpg",
                "policy": {
                    "1": {
                        "period": 3,
                        "period_display": "3天",
                        "price": 111
                    },
                    "4": {
                        "period": 30,
                        "period_display": "1个月",
                        "price": 399
                    }
                },
                "default_policy": "4"
            },
            {
                "title": "数学算数",
                "img": "451646",
                "policy": {
                    "2": {
                        "period": 3,
                        "period_display": "3天",
                        "price": 222
                    }
                },
                "default_policy": "2"
            }
        ],
        "error": null
    }
    示例

    4.购物车购买数量有限制吗

    可以对购买个数进行限制,通过计算长度,看买了多少

    print(len(conn.keys("luffy_shopping_car_1_1")))

    5.购物车是否设置超时时间?

    conn.expire("luffy_shopping_car_1_1",60*30)  #30min后过期也可以

    使用方案:对购买课程个数进行限制

    6.为什么把购物车信息放到redis中。

      1.操作频繁,对数据库压力大,可以使用redis
      2.操作速度快
      3.购物车只是一个临时状态,而不是永久保存的

    临时补充:

    Django Rest Framework 接口书写规范
    原则:

    • 简单逻辑先处理
    • try
    • 细粒度异常+自定义异常

        -内置

        -框架

        自定义

    • 注释
    • 文件注释【README.md】
    • 类注释
    • 函数注释
    • 文件名,类,函数,project
    • 对内容功能进行分类【views文件夹下可以创建多个views,每个views的功能是类似的】
    • 减少代码层级 不用一直if-else,直接return即可。
    • BaseResponse

    开始真正的支付结算

    1.首先还是在URL中添加一条路径

        url(r'payment/$',payment.PaymentViewSet.as_view())

    2.创建payment.py文件【未完】

    # Author:Jesi
    # Time : 2018/11/22 15:33
    from rest_framework.views import APIView
    from ..auth.auth import LuffyAuth
    from rest_framework.response import Response
    from django.conf import settings
    from django_redis import get_redis_connection
    import json
    from utils.response import BaseResponse
    from api import models
    import datetime
    
    class PaymentViewSet(APIView):
        authentication_classes = [LuffyAuth,]    #首先肯定还是进行认证
        conn=get_redis_connection("default")     #链接到redis
        def post(self,request,*args,**kwargs):
            ret=BaseResponse()
            try:
                payment_dict={}
    
                # 1.1获取用户要结算课程ID
                course_id_list=request.data.get("courseids")
                for course_id in course_id_list:
                    payment_course_dict={}
    
                    car_key=settings.SHOPPING_CAR_KEY%(request.auth.user_id,course_id)
    
                    #1.2监测用户要结算的课程是否已加入到购物车
                    if not self.conn.exists(car_key):
                        ret.code=1001
                        ret.error="课程需要先加入购物车才能结算"
    
                    # 1.3根据key去购物车中获取信息,放入到结算中心。
                    policy=json.loads(self.conn.hget(car_key,'policy').decode('utf-8'))
                    default_policy=self.conn.hget(car_key,'default_policy').decode('utf-8')
                    policy_info=policy[default_policy]
    
                    payment_course_dict={
                        "title" :self.conn.hget(car_key,'title').decode('utf-8'),
                        "img":self.conn.hget(car_key,'img').decode('utf-8'),
                        "policy_id":str(course_id),
                        "coupon":{},
                        "default_coupon":0
                    }
    
                    payment_course_dict.update(policy_info)
                    payment_dict[str(course_id)]=payment_course_dict
           ret.data=payment_dict
                
           #从这儿开始往下是优惠券的逻辑,还没写完【半成品】
           #主要展示的是拿到购物车商品展示的逻辑
           
           #
    2.获取优惠券 ctime=datetime.date.today() from django.db.models import Q #a.通过表达式进行构造 Q(Q(account=request.auth.user)&Q(status=0))|Q(coupon__valid_begin_date__lte=ctime) #b.通过方法进行构造 q=Q() q1=Q() q1.connector="AND" q1.children.append(('account',request.auth.user)) q1.children.append(('status',0)) q1.children.append(('coupon__valid_begin_date__lte',ctime)) q2=Q() q2.connector = "AND" q2.children.append(('coupon__valid_end_date__lte',ctime)) q.add(q1,'OR') q.add(q2,'OR') coupon_list=models.CouponRecord.objects.filter( account=request.auth.user, status=0, coupon__valid_begin_date__lte=ctime, coupon__valid_end_date__gte=ctime, ) for coupon in coupon_list: print(coupon)        #到此处结束购物车【半成品】

         except Exception as e:   pass return Response(ret.dict)

    既然要结算,那么我们需要把拿到购物车中的物品,以课程号为键,以课程详细信息为值进行结构的构造,最后获取到后,才可以进行优惠券的获取然后对价格进行减免。

    我们传入的值是一个课程ID,可为列表因为可能会出现购买多个课程

    {"courseids":[1,2]}

    3.对优惠券进行操作。

  • 相关阅读:
    day19 Pyhton学习 递归函数
    python程序整理(2)
    python程序整理(1)
    day18 Pyhton学习 内置函数最后七个
    day18 Pyhton学习 匿名函数
    day17 Pyhton学习 内置函数继续
    二分法查找
    day16 Pyhton学习
    python从入门到精通之30天快速学python视频教程
    零基础快速掌握Python系统管理视频课程【猎豹网校】
  • 原文地址:https://www.cnblogs.com/geogre123/p/10012579.html
Copyright © 2011-2022 走看看