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 # - 否则:非法请求