django-restful:serializers学习记录 和短信登录认证(二)

如何发送短信 使用的是云片网的短信服务
我们自己来写接口

import requests

class YunPian(object):

    def __init__(self,api_key):
        self.api_key = api_key
        self.single_send_url = 'https://sms.yunpian.com/v2/sms/single_send.json'

    def send_sms(self,code,mobile):
        parmas={
            "apikey":self.api_key,
            'mobile':mobile,
            'text':'把云片网的模版的内容复制过来,否则不能发送'
        }

        response = requests.post(self.single_send_url,data=parmas)
        import json
        re_dict = json.loads(response.text)
        return re_dict

if __name__ == '__main__':
    yun_pian = YunPian("自己的api_key")
    yun_pian.send_sms('2018',"电话号码")

记得需要在 云片网 把自己的外网ip加进去 才能发送成功
这个到是很简单 就可以 发送了

然后 就是 用户注册 以后 有两种 形式 一种是跳转到登录页面 让他自己登录
另一种就是帮他登录 跳转到首页
第一种没什么难度 来说说第二种
帮他登录 就需要 name 和token 因为 我们使用的jwt 的token 验证
所以我们需要在后端 把token给他传过来 让他登录

from rest_framework_jwt.serializers import jwt_encode_handler,jwt_payload_handler

class UserViewset(CreateModelMixin,viewsets.GenericViewSet):
    """
    用户
    """
    serializer_class = UserRegSerializer
    queryset = User.objects.all()

    def create(self, request, *args, **kwargs):    
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        # self.perform_create(serializer)
        user = self.perform_create(serializer)

        #赋值给一个列表
        re_dict = serializer.data
        #获取user用户的  具体的不太了解
        payload = jwt_payload_handler(user)
        #加密
        re_dict['token']= jwt_encode_handler(payload)
        re_dict['name']= user.name if user.name else user.username

        headers = self.get_success_headers(serializer.data)
        return Response(re_dict, status=status.HTTP_201_CREATED, headers=headers)


    def perform_create(self, serializer):
        return serializer.save()

上面 重写了 CreateModelMixin 的create 和 perform_create方法
在create 中 使用 jwt_payload_handler(user) 获取到一些user中 拿来 加密的内容
下面就是 jwt_payload_handler(user) 返回的一些东西

payload = {
        'user_id': user.pk,
        'username': username,
        'exp': datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA
    }

然后jwt_encode_handler(payload) 进行加密 添加一个 re_dict['token‘]返回给前端
perform_create 中他并没有返回serializer 回来 他返回的是 serializer 里面的model的对象 User

你可能感兴趣的:(django-restful:serializers学习记录 和短信登录认证(二))