• 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
            #       - 否则:非法请求
  • 相关阅读:
    Java中常见的几种加密算法
    关于redis中过期的key的处理
    Redis 的内存淘汰策略
    AES加密算法原理(加密过程)
    springboot中从配置文件中读取相关参数值
    springboot中切换配置(多个配置文件--生产、开发、测试)
    mysql跨库查询数据
    SpringBoot2.0 的默认连接池----Hikari
    Druid连接池中的缓存机制
    Opus编解码练习
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/9473865.html
Copyright © 2020-2023  润新知