Created
November 7, 2016 00:03
-
-
Save levivm/f9b7cbd2c450ab80aaf959f6a578165e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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