| 14 | | This creates a list of the form field names/values in a deterministic |
| 15 | | order, pickles the result with the SECRET_KEY setting, then takes an md5 |
| 16 | | hash of that. |
| 17 | | """ |
| 18 | | # Ensure that the hash does not change when a BooleanField's bound |
| 19 | | # data is a string `False' or a boolean False. |
| 20 | | # Rather than re-coding this special behaviour here, we |
| 21 | | # create a dummy BooleanField and call its clean method to get a |
| 22 | | # boolean True or False verdict that is consistent with |
| 23 | | # BooleanField.clean() |
| 24 | | dummy_bool = BooleanField(required=False) |
| 25 | | def _cleaned_data(bf): |
| 26 | | if isinstance(bf.field, BooleanField): |
| 27 | | return dummy_bool.clean(bf.data) |
| 28 | | return bf.data |
| 29 | | |
| 30 | | data = [(bf.name, _cleaned_data(bf) or '') for bf in form] |
| 31 | | data.extend(args) |
| 32 | | data.append(settings.SECRET_KEY) |
| 33 | | |
| 34 | | # Use HIGHEST_PROTOCOL because it's the most efficient. It requires |
| 35 | | # Python 2.3, but Django requires 2.3 anyway, so that's OK. |
| 36 | | pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) |
| 37 | | |
| 38 | | return md5_constructor(pickled).hexdigest() |
| | 14 | This creates a list of the form field names/values in a deterministic |
| | 15 | order, pickles the result with the SECRET_KEY setting, then takes an md5 |
| | 16 | hash of that. |
| | 17 | """ |
| | 18 | # Ensure that the hash does not change when a BooleanField's bound |
| | 19 | # data is a string `False' or a boolean False. |
| | 20 | # Rather than re-coding this special behaviour here, we |
| | 21 | # create a dummy BooleanField and call its clean method to get a |
| | 22 | # boolean True or False verdict that is consistent with |
| | 23 | # BooleanField.clean() |
| | 24 | dummy_bool = BooleanField(required=False) |
| | 25 | def _cleaned_data(bf): |
| | 26 | if isinstance(bf.field, BooleanField): |
| | 27 | return dummy_bool.clean(bf.data) |
| | 28 | return bf.data |
| | 30 | data = [(bf.name, _cleaned_data(bf) or '') for bf in form] |
| | 31 | data.extend(args) |
| | 32 | data.append(settings.SECRET_KEY) |
| | 33 | |
| | 34 | # Use HIGHEST_PROTOCOL because it's the most efficient. It requires |
| | 35 | # Python 2.3, but Django requires 2.3 anyway, so that's OK. |
| | 36 | pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) |
| | 37 | |
| | 38 | return md5_constructor(pickled).hexdigest() |
| | 39 | Sin fin-de-línea al final del archivo |