| 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 |