• s11 day103 luffy项目结算部分+认证+django-redis


    1.增加认证用的表

    class Account(models.Model):
        username =models.CharField("用户名",max_length=64,unique=True)
        email= models.EmailField(
            verbose_name="邮箱",
            max_length=255,
            unique=True,
            blank=True,
            null=True,
        )
        password =models.CharField("密码",max_length=128)
    
    class UserToken(models.Model):
        user =models.OneToOneField(to ="Account")
        token =models.CharField(max_length=36)
        
    python3 manage.py makemigrations
    
    python3 manage.py migrate
     
    数据迁移

    2. 添加auth认证模块

    url

        url(r"^auth/$",auth.AuthView.as_view({"post":"login"})),

    views auth

    import uuid
    from api import models
    from rest_framework.response import Response
    from rest_framework.viewsets import ViewSetMixin
    from rest_framework.views import APIView
    from api.utils.response import BaseResponse
    class AuthView(ViewSetMixin,APIView):
        def login(self,request,*args,**kwargs):
            #用户登录认证
            response =BaseResponse()   #构建一个字典作为异常处理
            try:
                user=request.data.get("username")
                pwd =request.data.get("password")
                obj = models.Account.objects.filter(username =user,password=pwd).first()
                if not obj:
                    print(obj.username)
                    response.code =10002
                    response.error="用户名或密码错误"
                else:
                    print(obj.password)
                    uid =str(uuid.uuid4())
                    models.UserToken.objects.update_or_create(user=obj,defaults={"token":uid})
                    response.code =9999
                    response.data =uid
            except Exception as e:
                response.code= 10005
                response.error ="操作异常"
            return Response(response.dict)
    class BaseResponse(object):
    
        def __int__(self):
            self.code = 1000
            self.data = None
            self.error =None
    
        @property
        def dict(self):
            return self.__dict__

    验证

     

      

    二、结算中心

     

     

    结算中心 ={
            “payment_1_1”:{
                id :1,
                name :Django框架学习《
                price_id :1,
                price_priod:30,
                price:199,
                default_coupon_id:0,
                coupon_dict:{   --->绑定了课程1优惠券
                
                0:"请选择课程优惠券"
                1:"xx",
                2:"xxxx",
                3:"yyyy",
                },
            “payment_1_3”:{
                id :3,
                name :Django框架学习《
                price_id :1,
                price_priod:30,
                price:199,
                default_coupon_id:0,
                coupon_dict:{   --->绑定了课程3优惠券
                
                0:"请选择课程优惠券"
                1:"xx",
                2:"xxxx",
                3:"yyyy",
                },

    添加到结算中心

    url

    from rest_framework.views import APIView
    from rest_framework.viewsets import ViewSetMixin
    from rest_framework.response import Response
    from  api.views.auth import AuthView
    class PaymentView(ViewSetMixin,APIView):
        authentication_classes = [AuthView]
    
        def create(self,request,*args,**kwargs):
            """ 在结算中添加课程"""
            #1. 接收用户选择要结算的课程id列表
            #2. 清空当前用户request.user.id结算中心的数据
    
            #3.序号要加入结算中心的所有课程id列表
    
            """
            for courses_id in 用户提交课程id列表
             3.1 根据course_id,request.user.id去购物城中获取商品信息:商品名称、图片,价格(id,周期,显示周期,价格)
             3.2 根据 。。。。。。。。。。。。。。获取
                -当前用户
                -当前课程
                -可用的优惠券
    
            加入结算中心
        
            提示: 可用使用contenttype      
            """
            #4. 获取当前用户的所有未绑定的课程优惠券
                #- 未使用
                #-有效期内
                #-加入结算中心:global_coupon用户ID
    
        def list(self,request,*args,**kwargs):
            """
                    查看结算中心
                    :param request:
                    :param args:
                    :param kwargs:
                    :return:
                    """
    
            # 1. 根据用户ID去结算中心获取该用户所有要结算课程
    
            # 2. 根据用户ID去结算中心获取该用户所有可用未绑定课程的优惠券
    
            # 3. 用户表中获取贝里余额
    
            # 4. 以上数据构造成一个字典
    
            return  Response("xxxx")
    
        def update(self,request,*args,**kwargs):
            """
                   更新优惠券
                   :param request:
                   :param args:
                   :param kwargs:
                   :return:
                   """
            # 1. 获取用户提交:
            #       course_id=1,coupon_id=3
            #       course_id=0,coupon_id=6
    
            # 2. course_id=1 --> 去结算中心获取当前用户所拥有的绑定当前课程优惠,并进行校验
            #       - 成功:defaul_coupon_id=3
            #       - 否则:非法请求
    
            # 2. course_id=0 --> 去结算中心获取当前用户所拥有的未绑定课程优惠,并进行校验
            #       - 成功:defaul_coupon_id=3
            #       - 否则:非法请求
        url(r'payment/$',payment.PaymentView.as_view({'post': 'create', 'get': 'list',  'put': 'update'})),

    views

    import json
    import redis
    from django.conf import settings
    from rest_framework.views import APIView
    from rest_framework.viewsets import ViewSetMixin
    from rest_framework.response import Response
    from api.utils.auth import LuffyAuthentication
    from api import models
    from api.utils.response import BaseResponse
    
    # CONN = redis.Redis(host='192.168.11.61',port=6379)
    from django_redis import get_redis_connection
    CONN = get_redis_connection("default")
    
    class PaymentView(ViewSetMixin,APIView):
    
        authentication_classes = [LuffyAuthentication,]
    
        def create(self,request,*args,**kwargs):
            """
            在结算中添加课程
            :param request:
            :param args:
            :param kwargs:
            :return:
            """
            # 1.接受用户选择的要结算的课程ID列表
    
    
            # 2.清空当前用户request.user.id结算中心的数据
            #   key = payment_1*
    
    
            # 3.循环要加入结算中的所有课程ID列表
    
    
            """
            for course_id in 用户提交课程ID列表:
                3.1 根据course_id,request.user.id去购物车中获取商品信息:商品名称、图片、价格(id,周期,显示周期,价格)
                3.2 根据course_id,request.user.id获取 
                        - 当前用户
                        - 当前课程
                        - 可用的优惠券
                
                加入结算中心
                
                提示:可以使用contenttypes
            """
    
            # 4.获取当前用户所有未绑定课程优惠券
            #       - 未使用
            #       - 有效期内
            #       - 加入结算中心:glocal_coupon_用户ID
    
    
        def list(self,request,*args,**kwargs):
            """
            查看结算中心
            :param request:
            :param args:
            :param kwargs:
            :return:
            """
    
            # 1. 根据用户ID去结算中心获取该用户所有要结算课程
    
            # 2. 根据用户ID去结算中心获取该用户所有可用未绑定课程的优惠券
    
            # 3. 用户表中获取贝里余额
    
            # 4. 以上数据构造成一个字典
            return Response('...')
    
    
        def update(self,request,*args,**kwargs):
            """
            更新优惠券
            :param request:
            :param args:
            :param kwargs:
            :return:
            """
            # 1. 获取用户提交:
            #       course_id=1,coupon_id=3
            #       course_id=0,coupon_id=6
    
            # 2. course_id=1 --> 去结算中心获取当前用户所拥有的绑定当前课程优惠,并进行校验
            #       - 成功:defaul_coupon_id=3
            #       - 否则:非法请求
    
            # 2. course_id=0 --> 去结算中心获取当前用户所拥有的未绑定课程优惠,并进行校验
            #       - 成功:defaul_coupon_id=3
            #       - 否则:非法请求
  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    690. Employee Importance
    1723. Find Minimum Time to Finish All Jobs
    LeetCode 329 矩阵中最长增长路径
    7.2 物理内存管理
    LeetCode 面试题 特定深度节点链表
    LeetCode 100 相同的树
    npm安装包命令详解,dependencies与devDependencies实际区别
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/9473865.html
Copyright © 2020-2023  润新知