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

时间:2023-12-27 17:27:01

1.增加认证用的表

class Account(models.Model):
username =models.CharField("用户名",max_length=,unique=True)
email= models.EmailField(
verbose_name="邮箱",
max_length=,
unique=True,
blank=True,
null=True,
)
password =models.CharField("密码",max_length=) class UserToken(models.Model):
user =models.OneToOneField(to ="Account")
token =models.CharField(max_length=)
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 =
response.error="用户名或密码错误"
else:
print(obj.password)
uid =str(uuid.uuid4())
models.UserToken.objects.update_or_create(user=obj,defaults={"token":uid})
response.code =
response.data =uid
except Exception as e:
response.code=
response.error ="操作异常"
return Response(response.dict)
class BaseResponse(object):

    def __int__(self):
self.code =
self.data = None
self.error =None @property
def dict(self):
return self.__dict__

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

验证

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

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

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

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

二、结算中心

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

结算中心 ={
“payment_1_1”:{
id :,
name :Django框架学习《
price_id :,
price_priod:,
price:,
default_coupon_id:,
coupon_dict:{ --->绑定了课程1优惠券 :"请选择课程优惠券"
:"xx",
:"xxxx",
:"yyyy",
},
“payment_1_3”:{
id :,
name :Django框架学习《
price_id :,
price_priod:,
price:,
default_coupon_id:,
coupon_dict:{ --->绑定了课程3优惠券 :"请选择课程优惠券"
:"xx",
:"xxxx",
:"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):
""" 在结算中添加课程"""
#. 接收用户选择要结算的课程id列表
#. 清空当前用户request.user.id结算中心的数据 #.序号要加入结算中心的所有课程id列表 """
for courses_id in 用户提交课程id列表
3.1 根据course_id,request.user.id去购物城中获取商品信息:商品名称、图片,价格(id,周期,显示周期,价格)
3.2 根据 。。。。。。。。。。。。。。获取
-当前用户
-当前课程
-可用的优惠券 加入结算中心 提示: 可用使用contenttype
"""
#. 获取当前用户的所有未绑定的课程优惠券
#- 未使用
#-有效期内
#-加入结算中心:global_coupon用户ID def list(self,request,*args,**kwargs):
"""
查看结算中心
:param request:
:param args:
:param kwargs:
:return:
""" # . 根据用户ID去结算中心获取该用户所有要结算课程 # . 根据用户ID去结算中心获取该用户所有可用未绑定课程的优惠券 # . 用户表中获取贝里余额 # . 以上数据构造成一个字典 return Response("xxxx") def update(self,request,*args,**kwargs):
"""
更新优惠券
:param request:
:param args:
:param kwargs:
:return:
"""
# . 获取用户提交:
# course_id=,coupon_id=
# course_id=,coupon_id= # . course_id= --> 去结算中心获取当前用户所拥有的绑定当前课程优惠,并进行校验
# - 成功:defaul_coupon_id=
# - 否则:非法请求 # . course_id= --> 去结算中心获取当前用户所拥有的未绑定课程优惠,并进行校验
# - 成功:defaul_coupon_id=
# - 否则:非法请求
    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=)
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:
"""
# .接受用户选择的要结算的课程ID列表 # .清空当前用户request.user.id结算中心的数据
# key = payment_1* # .循环要加入结算中的所有课程ID列表 """
for course_id in 用户提交课程ID列表:
3.1 根据course_id,request.user.id去购物车中获取商品信息:商品名称、图片、价格(id,周期,显示周期,价格)
3.2 根据course_id,request.user.id获取
- 当前用户
- 当前课程
- 可用的优惠券 加入结算中心 提示:可以使用contenttypes
""" # .获取当前用户所有未绑定课程优惠券
# - 未使用
# - 有效期内
# - 加入结算中心:glocal_coupon_用户ID def list(self,request,*args,**kwargs):
"""
查看结算中心
:param request:
:param args:
:param kwargs:
:return:
""" # . 根据用户ID去结算中心获取该用户所有要结算课程 # . 根据用户ID去结算中心获取该用户所有可用未绑定课程的优惠券 # . 用户表中获取贝里余额 # . 以上数据构造成一个字典
return Response('...') def update(self,request,*args,**kwargs):
"""
更新优惠券
:param request:
:param args:
:param kwargs:
:return:
"""
# . 获取用户提交:
# course_id=,coupon_id=
# course_id=,coupon_id= # . course_id= --> 去结算中心获取当前用户所拥有的绑定当前课程优惠,并进行校验
# - 成功:defaul_coupon_id=
# - 否则:非法请求 # . course_id= --> 去结算中心获取当前用户所拥有的未绑定课程优惠,并进行校验
# - 成功:defaul_coupon_id=
# - 否则:非法请求