IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 用户认证—历史记录与收藏 -> 正文阅读

[Python知识库]用户认证—历史记录与收藏

用户认证

JWT_token 中的载体payload:

payload = {    
    'id': user.id,    
    'username': user.username,    
    'mobile': user.mobile    
    # 'exp': datetime.datetime.now() + datetime.timedelta(seconds=300)
}

身份认证,有一些功能(加入购物车)必须是用户登录成功以后才能操作。

自定义中间件
在根目录创建middleware
创建middleware.py文件

from django.utils.deprecation import MiddlewareMixin
import jwt
from day2 import settings
# 自定义中间件
class CheckUserMiddleware(MiddlewareMixin):
    def process_request(self,request):
        # 注意:以后需要的身份认证的请求,都将身份认证信息(jwt)添加到请求头中
        # 请求头的解析方式
        # 1.提取请求头中的token
        token=request.headers.get('token')
        # 2.判断token 是否存在
        # 给request增加一个字段user_info,保存用户信息
        if not token:
            request.user_info=None
        else:
            # 3.token存在,解析token中的内容
            payload=jwt.decode(token,key=settings.SECRET_KEY,algorithms='HS256')
            # 4.保存解析的用户信息
            request.user_info=payload

API设计

功能添加历史记录
请求方式POST
请求地址/goods/oneGood/history/
POST参数productID: 商品id
headers参数token:jwt信息
成功响应{‘msg’:‘添加历史记录成功!’,‘code’:200}
失败响应{‘msg’:‘添加历史记录失败!’,‘code’:204}
from user.models import User
import redis
class History(APIView):
    def post(self,request):
        try:
            # 1.判断用户是否登录
            user=User.objects.get(id=request.user_info.get('id'))
        except Exception as e:
            print(e)
            return Response({'msg':'用户不存在或未登录','code':'204'})
        # 2.获取商品id
        good_id = request.data.get('productID')
        # 3.判断商品是否存在
        try:
            good_data = Goods.objects.get(id=good_id)
        except Exception as e:
            print(e)
            return Response({'msg': '此商品不存在', 'code': 204})
            # 4.添加历史记录 history_用户名:[1,7,2,3]
        history_key = f'history_{user.username}'
        r = redis.Redis(host='localhost', port=6379, db=0)
        r.lrem(history_key, 0, good_id)
        r.lpush(history_key, good_id)
        r.ltrim(history_key, 0, 4)
        r.close()
        return Response({'msg': '历史记录添加成功', 'code': 200})

收藏

模型类

收藏表字段:id 商品(外键) 用户(外键)

from user.models import User
class GoodsCollect(models.Model):
    user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='用户')
    goods=models.ForeignKey(Goods,on_delete=models.CASCADE,verbose_name='商品')
    class Meta:
        verbose_name_plural='收藏表'
        db_table='good_collect'
    def __str__(self):
        return f'{self.user.username}:{self.goods.sku_name}'

API设计

功能添加收藏
请求方式POST
请求地址/goods/user/collection/
POST参数productID: 商品id
headers参数token:jwt信息
成功响应{‘msg’:‘收藏成功!’,‘code’:200}
失败响应{‘msg’:‘添加收藏失败!’,‘code’:204}

类试图

class Collection(APIView):
    def post(self,request):
        try:
            # 1.判断用户是否登录
            user=User.objects.get(id=request.user_info.get('id'))
        except Exception as e:
            print(e)
            return Response({'msg':'用户不存在或未登录','code':204})
         # 2.判断收藏是否存在
        good_id = request.data.get('productID')
        collect_data=GoodsCollect.objects.filter(user=user,goods_id=good_id)
        if collect_data.count()>0:
            return Response({'msg':'收藏已存在','code':204})
        #3.收藏不存在,添加收藏
        try:
            GoodsCollect.objects.create(user=user,goods_id=good_id)
        except Exception as e:
            print(e)
            return Response({'msg': '添加收藏失败', 'code': 204})
        return Response({'msg': '添加收藏成功', 'code': 200})

API设计

功能查看收藏
请求方式POST
请求地址/goods/user/collection/
headers参数token:jwt信息
成功响应{‘code’:200,
‘collectList’:[

{
“id”:i.good.id,
“sku_name”:i.good.sku_name,
“title”:i.good.title,
“price”:i.good.price,
“selling_price”:i.good.selling_price,
“img”:i.good.img,
}
,…
]}
失败响应{‘msg’:‘添加收藏失败!’,‘code’:204}
   def get(self,request):
        try:
            # 1.判断用户是否登录
            user = User.objects.get(id=request.user_info.get('id'))
        except Exception as e:
            print(e)
            return Response({'msg': '用户不存在或未登录', 'code': 204})
        collect_data=GoodsCollect.objects.filter(user=user)
        if collect_data.count()==0:
            return Response({'msg': '用户没有任何收藏', 'code': 204})
        #3.处理收藏的数据
        collect_list = []
        for i in collect_data:
            collect_list.append({
                'id':i.goods.id,
                'sku_name': i.goods.sku_name,
                'title': i.goods.title,
                'price': i.goods.price,
                'selling_price': i.goods.selling_price,
                'img': i.goods.img,
            })
        #4.返回结果
        return Response({'collectList': collect_list, 'code': 200})

API设计

功能删除收藏
请求方式DELETE
请求地址/goods/user/collection/
headers参数token:jwt信息
成功响应{‘code’:200,
‘msg’:‘删除收藏成功’}
失败响应{‘msg’:‘删除收藏失败!’,‘code’:204}
    def delete(self,request):
        try:
            # 1.判断用户是否登录
            user = User.objects.get(id=request.user_info.get('id'))
        except Exception as e:
            print(e)
            return Response({'msg': '用户不存在或未登录', 'code': 204})
        # 2.根据商品id 删除收藏
        good_id = request.data.get('productID')
        try:
            GoodsCollect.objects.get(user=user,goods_id=good_id).delete()
        except Exception as e:
            print(e)
            return Response({'msg': '删除收藏失败', 'code': 204})
        return Response({'msg': '删除收藏成功', 'code': 200})

路由

from django.urls import path,include
from . import views
urlpatterns = [
    path('oneGood/history/', views.History.as_view()),
    path('user/collection/', views.Collection.as_view()),
]
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:47:30  更:2022-07-20 18:49:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:08:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码