def image_validator(file: InMemoryUploadedFile) -> InMemoryUploadedFile: extension = file.name[file.name.rindex("."):] if extension not in ALLOWED_EXTENSIONS: raise validators.ValidationError(EXTENSION_ERROR_MESSAGE) if file.size > MAX_IMAGE_SIZE: raise validators.ValidationError(MAX_IMAGE_SIZE_ERROR_MESSAGE) return file
def validate(self, data): user_id = data.get('id') code = self.initial_data.get('code') password = data.get('password') password_confirmation = self.initial_data.get('password_confirmation') user = User.objects.filter(id=user_id) if not user.exists(): raise validators.ValidationError('User doesn\'t exist') if password != password_confirmation: raise validators.ValidationError('Passwords do not match') user = user.get() if not user_activation_token.check_token(user=user, token=code): raise validators.ValidationError('Confirmation code is wrong') try: # validate the password and catch the exception password_validators.validate_password(password=password, user=user) # the exception raised here is different than serializers.ValidationError except exceptions.ValidationError as e: raise validators.ValidationError(e.message) return super().validate(data)
def validate(self, data): email = data.get("email") password = data.get("password") password_new = data.get("password_new") password_confirm = data.get("password_confirm") try: user = User.objects.get(email=email) except User.DoesNotExist: raise validators.ValidationError( "Invalid e-mail/password combination.") if not user.check_password(password): raise validators.ValidationError( "Invalid e-mail/password combination.") if password_new != password_confirm: raise validators.ValidationError("Passwords do not match.") try: validate_password(password=password_new, user=user) except exceptions.ValidationError: raise data["user"] = user return data
def phone_number_validator(phone_number): try: phone_number = str(phone_number) except ValueError: raise validators.ValidationError('Invalid Input') if phone_number.isdigit() is False: raise validators.ValidationError( 'Phone numbers can only contain numbers') if not (10 <= len(phone_number) <= 11): raise validators.ValidationError( 'Length of phone number must be either 10 or 11')
def validate(self, data): user_id = data.get('user_id') code = data.get('code') user = User.objects.filter(id=user_id) if not user.exists(): raise validators.ValidationError('User doesn\'t exist') user = user.get() if not user_activation_token.check_token(user=user, token=code): raise validators.ValidationError('Confirmation code is wrong') return super().validate(data)
def validate(self, data): # TODO: Clean-up up errors. request = self.context.get("request") which = data.get("which") into = data.get("into") merging = data.get("merging") Model = getattr(request.user, which).model errors = {} try: into_obj = Model.objects.get(name=into) except Model.DoesNotExist: errors["into"] = f"Item '{into}' does not exist." merging_objs = [] errors["merging"] = [] for name in merging: try: merging_obj = Model.objects.get(name=name) except Model.DoesNotExist: errors["merging"].append(f"Item '{name}' does not exist.") else: merging_objs.append(merging_obj) if any(errors.values()): raise validators.ValidationError(errors) objs = {"into": into_obj, "merging": merging_objs} return objs
def validate_body_url_id(url_values, data_values): try: for i in range(len(url_values)): if url_values and int(url_values[i]) != int(data_values[i]): raise Exception except Exception as e: raise validators.ValidationError(e, "id in URL and Request Body must match and be integers")
def search(self, request, *args, **kwargs): return Response({"detail": "接口开发ing....", "code": "1001"}, status=400) req_data = request.query_params params = { "clienttype": 1, "highlight": 1, "key": req_data.get('key'), "page": req_data.get('page'), "timestamp": "1554707021", "sign": "828152926614276651646" } resp = requests.get(url='http://search.pandown.cn/api/query', params=params) if resp.status_code == 200: try: data = resp.json() for item in data['data']: item['list'] = item.get('list').split("\n") if item.get( 'list') else [] item['surl'] = "https://pan.baidu.com/s/" + item['id'] item['needpassword'] = True if item.get('password', False) else False if not request.user.is_superuser and item['password']: item.pop('password') return Response(data) except Exception as e: data = {"msg": "数据源解析失败(%s)" % str(e), "code": 1001} return Response(data) else: raise validators.ValidationError(("1001", "数据源失效"))
def validate(self, attrs): if attrs['password'] != attrs['password2']: raise validators.ValidationError('Passwords must match') # TODO : check if it is correct ot do queries in validate! # if User.objects.filter(username=attrs['username']).exists(): # raise validators.ValidationError('User already exists') return attrs
def validate(self, attrs): self.user = authenticate(None, username=attrs.get('username', None), password=attrs.get('password', None)) if not self.user: raise validators.ValidationError('Invalid') return attrs
def validate_email(self, email): email = self.initial_data.get('email') user = User.objects.filter(email=email) if not user.exists(): raise validators.ValidationError( 'User with current email doesn\'t exist') return super().validate(email)
def validate(self, attrs): user_id = attrs.get('user_id') code = attrs.get('code') user = User.objects.filter(id=user_id) if not user.exists(): raise validators.ValidationError('User doesn\'t exist') user = user.get() if not user.has_perm(perm='user.validate_email', obj=user): raise validators.ValidationError( 'User doesn\'t have permissions to confirm address') if not user_activation_token.check_token(user=user, token=code): raise validators.ValidationError('Confirmation code is wrong') return super().validate(attrs)
def perform_update(self, serializer): shopCar = addCarModel.objects.filter(id=serializer.instance.pk).first() goods = serializer.instance.goods c = shopCar.nums - serializer.initial_data['nums'] shopCar.nums = serializer.initial_data['nums'] goods.goods_num += c if goods.goods_num <= 0: raise validators.ValidationError("商品不足") shopCar.save() goods.save()
def __call__(self, value, serializer_field): # Determine the underlying model field name. This may not be the # same as the serializer field name if `source=<>` is set. field_name = serializer_field.source_attrs[-1] # Determine the existing instance, if this is an update operation. instance = getattr(serializer_field.parent, 'instance', None) queryset = self.queryset queryset = self.filter_queryset(value, queryset, field_name) if validators.qs_exists(queryset) and not self.include_current_instance(instance, serializer_field, value): raise validators.ValidationError(self.message, code='unique')
def get_object(self): user = super().get_object() if self.request.method == "POST": body_unicode = self.request.body.decode('utf-8') token = json.loads(body_unicode).get("token", None) else: token = self.request.query_params.get("token", None) token_generator = PasswordResetTokenGenerator() if not token_generator.check_token(user, token): raise validators.ValidationError("Invalid one time password") return user
def post(self, request): ref = request.data.get('ref') event = request.data.get('event') errors = {} if not ref: errors['ref'] = 'ref values is required' if not event: errors['event'] = 'event values is required' try: event_obj = Event.objects.get(pk=event) if len(errors) > 0: raise validators.ValidationError(errors) result = verify_transaction(ref) if result['status']: Notification.objects.create( user=request.user, message='You have successfully subscribed to {}'.format(event_obj.title) ) MyTicket.objects.create(user=request.user, event=event_obj) return Response({'message': 'payment was successful'}) return Response({'message': 'payment was not successful'}, status=status.HTTP_400_BAD_REQUEST) except Event.DoesNotExist: raise validators.ValidationError({'event': 'event with the id does not exist'})
def perform_update(self, serializer): # 获取购物车 shopCart = ShoppingCart.objects.get(pk=serializer.instance.pk) # 获取到这一次提交的商品对象 goods = serializer.instance.goods # 差 = 购物中这个商品的数量-提交的数量 c = shopCart.nums - serializer.initial_data['nums'] # 更新购物车 (nums) shopCart.nums = serializer.initial_data['nums'] # 更新购物车中数量 # 修改商品的数量 goods.goods_num += c if goods.goods_num < 0: raise validators.ValidationError('商品不足') # 保存购物车 shopCart.save() # 保存商品 goods.save()
def save(self, *args, **kwargs): try: self.clean_fields() except ValidationError as e: raise validators.ValidationError( {field: value for field, value in e.message_dict.items()}) if not self.id: bytes_like_object = self.file.read() self.hash = generate_hash(bytes_like_object) self.directory = self.hash[:2] self.original_name = self.file.name try: self.validate_unique() except ValidationError: raise UniqueConstraintError super().save(*args, **kwargs)
def perform_create(self, serializer): #添加购物车 user = self.request.user goods_id = serializer.data['goods'] #提交购物车中shangpin shopCardGoods = ShoppingCart.objects.filter(user=user, goods_id=goods_id).first() #仓库中商品 gs = Goods.objects.filter(id=goods_id).first() if gs.goods_num >= serializer.data['nums']: gs.goods_num -= serializer.data['nums'] gs.save() if shopCardGoods: shopCardGoods.nums += serializer.data['nums'] shopCardGoods.save() else: ShoppingCart.objects.create(goods_id=goods_id, nums=serializer.data['nums'], user=user) else: raise validators.ValidationError('商品不足')
def perform_create(self, serializer): goods_id = serializer.data["goods"] user = self.request.user #如果不加上first()就是Querylist类型 shoppingCar = addCarModel.objects.filter(user=user, goods_id=goods_id).first() gs = Goods.objects.filter(id=goods_id).first() if gs.goods_num >= serializer.data["nums"]: gs.goods_num -= serializer.data["nums"] gs.save() if shoppingCar: shoppingCar.nums += serializer.data["nums"] shoppingCar.save() else: addCarModel.objects.create(user=user, goods_id=goods_id, nums=serializer.data["nums"]) else: raise validators.ValidationError("商品数量不足")
def validate(self, data): """Метод для валидации. Вызывается при создании и обновлении.""" if self.context['view'].action == 'create': status = data.get('status', 'DRAFT') else: status = data.get('status') open_status = (AdvertisementStatusChoices.OPEN, AdvertisementStatusChoices.DRAFT) if status not in open_status: # в результате выполнения запроса количество открытых объявлений не изменится return data user = self.context['request'].user active_items = user.advertisements.filter(status__in=open_status) if len(active_items) >= 10: error_msg = f"Для пользователя {user} достигнуто максимальное число открытых объявлений: 10. " \ f"Чтобы разблокировать возможность создания новых объявлений необходимо перевести минимум " \ f"одно объявление в статус {AdvertisementStatusChoices.CLOSED}" raise validators.ValidationError(error_msg) return data
def validate_iban(self, value): if not value: raise validators.ValidationError('IBAN is required.') return value
def validate_phone(phone): if not REGEX_PHONE.match(phone): raise validators.ValidationError('手机号不合法')
def validate(self, attrs): attrs = super().validate(attrs) if User.objects.filter(email=attrs["email"]).exists(): raise validators.ValidationError({"email": "Email already in use"}) return attrs
def validate(self, attrs): attrs = super().validate(attrs) if attrs["password"] != attrs["password_repeat"]: raise validators.ValidationError( {"password": "******"}) return attrs
def validate_hackathon_url_date(date): try: return datetime.strptime(date, "%Y-%m-%d").date() except Exception as e: raise validators.ValidationError(e, "Date should be in format %Y-%m-%d")
def perform_create(self, serializer): query = Friend.objects.filter(user=self.request.user).filter(friend=self.request.data['friend']) if query.exists(): raise validators.ValidationError("You are already connected/request send") serializer.save(user=self.request.user)
def text_validator(value: str) -> str: if bool(set(value) - set(string.ascii_letters + string.digits)): raise validators.ValidationError(USERNAME_VALIDATOR_ERROR_MESSAGE) return value
def name_validator(value): if not NAME_LETTER.search(value) or not FIRST_LETTER.search(value): raise validators.ValidationError( code=400, detail="变量名不合法, 请输入以字母开头且为数字、大小写字母、'_'、'-'的组合")