code: def dumps(obj,
            key=None,
            salt='django.core.signing',
            serializer=JSONSerializer,
            compress=False):
      
      data = serializer().dumps(obj)
  
      # Flag for if it's been compressed or not
      is_compressed = False
  
      if compress:
          # Avoid zlib dependency unless compress is being used
          compressed = zlib.compress(data)
          if len(compressed) < (len(data) - 1):
              data = compressed
              is_compressed = True
      base64d = b64_encode(data)
      if is_compressed:
          base64d = b'.' + base64d
      return TimestampSigner(key, salt=salt).sign(base64d)
docs: Returns URL-safe, sha1 signed base64 compressed JSON string. If key is
      None, settings.SECRET_KEY is used instead.
  
      If compress is True (not the default) checks if compressing using zlib can
      save some space. Prepends a '.' to signify compression. This is included
      in the signature, to protect against zip bombs.
  
      Salt can be used to namespace the hash, so that a signed string is
      only valid for a given namespace. Leaving this at the default
      value or re-using a salt value across different parts of your
      application without good cause is a security risk.
  
      The serializer is expected to return a bytestring.