Index: django/contrib/formtools/utils.py =================================================================== --- django/contrib/formtools/utils.py (revisión: 8597) +++ django/contrib/formtools/utils.py (copia de trabajo) @@ -8,32 +8,31 @@ from django.forms import BooleanField def security_hash(request, form, *args): - """ - Calculates a security hash for the given Form instance. + """ + Calculates a security hash for the given Form instance. - This creates a list of the form field names/values in a deterministic - order, pickles the result with the SECRET_KEY setting, then takes an md5 - hash of that. - """ - # Ensure that the hash does not change when a BooleanField's bound - # data is a string `False' or a boolean False. - # Rather than re-coding this special behaviour here, we - # create a dummy BooleanField and call its clean method to get a - # boolean True or False verdict that is consistent with - # BooleanField.clean() - dummy_bool = BooleanField(required=False) - def _cleaned_data(bf): - if isinstance(bf.field, BooleanField): - return dummy_bool.clean(bf.data) - return bf.data - - data = [(bf.name, _cleaned_data(bf) or '') for bf in form] - data.extend(args) - data.append(settings.SECRET_KEY) - - # Use HIGHEST_PROTOCOL because it's the most efficient. It requires - # Python 2.3, but Django requires 2.3 anyway, so that's OK. - pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) - - return md5_constructor(pickled).hexdigest() + This creates a list of the form field names/values in a deterministic + order, pickles the result with the SECRET_KEY setting, then takes an md5 + hash of that. + """ + # Ensure that the hash does not change when a BooleanField's bound + # data is a string `False' or a boolean False. + # Rather than re-coding this special behaviour here, we + # create a dummy BooleanField and call its clean method to get a + # boolean True or False verdict that is consistent with + # BooleanField.clean() + dummy_bool = BooleanField(required=False) + def _cleaned_data(bf): + if isinstance(bf.field, BooleanField): + return dummy_bool.clean(bf.data) + return bf.data + data = [(bf.name, _cleaned_data(bf) or '') for bf in form] + data.extend(args) + data.append(settings.SECRET_KEY) + + # Use HIGHEST_PROTOCOL because it's the most efficient. It requires + # Python 2.3, but Django requires 2.3 anyway, so that's OK. + pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) + + return md5_constructor(pickled).hexdigest() \ Sin fin-de-línea al final del archivo