Вы можете рассмотреть возможность использования cleaned_ перед своим полем для проверки на нем. Например, если вы хотите, чтобы проверить имя пользователя, и у нас есть модель, определенную для него, как,
class MyModel(models.Model):
username = model.CharField(max_length = 255)
то для того же у вас есть форма, как под
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['username']
def clean_username(self):
username = self.cleaned_data.get('username')
""" this will give you the actual username from the field
Now you may get that validated
"""
if username == "blah blah":
return forms.ValidationError("This isnt any name!")
else:
return username
Это согласно Джанго документация, которая гласит:
«Метод clean() в подклассе Field отвечает за запуск to_python(), validate() и run_validators() в правильном порядке и распространение их ошибок. Если в любое время любое методов повышают ValidationError, действительный и эта ошибка повышается. Этот метод возвращает чистые данные, которые затем вставляются в словарь cleaned_data формы.
Метод clean_() вызывается в подклассе формы, где заменяется именем атрибута поля формы. Этот метод выполняет любую очистку, специфичную для этого конкретного атрибута, не связанную с типом поля, которым он является. Этот метод не передает никаких параметров. Вам нужно будет искать значение поля в self.cleaned_data и помнить, что в данный момент это будет объект Python, а не исходная строка, представленная в форме (она будет в cleaned_data, потому что общий метод clean() поля , выше, уже очистил данные один раз).
Так же функция is_valid() проверяет, не вписываются ли параметры в CharField или IntegerField и т. д. Ничего с xss и т. д. –
Существуют различные способы защиты от XSS или SQL Injection в django. Правильные способы для XSS встроены в шаблоны. Для SQL Injection ORM выполнит задание, если вы не используете необработанные запросы или 'extra' – GwynBleidD