api.py 2.27 KB
from django.core.mail import send_mail
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.exceptions import ValidationError
from flashcards.serializers import *
class UserDetail(APIView):
def patch(self, request, format=None):
"""
Updates a user's password after they enter a valid old password.
TODO: email verification
"""
if 'old_password' not in request.data:
raise ValidationError('Old password is required')
if 'new_password' not in request.data:
raise ValidationError('New password is required')
if not request.data['new_password']:
raise ValidationError('Password cannot be blank')
currentuser = request.user
if not currentuser.check_password(request.data['old_password']):
raise ValidationError('Invalid old password')
send_mail("Please verify your Flashy account",
body % currentuser.confirmation_key,
"noreply@flashy.cards",
[currentuser.email])
currentuser.confirm_email( currentuser.confirmation_key )
if currentuser.isconfirmed
currentuser.set_password(request.data['new_password'])
currentuser.save()
return Response(status=status.HTTP_204_NO_CONTENT)
def get(self, request, format=None):
serializer = UserSerializer(request.user)
return Response(serializer.data)
def post(self, request, format=None):
if 'email' not in request.data:
raise ValidationError('Email is required')
if 'password' not in request.data:
raise ValidationError('Password is required')
email = request.data['email']
user = User.objects.create_user(email)
body = '''
Visit the following link to confirm your email address:
http://flashy.cards/app/verify_email/%s
If you did not register for Flashy, no action is required.
'''
send_mail("Please verify your Flashy account",
body % user.confirmation_key,
"noreply@flashy.cards",
[user.email])
return Response(UserSerializer(User).data)