s11 day103 luffy项目结算部分+认证+django-redis
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的更多相关文章
- luffy项目:基于vue与drf前后台分离项目(1)
""" 1.业务逻辑:登录注册 - 主页(基础信息展示) - 课程页(复杂信息展示)- 课程订单生产与支付 - 上线订单生成 2.实际项目开发的技术点: git版本控制 ...
- s11 day100路飞项目逻辑购物车一
Luffy项目 先看练习,如下: 一. 添加购物车和查看 1. url url(r'^shoppingcar/$', shoppingcar.ShoppingCarView.as_view({&quo ...
- 7) 项目准备流程 和 django权限六表
一.项目准备 1. 创建django项目 2. 创建数据库 —— init文件中声明mysql —— settings中配置数据库 import pymysql pymysql.install_as_ ...
- git冲突解决、线上分支合并、luffy项目后台登陆注册页面分析引入
今日内容概要 git冲突解决 线上分支合并 登陆注册页面(引入) 手机号是否存在接口 腾讯云短信申请 内容详细 1.git冲突解决 1.1 多人在同一分支开发,出现冲突 # 先将前端项目也做上传到 g ...
- 【.NET Core项目实战-统一认证平台】第十六章 网关篇-Ocelot集成RPC服务
[.NET Core项目实战-统一认证平台]开篇及目录索引 一.什么是RPC RPC是"远程调用(Remote Procedure Call)"的一个名称的缩写,并不是任何规范化的 ...
- 【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能
[.NET Core项目实战-统一认证平台]开篇及目录索引 一.背景 首先说声抱歉,可能是因为假期综合症(其实就是因为懒哈)的原因,已经很长时间没更新博客了,现在也调整的差不多了,准备还是以每周1-2 ...
- 【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何强制令牌过期的实现,相信大家对IdentityServer4的验证流程有了更深的了解,本篇我将介绍如何使用自定义的授权方 ...
- 【.NET Core项目实战-统一认证平台】第十三章 授权篇-如何强制有效令牌过期
[.NET Core项目实战-统一认证平台]开篇及目录索引 上一篇我介绍了JWT的生成验证及流程内容,相信大家也对JWT非常熟悉了,今天将从一个小众的需求出发,介绍如何强制令牌过期的思路和实现过程. ...
- 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本 ...
随机推荐
- ajax请求工具类
ajax的get和post请求工具类: /** * 公共方法类 * * 使用 变量名=function()定义函数时,如果在变量名前加var,则这个变量变成局部变量 */var Common = ...
- Task/Parallel实现异步多线程
代码: #region Task 异步多线程,Task是基于ThreadPool实现的 { //TestClass testClass = new TestClass(); //Action<o ...
- idea 注释文件和方法注释
类注释: 如下图所示
- tomcat用虚拟目录方式发布项目与manager页面配置
conf/Catalina/localhost:指定项目的配置信息 1.添加:ROOT.xml 听见Context节点: <Context docBase="/usr/local/to ...
- 201621123008 《Java程序设计》第五周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键词:接口,内部类. 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. 1.3 可选:使用常 ...
- 还在手工制作APP规范文档?这款设计神器你不容错过
之前写了一些关于APP原型文档的文章:一款APP的交互文档从撰写到交付 这次想写下关于APP设计规范文档的内容,规范文档这个东西,实际上大部分中小型公司没有这方面的需求,也没精力去制作这样一个系统性的 ...
- 优秀UX设计师的八条黄金法则
与用户保持亲密 成为成功的UX设计师最重要的先决条件之一就是与用户保持紧密的联系,以发现和了解他们的需求和爱好.理想情况下你应该让自己完全地成为产品用户,因为只有这样你才能理解背后的动机.“这样的 ...
- easyui datagrid 分页 客户分页
1.写好json 数据 { "total":21, ...
- httpclient学习(原创)
--httpmime-4.2.5.jar 跟提交Form相关的类 这一块主要post数据的提交.每一条数据同name和content组成.content可能是字节数组或是流.提交这一类(MIME)的 ...
- 构造函数constructor 与析构函数destructor(三)
(1)构造函数初始化列表: 1 class Test{ 2 int i; 3 public: 4 Test(int vi):i(vi){}//这里的从冒号开始,到右大括号结束,这一段是构造函数初始化列 ...