Advertisement
Guest User

Untitled

a guest
Sep 4th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. # models.py
  2. class SmsCode(v1_common_models.AbstractDefaultModel):
  3. def __init__(self, *args, **kwargs):
  4. super(SmsCode, self).__init__(*args, **kwargs)
  5.  
  6. phone = PhoneNumberField(
  7. verbose_name='phone')
  8.  
  9. sms = models.IntegerField(
  10. verbose_name='sms',
  11. blank=True,
  12. null=True)
  13.  
  14. inspection_count = models.IntegerField(
  15. verbose_name='inspection',
  16. default=0,
  17. null=True)
  18.  
  19. country = models.ForeignKey(
  20. v1_settings_models.Country,
  21. verbose_name='country',
  22. blank=False,
  23. null=False,
  24. on_delete=models.CASCADE)
  25.  
  26. def save(self, *args, **kwargs):
  27.  
  28. if not self.sms:
  29. self.sms = v1_common_utils.generator_random(1000, 9999)
  30.  
  31. super(SmsCode, self).save(*args, **kwargs)
  32.  
  33. def __str__(self):
  34. return '{id}'.format(id=self.id)
  35.  
  36. class Meta:
  37. verbose_name = 'sms code'
  38. verbose_name_plural = 'sms codes'
  39.  
  40. # --------------------------
  41. # views.py
  42. class DeviceCreateAPIView(CreateAPIView):
  43. queryset = Device.objects.all()
  44. serializer_class = DeviceCreateSerializer
  45. permission_classes = [AllowAny]
  46.  
  47. # --------------------------
  48. # serializers.py
  49. class DeviceCreateSerializer(serializers.ModelSerializer):
  50. sms = serializers.CharField(required=True, max_length=6)
  51. sms_id = serializers.CharField(required=True, max_length=50)
  52. installation_id = serializers.CharField(required=True, max_length=50)
  53.  
  54. class Meta:
  55. model = Device
  56. fields = [
  57. 'sms',
  58. 'sms_id',
  59. 'installation_id',
  60. ]
  61.  
  62. def validate_sms_id(self, sms_id):
  63. """
  64. Check sms_id does exist.
  65. """
  66.  
  67. try:
  68. sms_obj = v1_reg_models.SmsCode.active_objects.get(id=sms_id)
  69. except v1_reg_models.SmsCode.DoesNotExist:
  70. raise serializers.ValidationError('SMS does not exist.')
  71. except Exception as e:
  72. raise serializers.ValidationError(e)
  73.  
  74. if sms_obj.inspection_count > 3:
  75. raise serializers.ValidationError('Attempts are exhausted.')
  76.  
  77. return sms_obj
  78.  
  79. def validate(self, data):
  80. """
  81. Check sms.
  82. """
  83. sms_obj = data['sms_id']
  84. data['phone'] = sms_obj.country
  85. data['country'] = sms_obj.country
  86.  
  87.  
  88.  
  89. if data['sms'] != '0000': # TODO: sms_queryset.sms != data['sms']
  90. sms_obj.inspection_count += 1
  91. sms_obj.save()
  92. raise serializers.ValidationError('Incorrect sms')
  93.  
  94. return data
  95.  
  96. def create(self, validated_data):
  97.  
  98. # check profile valid
  99. try:
  100. profile_qs = Profile.active_objects.get(phone=validated_data['phone'])
  101. except Profile.DoesNotExist:
  102. profile_qs = Profile.active_objects.create(phone=validated_data['phone'], country=validated_data['country'])
  103.  
  104. try:
  105. device, obj = Device.objects.get_or_create(
  106. profile=profile_qs,
  107. installation_id=validated_data['installation_id'])
  108. except Exception as e:
  109. raise serializers.ValidationError(e)
  110.  
  111. return device
  112.  
  113. def to_representation(self, device):
  114. # TODO: remove is_superuser
  115.  
  116. password = v1_common_utils.generator_hex(50)
  117.  
  118. device.set_password(password)
  119. device.is_superuser = True
  120. device.is_staff = True
  121. device.save()
  122.  
  123. return {
  124. 'profile': device.profile_id,
  125. 'username': device.username,
  126. 'password': password,
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement