docs: def geojsonfeature(source, params=''):
      """
      :params: A string with the following optional tokens:
               "properties:field:srid"
      """
      parse = re.search(r'(?P<properties>((\w+)(,\w+)*)?)(:(?P<field>(\w+)?))?(:(?P<srid>(\d+)?))?', params)
      if parse:
          parse = parse.groupdict()
      else:
          parse = {}
  
      geometry_field = parse.get('field') or 'geom'
      properties = parse.get('properties', '').split(',')
      srid = parse.get('srid') or GEOJSON_DEFAULT_SRID
  
      if source is None or isinstance(source, string_types):
          return 'null'
  
      if isinstance(source, (GEOSGeometry, GeometryField)):
          encoder = DjangoGeoJSONEncoder()
          if source.srid != srid:
              source.transform(srid)
          feature = {"type": "Feature", "properties": {}}
          feature['geometry'] = encoder.default(source)
          return json.dumps(feature)
  
      serializer = Serializer()
  
      if not hasattr(source, '__iter__'):
          source = [source]
  
      return serializer.serialize(source, properties=properties,
                                  geometry_field=geometry_field, srid=srid)