【无标题】

登录/注册,同步验证码,异步验证码

from django.shortcuts import render

# Create your views here.
from rest_framework.views import  APIView
from rest_framework.response import Response
from users.models import UserModel
from users.serializers import UserModelSet
from django.contrib.auth.hashers import check_password,make_password
from rest_framework_jwt.utils import jwt_encode_handler
from django.utils import timezone
import time
# 加密解密:


# 发送验证码:
# from users.utils import send_message
from celery_tasks.sms_code.tasks import send_message
import random
import json

# 加密token:
# from shangcheng import settings
# import jwt
#
# def ja_token(user):
#     pal = {
#         'user':user.username
#     }
#     token = jwt.encode(payload=pal,key=settings.SECRET_KEY,algorithm='HS256')
#     return token





class UserView(APIView):
    def post(self,request):
# #         获取前端的数据:
#         username = request.data.get('username')
#         password = request.data.get('password')
#         mobile = request.data.get('phone')
#
# #         判断用户是否存在:
#         try:
#             user = UserModel.objects.get(username=username)
#         #     如果存就是第二次登录,判断密码是否正确
#             if check_password(password,user.password):
#                 # 进行他token加密:
#                 pal= {
#                     'username':user.username
#                 }
#                 # 进行加密:
#                 token = jwt_encode_handler(pal)
#                 return Response({'msg':'登录成功','code':200,'data':token,'user':username})
#             else:
#                 return Response({'msg':'登录失败!','code':404})
#         except Exception as e:
#             print(e)
# #             将数据添加到数据库中:
# #             给密码加密
#             pwd = make_password(password)
#             user = UserModel.objects.create(
#                 username=username,
#                 password=pwd,
#                 mobile=mobile,
#             )
#             pal = {
#                 'username': user.username,
#             }
#             # 进行加密:
#             token = jwt_encode_handler(pal)
#             return Response({'msg':'登录成功','code':200,'data':token,'user':user.username})


#         1.获取前端传递的数据:
        username = request.data.get('username')
        password = request.data.get('password')
        mobile = request.data.get('phone')
        # print(mobile)
#       获取验证码:
        smsCode = request.data.get('smsCode')
#         连接数据库:
        r = redis.Redis(host='localhost',port=6379,db=5)
#         获取出来:
        roal_msm_code=r.get('code_%s' %mobile)
#         判断验证码:
        if not roal_msm_code:
            return Response({'msg':'短信验证码过期!','code':404})
        if roal_msm_code.decode() != smsCode:
            return Response({'msg':'验证验证码失败!','code':404})
#         判断数据是否齐全:
        if not all([username,password,mobile]):
            return Response({'msg':'数据不齐全!','code':404})

#        判断用户是否存在:
        try:
            user=UserModel.objects.get(username=username)
                #             判断密码是否正确:
            print(">>>我是第二次")
            # print(user)
                # 生成token
            pal = {
                    'user':user.username
            }
            token = jwt_encode_handler(pal)
            print(token)
            if check_password(password, user.password):
                user.last_login = timezone.now()
                user.save()
                return Response({'msg': '登录成功', 'code': 200,
                                'data':{
                                    'user': user.username,
                                    'token': token,
                                }})
        except Exception as e:
            print(e)
            ja_pwd = make_password(password)
            user=UserModel.objects.create(
                username=username,
                password=ja_pwd,
                phone=mobile,
            )
            print(mobile)
            # 注册时,是日增
            # 获取出注册时的时间:
            pal = {
                'user': user.username
            }
            token = jwt_encode_handler(pal)
            return Response({'msg':'注册并登录成功','code':200,
                             'data': {
                                 'user': user.username,
                                 'token': token,
                             }})
        return Response({'msg':'ok','code':200})

# 退出:
class TuiView(APIView):
    def get(self,request):
#         获取前端传递过来的数据:
#         username = request.query_params.get('username')
# #         找到后端数据:
#         try:
#             UserModel.objects.get(username=username).delete()
#         except Exception as e:
#             print(e)
#             return Response({'msg':'退出失败!','code':404})
        return Response({'msg':'退出成功','code':200})

import redis


class SendMSCode(APIView):
    def get(self,request):
#         获取前端手机号:
        mobile = request.query_params.get('mobile')
        # print(mobile)
#         生成验证码:
        code = random.randint(000000,999999)
#         判断手机号是否获取到:
        if mobile:
#             传递形参:
            resp = send_message.delay(mobile,code)
            if resp:
                r = redis.Redis(host='localhost', port=6379, db=5)
                r.setex('code_%s' % mobile, 600, code)
                r.close()
                return Response({'msg': '发送验证码成功', 'code': 200, 'wer': code})
            else:
                return Response({'msg':'发送验证码失败!','code':404})


#         将标识获取到判断是否是发送成功:
#         to_biao = json.loads(resp)['statusCode']
#         if to_biao == '000000' or to_biao == '112310':
            # 将验证码添加到redis数据库中,便于下次认证:
        #     r = redis.Redis(host='localhost',port=6379,db=5)
        #     r.setex('code_%s'%mobile,600,code)
        #     r.close()
        #     return Response({'msg':'发送验证码成功','code':200,'wer':code})
        # else:
        #     return Response({'msg':'发送验证码失败!','code':404})

import os
from celery import Celery
from django.conf import settings

# 关联celery和django项目,需要加载django的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE','shangcheng.settings')

app = Celery('mycelery')
app.config_from_object('celery_tasks.config')

# 自动发现整个项目中所有的任务:
app.autodiscover_tasks(settings.INSTALLED_APPS)

# 消息队列:存放的是等待执行的任务
broker_url = 'redis://127.0.0.1:6379/15'

# 存放结果:异步发送短信验证码。
result_backend = 'redis://127.0.0.1:6379/14'

from ronglian_sms_sdk import SmsSDK
import random
from celery_tasks.main import app

accId = '8a216da881ad975401821a381f861a19'
accToken = '96260c8b93e54ec188b4a3522283038f'
appId = '8a216da881ad975401821a3820631a20'

@app.task(name="sms_code")
def send_message(mobile,code):
    sdk = SmsSDK(accId, accToken, appId)
    tid = '1'
    # 验证码:
    # code = random.randint(000000,999999)
    datas = (code,)
    resp = sdk.sendMessage(tid, mobile, datas)
    # print(resp)
    return resp


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值