Advertisement
Guest User

Views

a guest
Mar 13th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.67 KB | None | 0 0
  1.  
  2. class UserCreateView(CreateAPIView):
  3.     serializer_class = UserCreateSerializer
  4.  
  5.  
  6. class UserLogoutView(RequestLogViewMixin, APIView):
  7.     permission_classes = (IsAuthenticated,)
  8.     authentication_classes = (SessionAuthentication,)
  9.  
  10.     def get(self, request, *args, **kwargs):
  11.         logout(request)
  12.         return Response({'logout': True}, status=200)
  13.  
  14.  
  15. class UserLoginView(APIView):
  16.     serializer_class = UserLoginSerializer
  17.  
  18.     def post(self, request, *args, **kwargs):
  19.         data = request.data
  20.         serializer = UserLoginSerializer(data=data)
  21.         if serializer.is_valid(raise_exception=True):
  22.             user = authenticate(username=data['phone'], password=data['password'])
  23.             if user is None:
  24.                 return Response({'message': 'Wrong login or password'}, status=403)
  25.             else:
  26.                 self.confirm_login_allowed(user)
  27.             login(request, user)
  28.             new_data = serializer.data
  29.             return Response(new_data, status=200)
  30.         return Response(serializer.errors, status=400)
  31.  
  32.     def confirm_login_allowed(self, user):
  33.         if not user.is_active:
  34.             raise ValidationError("Пользователь не активен")
  35.  
  36.  
  37. class UserInfoView(RequestLogViewMixin, APIView):
  38.     permission_classes = (IsAuthenticated,)
  39.  
  40.     def get(self, request):
  41.         user = request.user
  42.         serializer = UserSerializer(user)
  43.         return Response(serializer.data)
  44.  
  45.     def put(self, request):
  46.         data = request.data
  47.         serializer = UserInfoUpdateSerializer(data=data)
  48.         if serializer.is_valid():
  49.             user = User.objects.get(pk=request.user.pk)
  50.             serializer.update(user, data)
  51.             user.save()
  52.             return Response(serializer.data, status=201)
  53.         return Response(serializer.errors, status=400)
  54.  
  55.  
  56. class ChangePasswordView(RequestLogViewMixin, UpdateAPIView):
  57.     serializer_class = ChangePasswordSerializer
  58.     model = User
  59.     permission_classes = (IsAuthenticated,)
  60.  
  61.     def get_object(self, queryset=None):
  62.         obj = self.request.user
  63.         return obj
  64.  
  65.     def update(self, request, *args, **kwargs):
  66.         self.object = self.get_object()
  67.         serializer = self.get_serializer(data=request.data)
  68.  
  69.         if serializer.is_valid():
  70.  
  71.             if not self.object.check_password(serializer.data.get("old_password")):
  72.                 return Response({"old_password": ["Неправильный пароль"]}, status=400)
  73.  
  74.             new_password = serializer.data.get("new_password")
  75.             new_password_2 = serializer.data.get("new_password_2")
  76.             if new_password != new_password_2:
  77.                 return Response({"old_password": ["Пароли должны совпадать!"]}, status=400)
  78.  
  79.             self.object.set_password(new_password)
  80.             self.object.save()
  81.             return Response("Success.", status=200)
  82.  
  83.         return Response(serializer.errors, status=400)
  84.  
  85.  
  86. class AddressDetailedView(generics.RetrieveUpdateDestroyAPIView):
  87.     permission_classes = (IsAuthenticated, IsOwner)
  88.     serializer_class = AddressSerializer
  89.     lookup_field = 'id'
  90.     queryset = Address.objects.all()
  91.  
  92.  
  93. class RestorePasswordView(APIView):
  94.     serializer_class = SMSRequestSerializer
  95.  
  96.     def post(self, request, *args, **kwargs):
  97.         data = request.data
  98.         serializer = SMSRequestSerializer(data=data)
  99.         if serializer.is_valid(raise_exception=True):
  100.             phone = serializer.data.get('phone')
  101.  
  102.             try:
  103.                 user = User.objects.get(username=phone)
  104.             except User.DoesNotExist:
  105.                 return Response("Пользователь с данным номером не зарегистрирован", status=404)
  106.  
  107.             password = self.generate_code()
  108.             sms_text = urllib_request.quote("Ваш новый пароль на сайте Durex: ")
  109.             sms_text += password
  110.             url = "http://sms.ru/sms/send?api_id=%s&from=%s&to=%s&msg=%s" % (SMS_API_ID, 'Durex', phone, sms_text)
  111.  
  112.             try:
  113.                 res = urlopen(url, timeout=10)
  114.                 print("GET: %s %s\nReply:\n%s" % (res.geturl(), res.msg, res.info()))
  115.                 user.set_password(password)
  116.                 user.save()
  117.             except URLError as errstr:
  118.                 print("smssend[debug]: %s" % url)
  119.                 return Response('sms.ru failed', status=400)
  120.             return Response('Password sent', status=200)
  121.         return Response(serializer.errors, status=400)
  122.  
  123.     def generate_code(self):
  124.         return ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(8))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement