Skip to content

Instantly share code, notes, and snippets.

@coci
Last active March 14, 2020 17:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save coci/8ca69b102d1a9c6195d2c24f7843d314 to your computer and use it in GitHub Desktop.
Save coci/8ca69b102d1a9c6195d2c24f7843d314 to your computer and use it in GitHub Desktop.
import random
import string
from random import randrange
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.authtoken.models import Token
from users.models import CustomUser
from users.serializers import UserInfo
def random_string():
"""
that create random string with 10 character
"""
letter = string.ascii_lowercase
random_string = ''.join(random.choice(letter) for i in range(10))
return random_string
class Authentication(APIView):
permission_classes = ()
def post(self, request):
phone_number = None if not request.POST['phone_number'] else request.POST['phone_number']
if not phone_number:
content = {
'message': 'Phone number is required .'
}
return Response(content, status=status.HTTP_400_BAD_REQUEST)
if CustomUser.objects.filter(phone_number=phone_number).exists():
user = CustomUser.objects.get(phone_number=phone_number)
user.verification_code = randrange(1000, 9999)
user.save()
# TODO: send verification code to user
content = {
'message': 'Sms sent to phone number .',
'type': 'old',
}
return Response(content, status=status.HTTP_200_OK)
else:
create_user = CustomUser()
create_user.username = random_string()
create_user.phone_number = request.POST['phone_number']
create_user.password = ''
create_user.verification_code = str(randrange(1000, 9999))
create_user.save()
# TODO: send verification code to user
content = {
'message': 'Sms sent to phone number .',
'type': 'new',
}
return Response(content, status=status.HTTP_200_OK)
class Verification(APIView):
permission_classes = ()
def post(self, request):
print(request.POST)
phone_number = request.POST['phone_number']
code = request.POST['code']
if not phone_number:
content = {
'message': 'phone number required',
}
return Response(content, status=status.HTTP_400_BAD_REQUEST)
if not code:
content = {
'message': 'Code required',
}
return Response(content, status=status.HTTP_400_BAD_REQUEST)
if CustomUser.objects.filter(phone_number=phone_number).exists():
user = CustomUser.objects.get(phone_number=phone_number)
if code == user.verification_code :
token = Token.objects.get(user=user)
detail = UserInfo(user, many=False).data
content = {
'token': token.key,
'user': detail,
}
return Response(content, status=status.HTTP_200_OK)
else:
content = {
'message': 'Code is not correct',
}
return Response(content, status=status.HTTP_400_BAD_REQUEST)
else:
content = {
'message': 'information is not correct',
}
return Response(content, status=status.HTTP_400_BAD_REQUEST)
class ResendVerificationCode(APIView):
permission_classes = ()
def post(self, request):
phone_number = None if not request.POST['phone_number'] else request.POST['phone_number']
if not phone_number:
content = {
'message': 'Phone number is required .'
}
return Response(content, status=status.HTTP_400_BAD_REQUEST)
user = CustomUser.objects.get(phone_number=phone_number)
user.verification_code = str(randrange(1000, 9999))
user.save()
# TODO: send verification code to user
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment