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
        #       - 否则:非法请求
原文地址:https://www.cnblogs.com/mengbin0546/p/9473865.html