У меня есть пользовательское поле django, основанное на django CharField (django versoon = 1.6):
class MyHTMLField(forms.CharField):
def __init__(self, *args, **kwargs):
kwargs['max_length'] = kwargs.get('max_length', settings.MAX_MYHTML_SIZE)
super(MyHTMLField, self).__init__(*args, **kwargs)
И вот как я использую его в функции API для проверки ввода:
validation_field = MyHTMLField()
try:
validation_field.clean(html_content)
except forms.ValidationError:
errors = validation_field.errors
Проблема заключается в следующем: max_length depends
содержимого строки html_content
, поскольку существует несколько типов содержимого, и у нас есть различные ограничения по длине.Итак, у нас есть функция (упрощенная) для получения типа контента:
def get_content_type(html_content):
return 1 if "sign" in html_content else 0
До этого времени мы использовали эту функцию только после проверки MyHTMLField.И теперь мне нужно определить тип содержимого перед запуском метода MyHTMLField.clean()
, чтобы динамически передавать ему правильный max_size, а не только из константы настроек.
Но есть ли способ проанализировать неподтвержденный контент перед запуском метода .clean ()?Я знаю, что MyHTMLField.clean()
будет запускать функцию django `run_validators", и пока единственной валидатором является проверка длины. Но, может быть, есть некоторые скрытые дополнительные проверки безопасности вводимого текста?