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__

验证

二、结算中心

结算中心 ={
“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=
# - 否则:非法请求

s11 day103 luffy项目结算部分+认证+django-redis的更多相关文章

  1. luffy项目:基于vue与drf前后台分离项目(1)

    """ 1.业务逻辑:登录注册 - 主页(基础信息展示) - 课程页(复杂信息展示)- 课程订单生产与支付 - 上线订单生成 2.实际项目开发的技术点: git版本控制 ...

  2. s11 day100路飞项目逻辑购物车一

    Luffy项目 先看练习,如下: 一. 添加购物车和查看 1. url url(r'^shoppingcar/$', shoppingcar.ShoppingCarView.as_view({&quo ...

  3. 7) 项目准备流程 和 django权限六表

    一.项目准备 1. 创建django项目 2. 创建数据库 —— init文件中声明mysql —— settings中配置数据库 import pymysql pymysql.install_as_ ...

  4. git冲突解决、线上分支合并、luffy项目后台登陆注册页面分析引入

    今日内容概要 git冲突解决 线上分支合并 登陆注册页面(引入) 手机号是否存在接口 腾讯云短信申请 内容详细 1.git冲突解决 1.1 多人在同一分支开发,出现冲突 # 先将前端项目也做上传到 g ...

  5. 【.NET Core项目实战-统一认证平台】第十六章 网关篇-Ocelot集成RPC服务

    [.NET Core项目实战-统一认证平台]开篇及目录索引 一.什么是RPC RPC是"远程调用(Remote Procedure Call)"的一个名称的缩写,并不是任何规范化的 ...

  6. 【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能

    [.NET Core项目实战-统一认证平台]开篇及目录索引 一.背景 首先说声抱歉,可能是因为假期综合症(其实就是因为懒哈)的原因,已经很长时间没更新博客了,现在也调整的差不多了,准备还是以每周1-2 ...

  7. 【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式

    [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何强制令牌过期的实现,相信大家对IdentityServer4的验证流程有了更深的了解,本篇我将介绍如何使用自定义的授权方 ...

  8. 【.NET Core项目实战-统一认证平台】第十三章 授权篇-如何强制有效令牌过期

    [.NET Core项目实战-统一认证平台]开篇及目录索引 上一篇我介绍了JWT的生成验证及流程内容,相信大家也对JWT非常熟悉了,今天将从一个小众的需求出发,介绍如何强制令牌过期的思路和实现过程. ...

  9. 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

    [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本 ...

随机推荐

  1. popupMenu-----弹出菜单

    import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android ...

  2. win10系统打开自带的画图软件的步骤

    1.win+R打开输入系统命令的输入框 2.输入mspaint即可打开电脑自带的画图软件.

  3. mysql 版本bug

    mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by 在mysql 工具 搜索或者插入数据时报下面错误: ERR ...

  4. sdk接入

    文档 http://blog.csdn.net/chenjie19891104/article/details/42217281 视频: https://chuanke.baidu.com/v2869 ...

  5. Laravel中用GuzzleHttp

    阅读数:14715 今天项目中用到GuzzleHttp,开始不知道怎么用,其实还是很简单的. 直接在项目根目录,输入以下命令 composer require guzzlehttp/guzzle 1 ...

  6. C语言点滴

    static修饰的变量和函数不可以在其他文件extern引用该变量或者函数. static变量放在静态内存区. static变量赋值只生效一次,再无法调用赋值语句.但是可以运算,例如++等. exte ...

  7. Spring+SpringMVC+mybatis+Quartz整合

    Quartz与SpringMVC的整合 简介 Quartz是一个完全由java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制.Quartz允许开发人员根据时间间隔来调 ...

  8. PetaPoco与MySQL

    随便写写的,PetaPoco与MySQL一起使用,在一个工控项目中充分使用节省不少开发时间,经历大半年的努力的项目接近完成,客户不认帐,开始需求合同就是个败笔,技术还是仅能解决技术问题而已! 上图上代 ...

  9. 2018.06.29 NOIP模拟 边的处理(分治+dp)

    边的处理(side.cpp) [问题描述] 有一个 n 个点的无向图,给出 m 条边,每条边的信息形如<x,y,c,r><x,y,c,r><x,y,c,r>. 给出 ...

  10. 第六章 副词(Les adverbes )

    副词属于不变词类,无性.数变化(tout除外),它的功能是修饰动词.形容词.副词或句子. ➡副词的构成 ⇨单一副词 bien tard hier mal vite tôt très souvent  ...