登录视图yuuuuu

class LoginAPIView(APIView):
    def post(self,request):
        # 接收前端的数据
        username=request.data.get("name")
        password=request.data.get("pass")
        print(",,,,",username,password)
        #         2.验证用户是否存在
        user=User.objects.filter(models.Q(username=username)|models.Q(mobile=username)).first()
        print("查询集都有那些方法",dir(user))
        if not user:
            return Response({
                "code":400,
                "msg":"用户名或密码错误"
            })
        #         3.验证用户名密码是否正确
        if password==user.password:
            # 会话保持  使用jwt做会话保持
            token=self.gen_token(user)

            return Response({
                "code":200,
                "msg":"登录成功",
                "username":user.username,
                "token":token
            })
        return Response({
            "code":400,
            "msg":"用户名或密码错误"
        })
    @staticmethod
    def gen_token(user):
        """
        :param user: 用户对象
        :return:  jwt token
        """
        # 组织pay.load数据
        payload ={
            "uid":user.id,
            "username":user.username,
            "exp":time.time() + 7*24*3600
        }
        # 编码生成token
        token=jwt.encode(payload,settings.SECRET_KEY,algorithm="HS256")
        return token
import jwt
from django.conf import settings
from rest_framework.response import Response
from myapp.models import User


# 登录的校验函数(高阶函数)
def check_login(func):
    def wrapper(self,request,*args,**kwargs):
        #         校验用户有没有登录
        # 从请求头中获取token
        token = request.headers.get("Authorization")
    #         解码token 获取用户的信息   ******待优化
        try:
            payload = jwt.decode(token ,key=settings.SECRET_KEY ,algorithms=["HS256"])
        except Exception as e:
            print("解码token错误" ,e.args)
            return Response({
            "code" :401,
            "msg" :"用户未认证"
        })
    #         3.获取用户的信息,并添加收藏
        print("解码出的用户信息" ,payload)
        request.uid = payload.get("uid")
        request.user = User.objects.filter(id=request.uid).first()
        #         4.执行真正的视图类的函数,及装饰的函数
        return func(self,request,*args,**kwargs)
    return wrapper

编辑json数据

def org_json(queryset):
    """

    :param queryset: 查询集
    :return: 字典列表
    """
    temp = []
    for i in queryset:
        temp_dict={
            "id":i.id,
            "sku_name":i.sku_name,
            "price":i.price,
            "selling_price":i.selling_price,
            "img":i.img,
            "title":i.title,
            "instruction":i.instruction,
            "count":i.count,
            "stock":i.stock,
            "cate":i.cate.id,
            "online":i.online
        }
        temp.append(temp_dict)

    return temp

验证码视图

# 图片验证码的视图
class ImageCodeAPIView(APIView):
    def get(self,request,uuid):
        # 生成一个随机码
        code ="".join(random.sample(string.ascii_letters +string.digits,4))
        # 实例化一个图片验证码的对象
        img=ImageCaptcha()
        #  字节 io对象
        imgage_code =img.generate(code)
        # 验证码存入redis
        redis_conn=redis.Redis(host="localhost",port=6379)
        redis_conn.set(uuid,code,ex=5*60)


        #         返回响应
        return HttpResponse(imgage_code,content_type="image/png")
    def post(self,request,uuid):
        # 获取前端输入的验证码
        image_code=request.data.get("imageCode")
        #与redis中 对比验证码
        redis_conn=redis.Redis(host="localhost",port=6379)
        # 取出
        stored_code=redis_conn.get(uuid)
        # 验证码已过期
        if not stored_code:
            return Response({
                "code":400,
                "msg":"验证码已过期"
            })
        # 验证码还未过期,解码与前端对比
        if stored_code.decode().lower() == image_code.lower():
            return Response({
                "code":200,
                "msg":"验证成功"
            })
        return Response({
            "code":400,
            "msg":"验证码错误"
        })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值