Extending guide
The following sections will teach you how to customize and extend CKAN’s features by developing your own CKAN extensions.
See also
Some core extensions come packaged with CKAN. Core extensions don’t need to be installed before you can use them as they’re installed when you install CKAN, they can simply be enabled by following the setup instructions in each extension’s documentation (some core extensions are already enabled by default). For example, the datastore extension, multilingual extension, and stats extension are all core extensions, and the data viewer also uses core extensions to enable data previews for different file formats.
See also
External extensions are CKAN extensions that don’t come packaged with CKAN, but must be downloaded and installed separately. Find external extensions at https://extensions.ckan.org/. Again, follow each extension’s own documentation to install, setup, and use the extension.
- Writing extensions tutorial
- Using custom config settings in extensions
- Making configuration options runtime-editable
- Testing extensions
- Best practices for writing extensions
- Follow CKAN’s coding standards
- Use the plugins toolkit instead of importing CKAN
- Don’t edit CKAN’s database tables
- Don’t automatically modify the database structure
- Use migrations when introducing new models
- Declare models using shared metadata
- Implement each plugin class in a separate Python module
- Avoid name clashes
- Internationalize user-visible strings
- Add third party libraries to requirements.txt
- Implementing CSRF protection
- Customizing dataset and resource metadata fields using IDatasetForm
- Plugin interfaces reference
SingletonPlugin
Plugin
implements()
Interface
IMiddleware
IAuthFunctions
IDomainObjectModification
IFeed
IGroupController
IOrganizationController
IPackageController
IPluginObserver
IConfigurable
IConfigDeclaration
IConfigurer
IActions
IResourceUrlChange
IDatasetForm
IValidators
IResourceView
IResourceController
IGroupForm
ITagController
ITemplateHelpers
IFacets
IAuthenticator
ITranslation
IUploader
IBlueprint
IPermissionLabels
IForkObserver
IApiToken
IClick
ISignal
- Plugins toolkit reference
ckan.plugins.toolkit.BaseModel
ckan.plugins.toolkit.CkanVersionException
ckan.plugins.toolkit.DefaultDatasetForm
ckan.plugins.toolkit.DefaultGroupForm
ckan.plugins.toolkit.DefaultOrganizationForm
ckan.plugins.toolkit.HelperError
ckan.plugins.toolkit.Invalid
ckan.plugins.toolkit.NotAuthorized
ckan.plugins.toolkit.ObjectNotFound
ckan.plugins.toolkit.StopOnError
ckan.plugins.toolkit.UnknownValidator
ckan.plugins.toolkit.ValidationError
ckan.plugins.toolkit._()
ckan.plugins.toolkit.abort()
ckan.plugins.toolkit.add_public_directory()
ckan.plugins.toolkit.add_resource()
ckan.plugins.toolkit.add_template_directory()
ckan.plugins.toolkit.asbool()
ckan.plugins.toolkit.asint()
ckan.plugins.toolkit.aslist()
ckan.plugins.toolkit.auth_allow_anonymous_access()
ckan.plugins.toolkit.auth_disallow_anonymous_access()
ckan.plugins.toolkit.auth_sysadmins_check()
ckan.plugins.toolkit.base
ckan.plugins.toolkit.blanket
ckan.plugins.toolkit.c
ckan.plugins.toolkit.chained_action()
ckan.plugins.toolkit.chained_auth_function()
ckan.plugins.toolkit.chained_helper()
ckan.plugins.toolkit.check_access()
ckan.plugins.toolkit.check_ckan_version()
ckan.plugins.toolkit.ckan
ckan.plugins.toolkit.config
ckan.plugins.toolkit.current_user
ckan.plugins.toolkit.enqueue_job()
ckan.plugins.toolkit.error_shout()
ckan.plugins.toolkit.fresh_context()
ckan.plugins.toolkit.g
ckan.plugins.toolkit.get_action()
ckan.plugins.toolkit.get_converter()
ckan.plugins.toolkit.get_endpoint()
ckan.plugins.toolkit.get_or_bust()
ckan.plugins.toolkit.get_validator()
ckan.plugins.toolkit.h
ckan.plugins.toolkit.literal
ckan.plugins.toolkit.login_user()
ckan.plugins.toolkit.logout_user()
ckan.plugins.toolkit.mail_recipient()
ckan.plugins.toolkit.mail_user()
ckan.plugins.toolkit.missing
ckan.plugins.toolkit.navl_validate()
ckan.plugins.toolkit.redirect_to()
ckan.plugins.toolkit.render()
ckan.plugins.toolkit.render_snippet()
ckan.plugins.toolkit.request
ckan.plugins.toolkit.requires_ckan_version()
ckan.plugins.toolkit.side_effect_free()
ckan.plugins.toolkit.signals
ckan.plugins.toolkit.ungettext()
ckan.plugins.toolkit.url_for()
ckan.plugins.toolkit.validate_action_data()
ckan.plugins.toolkit.validator_args()
- Validator functions reference
- Internationalizing strings in extensions
- Migration from Pylons to Flask
- Signals
- Customizing the DataStore Data Dictionary Form
- Customizing Table Designer Column Types and Constraints