当前位置:网站首页>User - registration / login

User - registration / login

2022-07-19 05:04:00 du fei

django Write methods in the project
This is login first , If the user does not exist , Just register a user for him , After registering , Let the user login , When logging in, judge whether you have management permission

import redis
from rest_framework.views import APIView
from rest_framework.respoonse import Response

from django.contrib.auth.hashers import check_password
from datetime import datetime
from rest_framework_jwt.utils import jwt_payload_handler, jwt_encode_handler



#  Login view 
class LoginUserAPIView(APIView):
    def post(self, request):
        username = request.data.get("username")
        password = request.data.get("password")
        mobile = request.data.get("mobile")
        sms_code = request.data.get("sms_code")

        r = redis.Redis(host='127.0.0.1', port=6379)

        #  Determine if the user name exists 
        user = User.objects.filter(username=username).first()

        if user:
            #  Determine the password 
            if check_password(password, user.password):
                #  The password is correct , Determine whether to log in as an administrator 
                if user.is_staff and user.is_active:
                    token = self.gen_token(user)

                    #  Change login time 
                    user.last_login = datetime.now()
                    user.save()

                    return Response({
    
                        'code': 200,
                        'msg': ' Login successful ',
                        'user': {
    
                            'id': user.id,
                            'name': user.username,
                            'token': token
                        }
                    })
                else:
                    return Response({
    'code': 206, 'msg': ' No administrator rights '})

            else:
                #  Incorrect password , Reset password 

                validation = self.validate_sms_code(sms_code, mobile, r)
                if validation:
                    #  Complete SMS authentication ,  Start resetting the password 
                    user.set_password(password)
                    user.save()
                    return Response({
    'code': 207, 'msg': ' Password to reset '})
                else:
                    return Response({
    'code': 204, 'msg': ' Reset failed '})
        else:
            #  Registered users 
            if sms_code:
                #  Use verification code , And register 
                validation = self.validate_sms_code(sms_code, mobile, r)
                #  Register user information 
                if validation:
                    User.objects.create_user(username=username, password=password, mobile=mobile)
                    return Response({
    'code': 201, 'msg': ' Registered successfully , Apply for administrator rights '})
                else:
                    return Response({
    'code': 400, 'msg': ' Registration failed '})
            else:
                return Response({
    'code': 400, 'msg': ' Please enter the verification code '})

    @staticmethod
    def gen_token(user):
        #  Generate payload  Load information 
        payload = jwt_payload_handler(user)
        #  Generate token
        # token = jwt_decode_handler(payload)
        token = jwt_encode_handler(payload)
        return token

    @staticmethod
    def validate_sms_code(sms_code, mobile, r):
        stared_code = r.get(mobile)
        if stared_code and stared_code.decode() == sms_code:
            return True
        else:
            return False
原网站

版权声明
本文为[du fei]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/200/202207170502258067.html