Skip to content

Instantly share code, notes, and snippets.

@levivm
Created November 7, 2016 00:03
Show Gist options
  • Save levivm/f9b7cbd2c450ab80aaf959f6a578165e to your computer and use it in GitHub Desktop.
Save levivm/f9b7cbd2c450ab80aaf959f6a578165e to your computer and use it in GitHub Desktop.
class SignUpMixin(object):
"""
Mixin for the common SignUp methods
"""
permissions = []
profile_serializer = None
group_name = None
def create_token(self, user):
return Token.objects.create(user=user)
def get_profile_data(self, profile):
serializer = self.profile_serializer(profile)
return serializer.data
def assign_group(self, user):
group = Group.objects.get(name=self.group_name)
user.groups.add(group)
def assign_permissions(self, user, profile):
for permission in self.permissions:
assign_perm(permission, user, profile)
class SignUpStudentView(SignUpMixin, GenericAPIView):
"""
Class to register students
"""
serializer_class = SignUpStudentSerializer
permissions = ['students.change_student']
profile_serializer = StudentsSerializer
group_name = 'Students'
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = self.create_user(serializer)
profile = self.create_profile(user=user)
profile_data = self.get_profile_data(profile)
self.assign_group(user)
self.assign_permissions(user, profile)
self.confirm_email_handler(user)
token = self.create_token(user)
#self.referral_handler(referred_id=profile.id)
task = SendEmailSignUpCouponTask()
task.delay(student_id=profile.id)
return Response({'user': profile_data, 'token': token.key})
def create_user(self, serializer):
return User.objects.create_user(
username=serializer.validated_data['username'],
email=serializer.validated_data['email'],
password=serializer.validated_data['password1'],
first_name=serializer.validated_data['first_name'],
last_name=serializer.validated_data['last_name'],
)
def create_profile(self, user):
return Student.objects.create(user=user)
def confirm_email_handler(self, user):
confirm_email_token = ConfirmEmailToken.objects.create(user=user, email=user.email)
task = SendEmailConfirmEmailTask()
task.delay(confirm_email_token.id)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment