Очистка полей формы
Чтобы проверить валидность предоставленного URL-адреса изображения, нам нужно убедиться, что имя файла заканчивается расширением .jpg или .jpeg. Джанго позволяет определить методы для очистки определенных полей формы с помощью нотации clean_<fieldname>(). Этот метод выполняется для каждого поля, если оно присутствует, при вызове is_valid() на экземпляре формы. В методе "очистить" можно изменить значение поля или вызвать ошибки валидации для данного конкретного поля при необходимости. Добавьте в ImageCreateForm следующий метод:
def clean_url(self):
url = self.cleaned_data['url']
valid_extensions = ['jpg', 'jpeg']
extension = url.rsplit('.', 1)[1].lower()
if extension not in valid_extensions:
raise forms.ValidationError('The given URL does not match valid image extensions.')
return url
В этом коде мы определим метод clean_url(), чтобы очистить поле url. Код работает следующим образом:
- Мы получим значение поля url, обратившись к cleaned_data словарю экземпляра формы.
- Мы разделяем URL-адрес, чтобы получить расширение файла и проверить, существует ли у него одно из допустимых расширений. Если он не имеет таковых, мы вызываем ValidationError, и экземпляр формы не будет проверен. Мы выполняем очень простую проверку. Можно использовать более сложные методы, чтобы проверить, является ли данный URL допустимым файлом изображения или нет.
Помимо проверки заданного URL-адреса, нам также потребуется загрузить файл изображения и сохранить его. Например, можно использовать представление, обрабатывающее форму для загрузки файла изображения. Вместо этого мы собираемся использовать более общий подход, переопределяя метод save() формы модели для выполнения этой задачи при каждом сохранении формы.