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 |